summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2019-09-25 17:56:21 +0300
committerBin Meng <bmeng.cn@gmail.com>2019-10-08 08:57:44 +0300
commit2d553c006d46653f3e0367cc5bfe36a9c7128eb5 (patch)
tree9463743d1b2f57b732c579dc93263d1ea9f3985b /tools
parent4e185e8dd7aa3ff7618d228ebfaffb507a569c07 (diff)
downloadu-boot-2d553c006d46653f3e0367cc5bfe36a9c7128eb5.tar.xz
binman: Handle reading data for end-at-4gb sections
Some x86 sections have special offsets which currently result in empty data being returned from the 'extract' command. Fix this by taking account of the skip-at-start property. Add a little more debugging while we are here. Signed-off-by: Simon Glass <sjg@chromium.org> Acked-by: Bin Meng <bmeng.cn@gmail.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/binman/entry.py6
-rw-r--r--tools/binman/etype/section.py16
-rw-r--r--tools/binman/image.py2
3 files changed, 11 insertions, 13 deletions
diff --git a/tools/binman/entry.py b/tools/binman/entry.py
index f2f1b967a4..fe8e1dd8a5 100644
--- a/tools/binman/entry.py
+++ b/tools/binman/entry.py
@@ -714,17 +714,19 @@ features to produce new behaviours.
"""
# Use True here so that we get an uncompressed section to work from,
# although compressed sections are currently not supported
+ tout.Debug("ReadChildData section '%s', entry '%s'" %
+ (self.section.GetPath(), self.GetPath()))
data = self.section.ReadChildData(self, decomp)
return data
def ReadChildData(self, child, decomp=True):
- """Read the data for a particular child
+ """Read the data for a particular child entry
This reads data from the parent and extracts the piece that relates to
the given child.
Args:
- child: Child to read (must be valid)
+ child: Child entry to read data for (must be valid)
decomp: True to decompress any compressed data before returning it;
False to return the raw, uncompressed data
diff --git a/tools/binman/etype/section.py b/tools/binman/etype/section.py
index 5d34fc546a..8179daf562 100644
--- a/tools/binman/etype/section.py
+++ b/tools/binman/etype/section.py
@@ -500,18 +500,12 @@ class Entry_section(Entry):
return data
def ReadChildData(self, child, decomp=True):
- """Read the data for a particular child entry
-
- Args:
- child: Child entry to read data for
- decomp: True to return uncompressed data, False to leave the data
- compressed if it is compressed
-
- Returns:
- Data contents of entry
- """
+ tout.Debug("ReadChildData for child '%s'" % child.GetPath())
parent_data = self.ReadData(True)
- data = parent_data[child.offset:child.offset + child.size]
+ offset = child.offset - self._skip_at_start
+ tout.Debug("Extract for child '%s': offset %#x, skip_at_start %#x, result %#x" %
+ (child.GetPath(), child.offset, self._skip_at_start, offset))
+ data = parent_data[offset:offset + child.size]
if decomp:
indata = data
data = tools.Decompress(indata, child.compress)
diff --git a/tools/binman/image.py b/tools/binman/image.py
index 7b39a1ddce..2beab7fd4d 100644
--- a/tools/binman/image.py
+++ b/tools/binman/image.py
@@ -201,6 +201,8 @@ class Image(section.Entry_section):
return entry
def ReadData(self, decomp=True):
+ tout.Debug("Image '%s' ReadData(), size=%#x" %
+ (self.GetPath(), len(self._data)))
return self._data
def GetListEntries(self, entry_paths):