aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorAlper Nebi Yasak <alpernebiyasak@gmail.com>2022-03-27 18:31:46 +0300
committerTom Rini <trini@konsulko.com>2022-04-25 10:11:05 -0400
commite2ce4fb9869dcedd3ecb4ad552c86e02248649df (patch)
tree645f1bb4f77477f1d3956f5a25ec9b323e8d969f /tools
parent8ee4ec9bf560dd511f3bfecd5df254fb6814ef67 (diff)
downloadu-boot-e2ce4fb9869dcedd3ecb4ad552c86e02248649df.zip
u-boot-e2ce4fb9869dcedd3ecb4ad552c86e02248649df.tar.gz
u-boot-e2ce4fb9869dcedd3ecb4ad552c86e02248649df.tar.bz2
binman: Don't reset offset/size if image doesn't allow repacking
When an image has the 'allow-repack' property, binman includes the original offset and size properties from the image description in the fdtmap. These are later used as the packing constraints when replacing entries in an image, so other unconstrained entries can be freely positioned. Replacing an entry in an image without 'allow-repack' (and therefore the original offsets) follows the same logic and results in entries being merely concatenated. Instead, skip resetting the calculated offsets and sizes to the missing originals for these images so that every entry is constrained to its existing offset/size. Add tests that replace an entry with smaller or equal-sized data, in an image that doesn't allow repacking. Attempting to do so with bigger-size data is already an error that is already being tested. Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'tools')
-rw-r--r--tools/binman/control.py2
-rw-r--r--tools/binman/ftest.py21
2 files changed, 22 insertions, 1 deletions
diff --git a/tools/binman/control.py b/tools/binman/control.py
index e170aea..ce57dc7 100644
--- a/tools/binman/control.py
+++ b/tools/binman/control.py
@@ -303,7 +303,7 @@ def BeforeReplace(image, allow_resize):
# If repacking, drop the old offset/size values except for the original
# ones, so we are only left with the constraints.
- if allow_resize:
+ if image.allow_repack and allow_resize:
image.ResetForPack()
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index 03e6d92..c9a8209 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -5592,6 +5592,27 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
finally:
shutil.rmtree(tmpdir)
+ def testReplaceResizeNoRepackSameSize(self):
+ """Test replacing entries with same-size data without repacking"""
+ expected = b'x' * len(U_BOOT_DATA)
+ data, expected_fdtmap, _ = self._RunReplaceCmd('u-boot', expected)
+ self.assertEqual(expected, data)
+
+ path, fdtmap = state.GetFdtContents('fdtmap')
+ self.assertIsNotNone(path)
+ self.assertEqual(expected_fdtmap, fdtmap)
+
+ def testReplaceResizeNoRepackSmallerSize(self):
+ """Test replacing entries with smaller-size data without repacking"""
+ new_data = b'x'
+ data, expected_fdtmap, _ = self._RunReplaceCmd('u-boot', new_data)
+ expected = new_data.ljust(len(U_BOOT_DATA), b'\0')
+ self.assertEqual(expected, data)
+
+ path, fdtmap = state.GetFdtContents('fdtmap')
+ self.assertIsNotNone(path)
+ self.assertEqual(expected_fdtmap, fdtmap)
+
if __name__ == "__main__":
unittest.main()