binman: Add a function to obtain the image for an Entry
authorSimon Glass <sjg@chromium.org>
Sat, 20 Jul 2019 18:23:46 +0000 (12:23 -0600)
committerSimon Glass <sjg@chromium.org>
Mon, 29 Jul 2019 15:38:06 +0000 (09:38 -0600)
At present we have an 'image' property in the entry for this purpose, but
this is not necessary and seems error-prone in the presence of
inheritance. Add a function instead. The Entry_section class overrides
this with a special version, since top-level sections are in fact images,
since Image inherits Entry_section.

Signed-off-by: Simon Glass <sjg@chromium.org>
tools/binman/entry.py
tools/binman/etype/fmap.py
tools/binman/etype/section.py
tools/binman/image.py

index c4ddb43b3189470e75aa0c51b58727a28e3060c7..ddf52d8e1034601b06e7ac86853aa3612097bab7 100644 (file)
@@ -700,3 +700,11 @@ features to produce new behaviours.
         data = self.ReadData(decomp)
         self.ProcessContentsUpdate(data)
         self.Detail('Loaded data size %x' % len(data))
+
+    def GetImage(self):
+        """Get the image containing this entry
+
+        Returns:
+            Image object containing this entry
+        """
+        return self.section.GetImage()
index f8d8d866f1381083d0be28bbe7ff9e7413ac2894..56677cbac1c6f57a33ba6c3cb1e72f7af86a7cc2 100644 (file)
@@ -49,7 +49,7 @@ class Entry_fmap(Entry):
                 areas.append(fmap_util.FmapArea(pos or 0, entry.size or 0,
                                             tools.FromUnicode(entry.name), 0))
 
-        entries = self.section.image.GetEntries()
+        entries = self.GetImage().GetEntries()
         areas = []
         for entry in entries.values():
             _AddEntries(areas, entry)
index c875a79f1ffc598a843bbf5f20cae14739afb4d8..0fb81419ceaed069d15a535deedc9a04e6086770 100644 (file)
@@ -45,8 +45,6 @@ class Entry_section(Entry):
     def __init__(self, section, etype, node, test=False):
         if not test:
             Entry.__init__(self, section, etype, node)
-        if section:
-            self.image = section.image
         self._entries = OrderedDict()
         self._pad_byte = 0
         self._sort = False
@@ -374,7 +372,7 @@ class Entry_section(Entry):
             Image size as an integer number of bytes, which may be None if the
                 image size is dynamic and its sections have not yet been packed
         """
-        return self.image.size
+        return self.GetImage().size
 
     def FindEntryType(self, etype):
         """Find an entry type in the section
@@ -468,3 +466,16 @@ class Entry_section(Entry):
         for entry in self._entries.values():
             entry.LoadData(decomp)
         self.Detail('Loaded data')
+
+    def GetImage(self):
+        """Get the image containing this section
+
+        Note that a top-level section is actually an Image, so this function may
+        return self.
+
+        Returns:
+            Image object containing this section
+        """
+        if not self.section:
+            return self
+        return self.section.GetImage()
index 970d33f71101c5e3fe6fc84ed08ac3a9d16d57a2..c9908187343fcc46d7c6083f66509051cc16d047 100644 (file)
@@ -42,7 +42,6 @@ class Image(section.Entry_section):
             we create a section manually.
     """
     def __init__(self, name, node, test=False):
-        self.image = self
         section.Entry_section.__init__(self, None, 'section', node, test)
         self.name = 'main-section'
         self.image_name = name