aboutsummaryrefslogtreecommitdiff
path: root/tools/binman/etype
diff options
context:
space:
mode:
authorSimon Glass2019-07-20 12:23:55 -0600
committerSimon Glass2019-07-29 09:38:06 -0600
commiteba1f0cc942947722f70029c033b915113cec1ba (patch)
tree389003da6941977c16b6edd1e7afdecec5ea3d93 /tools/binman/etype
parent7400107e467da52c7e6772b677f69f4464f6d2ce (diff)
binman: Add more tests for image header position
The positioning does not currently work correctly if at the end of an image with no fixed size. Also if the header is in the middle of an image it can cause a gap in the image since the header position is normally at the image end, so entries after it are placed after the end of the image. Fix these problems and add more tests to cover these cases. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'tools/binman/etype')
-rw-r--r--tools/binman/etype/image_header.py16
-rw-r--r--tools/binman/etype/section.py9
2 files changed, 23 insertions, 2 deletions
diff --git a/tools/binman/etype/image_header.py b/tools/binman/etype/image_header.py
index 8f9c5aa5d9e..4b69eda1a22 100644
--- a/tools/binman/etype/image_header.py
+++ b/tools/binman/etype/image_header.py
@@ -86,8 +86,20 @@ class Entry_image_header(Entry):
if self.location not in ['start', 'end']:
self.Raise("Invalid location '%s', expected 'start' or 'end'" %
self.location)
- image_size = self.section.GetImageSize() or 0
- self.offset = (0 if self.location != 'end' else image_size - 8)
+ order = self.GetSiblingOrder()
+ if self.location != order and not self.section.GetSort():
+ self.Raise("Invalid sibling order '%s' for image-header: Must be at '%s' to match location" %
+ (order, self.location))
+ if self.location != 'end':
+ offset = 0
+ else:
+ image_size = self.section.GetImageSize()
+ if image_size is None:
+ # We don't know the image, but this must be the last entry,
+ # so we can assume it goes
+ offset = offset
+ else:
+ offset = image_size - IMAGE_HEADER_LEN
return Entry.Pack(self, offset)
def ProcessContents(self):
diff --git a/tools/binman/etype/section.py b/tools/binman/etype/section.py
index 0fb81419cea..3ce013d5029 100644
--- a/tools/binman/etype/section.py
+++ b/tools/binman/etype/section.py
@@ -479,3 +479,12 @@ class Entry_section(Entry):
if not self.section:
return self
return self.section.GetImage()
+
+ def GetSort(self):
+ """Check if the entries in this section will be sorted
+
+ Returns:
+ True if to be sorted, False if entries will be left in the order
+ they appear in the device tree
+ """
+ return self._sort