]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
binman: Allow zero-length entries to overlap
authorSimon Glass <sjg@chromium.org>
Fri, 10 Jul 2020 00:39:42 +0000 (18:39 -0600)
committerSimon Glass <sjg@chromium.org>
Mon, 20 Jul 2020 17:37:47 +0000 (11:37 -0600)
Some binary blobs unfortunately obtain their position in the image from
other binary blobs, such as Intel's 'descriptor'. In this case we cannot
rely on packing to work. It is not possible to produce a valid image in
any case, due to the missing blobs.

Allow zero-length overlaps so that this does not cause any problems.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
tools/binman/etype/section.py
tools/binman/ftest.py
tools/binman/test/160_pack_overlap_zero.dts [new file with mode: 0644]

index 7cd12c0204ef275869c820a64b274c57cef32aa7..73c5553c8120e88cb10c695fb9ab06a31687a0d3 100644 (file)
@@ -226,7 +226,7 @@ class Entry_section(Entry):
                             "at %#x (%d)" %
                             (entry.offset, entry.offset, self._skip_at_start,
                              self._skip_at_start))
-            if entry.offset < offset:
+            if entry.offset < offset and entry.size:
                 entry.Raise("Offset %#x (%d) overlaps with previous entry '%s' "
                             "ending at %#x (%d)" %
                             (entry.offset, entry.offset, prev_name, offset, offset))
index 146d4c51d3f4f8dc881d51a7043134a0cb20c7d4..614ac4ed39d66d5a8e7fd19e7aaa350bb6175315 100644 (file)
@@ -3421,6 +3421,10 @@ class TestFunctional(unittest.TestCase):
         err = stderr.getvalue()
         self.assertRegex(err, "Image 'main-section'.*missing.*: intel-ifwi")
 
+    def testPackOverlap(self):
+        """Test that zero-size overlapping regions are ignored"""
+        self._DoTestFile('160_pack_overlap_zero.dts')
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/tools/binman/test/160_pack_overlap_zero.dts b/tools/binman/test/160_pack_overlap_zero.dts
new file mode 100644 (file)
index 0000000..731aa1c
--- /dev/null
@@ -0,0 +1,18 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+/dts-v1/;
+
+/ {
+       #address-cells = <1>;
+       #size-cells = <1>;
+
+       binman {
+               u-boot {
+               };
+
+               fill {
+                       size = <0>;
+                       offset = <3>;
+               };
+       };
+};