summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2020-07-10 03:39:42 +0300
committerSimon Glass <sjg@chromium.org>2020-07-20 20:37:47 +0300
commit8200d8871a6a87834e26e38ca5cd475f86733dfd (patch)
tree259acbcdc2fd311cd5213fcddceea8d59a595e4f /tools
parent2f5c3a4d1d1f57cc7d3bcb9a6b1a509d399cade1 (diff)
downloadu-boot-8200d8871a6a87834e26e38ca5cd475f86733dfd.tar.xz
binman: Allow zero-length entries to overlap
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>
Diffstat (limited to 'tools')
-rw-r--r--tools/binman/etype/section.py2
-rw-r--r--tools/binman/ftest.py4
-rw-r--r--tools/binman/test/160_pack_overlap_zero.dts18
3 files changed, 23 insertions, 1 deletions
diff --git a/tools/binman/etype/section.py b/tools/binman/etype/section.py
index 7cd12c0204..73c5553c81 100644
--- a/tools/binman/etype/section.py
+++ b/tools/binman/etype/section.py
@@ -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))
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index 146d4c51d3..614ac4ed39 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -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
index 0000000000..731aa1cbe6
--- /dev/null
+++ b/tools/binman/test/160_pack_overlap_zero.dts
@@ -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>;
+ };
+ };
+};