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>
This commit is contained in:
Simon Glass 2020-10-26 17:40:16 -06:00
parent 97c3e9a6fa
commit 63e7ba6c18
3 changed files with 22 additions and 2 deletions

View File

@ -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

View File

@ -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

View File

@ -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']