aboutsummaryrefslogtreecommitdiff
path: root/tools/binman
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2020-10-26 17:40:12 -0600
committerSimon Glass <sjg@chromium.org>2020-10-29 14:42:59 -0600
commit4a655c9bd7d0e58206ed4417e8da31ad5da4926b (patch)
treeba3e20be270d36107022a20bf7876d3af989e9c0 /tools/binman
parent17ea9f35e780d073820a770b8e65641761a31d1f (diff)
downloadu-boot-4a655c9bd7d0e58206ed4417e8da31ad5da4926b.zip
u-boot-4a655c9bd7d0e58206ed4417e8da31ad5da4926b.tar.gz
u-boot-4a655c9bd7d0e58206ed4417e8da31ad5da4926b.tar.bz2
binman: Refactor _BuildSectionData()
At present this function does the padding needed around an entry. It is easier to understand what is going on if we have a function that returns the contents of an entry, with padding included. Refactor the code accordingly, adding a new GetPaddedData() method. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'tools/binman')
-rw-r--r--tools/binman/etype/section.py59
-rw-r--r--tools/binman/image.py2
2 files changed, 51 insertions, 10 deletions
diff --git a/tools/binman/etype/section.py b/tools/binman/etype/section.py
index d05adf0..f804329 100644
--- a/tools/binman/etype/section.py
+++ b/tools/binman/etype/section.py
@@ -16,6 +16,7 @@ from binman.entry import Entry
from dtoc import fdt_util
from patman import tools
from patman import tout
+from patman.tools import ToHexSize
class Entry_section(Entry):
@@ -144,6 +145,36 @@ class Entry_section(Entry):
def ObtainContents(self):
return self.GetEntryContents()
+ def GetPaddedDataForEntry(self, entry):
+ """Get the data for an entry including any padding
+
+ Gets the entry data and uses the section pad-byte value to add padding
+ before and after as defined by the pad-before and pad-after properties.
+ This does not consider alignment.
+
+ Args:
+ entry: Entry to check
+
+ Returns:
+ Contents of the entry along with any pad bytes before and
+ after it (bytes)
+ """
+ data = b''
+ # Handle padding before the entry
+ if entry.pad_before:
+ data += tools.GetBytes(self._pad_byte, entry.pad_before)
+
+ # Add in the actual entry data
+ data += entry.GetData()
+
+ # Handle padding after the entry
+ if entry.pad_after:
+ data += tools.GetBytes(self._pad_byte, entry.pad_after)
+
+ self.Detail('GetPaddedDataForEntry: size %s' % ToHexSize(self.data))
+
+ return data
+
def _BuildSectionData(self):
"""Build the contents of a section
@@ -158,23 +189,15 @@ class Entry_section(Entry):
section_data = b''
for entry in self._entries.values():
- data = entry.GetData()
+ data = self.GetPaddedDataForEntry(entry)
# Handle empty space before the entry
pad = (entry.offset or 0) - self._skip_at_start - len(section_data)
if pad > 0:
section_data += tools.GetBytes(self._pad_byte, pad)
- # Handle padding before the entry
- if entry.pad_before:
- section_data += tools.GetBytes(self._pad_byte, entry.pad_before)
-
# Add in the actual entry data
section_data += data
- # Handle padding after the entry
- if entry.pad_after:
- section_data += tools.GetBytes(self._pad_byte, entry.pad_after)
-
if self.size:
section_data += tools.GetBytes(self._pad_byte,
self.size - len(section_data))
@@ -182,6 +205,24 @@ class Entry_section(Entry):
(len(self._entries), len(section_data)))
return self.CompressData(section_data)
+ def GetPaddedData(self):
+ """Get the data for a section including any padding
+
+ Gets the section data and uses the parent section's pad-byte value to
+ add padding before and after as defined by the pad-before and pad-after
+ properties. If this is a top-level section (i.e. an image), this is the
+ same as GetData(), since padding is not supported.
+
+ This does not consider alignment.
+
+ Returns:
+ Contents of the section along with any pad bytes before and
+ after it (bytes)
+ """
+ if self.section:
+ return super().GetPaddedData()
+ return self.GetData()
+
def GetData(self):
return self._BuildSectionData()
diff --git a/tools/binman/image.py b/tools/binman/image.py
index a8772c3..d65ab88 100644
--- a/tools/binman/image.py
+++ b/tools/binman/image.py
@@ -146,7 +146,7 @@ class Image(section.Entry_section):
fname = tools.GetOutputFilename(self._filename)
tout.Info("Writing image to '%s'" % fname)
with open(fname, 'wb') as fd:
- data = self.GetData()
+ data = self.GetPaddedData()
fd.write(data)
tout.Info("Wrote %#x bytes" % len(data))