summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2020-10-27 02:40:16 +0300
committerSimon Glass <sjg@chromium.org>2020-10-29 23:42:59 +0300
commit63e7ba6c1820def06e7ba88ce357cb605285e70c (patch)
treee8a3e3bb89cf0ebc36299c683ce56fb52e6d722e
parent97c3e9a6faa4483a700b26988bc48c2f9efe8dd6 (diff)
downloadu-boot-63e7ba6c1820def06e7ba88ce357cb605285e70c.tar.xz
binman: Set section contents in GetData()
Section contents is not set up when ObtainContents() is called, since packing often changes the layout of the contents. Ensure that the contents are correctly recorded by making this function regenerate the section. It is normally only called by the parent section (when packing) or by the top-level image code, when writing out the image. So the performance impact is fairly small. Now that sections have their contents in their 'data' property, update testSkipAtStartSectionPad() to check it. Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r--tools/binman/entry.py6
-rw-r--r--tools/binman/etype/section.py14
-rw-r--r--tools/binman/ftest.py4
3 files changed, 22 insertions, 2 deletions
diff --git a/tools/binman/entry.py b/tools/binman/entry.py
index d701eaff8f..01a5fde84e 100644
--- a/tools/binman/entry.py
+++ b/tools/binman/entry.py
@@ -437,6 +437,12 @@ class Entry(object):
return self._node.path
def GetData(self):
+ """Get the contents of an entry
+
+ Returns:
+ bytes content of the entry, excluding any padding. If the entry is
+ compressed, the compressed data is returned
+ """
self.Detail('GetData: size %s' % ToHexSize(self.data))
return self.data
diff --git a/tools/binman/etype/section.py b/tools/binman/etype/section.py
index c423a22c80..6e6f674972 100644
--- a/tools/binman/etype/section.py
+++ b/tools/binman/etype/section.py
@@ -226,7 +226,19 @@ class Entry_section(Entry):
return section.GetPaddedDataForEntry(self)
def GetData(self):
- return self._BuildSectionData()
+ """Get the contents of an entry
+
+ This builds the contents of the section, stores this as the contents of
+ the section and returns it
+
+ Returns:
+ bytes content of the section, made up for all all of its subentries.
+ This excludes any padding. If the section is compressed, the
+ compressed data is returned
+ """
+ data = self._BuildSectionData()
+ self.SetContents(data)
+ return data
def GetOffsets(self):
"""Handle entries that want to set the offset/size of other entries
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index 4c94bea6f0..6f47deac3b 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -1822,6 +1822,8 @@ class TestFunctional(unittest.TestCase):
orig = self._decompress(entry.data)
self.assertEqual(orig, entry.uncomp_data)
+ self.assertEqual(image.data, entry.data)
+
expected = {
'blob:uncomp-size': len(COMPRESS_DATA),
'blob:size': len(data),
@@ -3890,7 +3892,7 @@ class TestFunctional(unittest.TestCase):
section = entries['section']
self.assertEqual(0, section.offset)
self.assertEqual(len(all), section.size)
- self.assertIsNone(section.data)
+ self.assertEqual(U_BOOT_DATA, section.data)
self.assertEqual(all, section.GetPaddedData())
entry = section.GetEntries()['u-boot']