[U-Boot] [PATCH 25/34] binman: Allow support for writing a size symbol to binaries
Simon Glass
sjg at chromium.org
Sat Aug 24 13:23:05 UTC 2019
It is useful to be able to access the size of an image in SPL, with
something like:
binman_sym_declare(unsigned long, u_boot_any, size);
...
ulong u_boot_size = binman_sym(ulong, u_boot_any, size);
Add support for this and update the tests.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
tools/binman/elf_test.py | 4 ++--
tools/binman/etype/section.py | 2 ++
tools/binman/ftest.py | 14 +++++++-------
tools/binman/test/u_boot_binman_syms.c | 1 +
4 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/tools/binman/elf_test.py b/tools/binman/elf_test.py
index f05545bcb1..c0c11cb340 100644
--- a/tools/binman/elf_test.py
+++ b/tools/binman/elf_test.py
@@ -155,11 +155,11 @@ class TestElf(unittest.TestCase):
This should produce -1 values for all thress symbols, taking up the
first 16 bytes of the image.
"""
- entry = FakeEntry(20)
+ entry = FakeEntry(24)
section = FakeSection(sym_value=None)
elf_fname = self.ElfTestFile('u_boot_binman_syms')
syms = elf.LookupAndWriteSymbols(elf_fname, entry, section)
- self.assertEqual(tools.GetBytes(255, 16) + tools.GetBytes(ord('a'), 4),
+ self.assertEqual(tools.GetBytes(255, 20) + tools.GetBytes(ord('a'), 4),
entry.data)
def testDebug(self):
diff --git a/tools/binman/etype/section.py b/tools/binman/etype/section.py
index ff5d30f3fa..d39c6ad81e 100644
--- a/tools/binman/etype/section.py
+++ b/tools/binman/etype/section.py
@@ -344,6 +344,8 @@ class Entry_section(Entry):
return entry.offset
elif prop_name == 'image_pos':
return entry.image_pos
+ if prop_name == 'size':
+ return entry.size
else:
raise ValueError("%s: No such property '%s'" % (msg, prop_name))
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index 65d3ad59ea..a740c3e03d 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -1236,10 +1236,10 @@ class TestFunctional(unittest.TestCase):
self._SetupSplElf('u_boot_binman_syms')
data = self._DoReadFile('053_symbols.dts')
- sym_values = struct.pack('<LQL', 0, 28, 24)
- expected = (sym_values + U_BOOT_SPL_DATA[16:] +
+ sym_values = struct.pack('<LQLL', 0, 28, 24, 4)
+ expected = (sym_values + U_BOOT_SPL_DATA[20:] +
tools.GetBytes(0xff, 1) + U_BOOT_DATA + sym_values +
- U_BOOT_SPL_DATA[16:])
+ U_BOOT_SPL_DATA[20:])
self.assertEqual(expected, data)
def testPackUnitAddress(self):
@@ -3307,20 +3307,20 @@ class TestFunctional(unittest.TestCase):
self._SetupSplElf('u_boot_binman_syms')
self._SetupTplElf('u_boot_binman_syms')
data = self._DoReadFile('149_symbols_tpl.dts')
- sym_values = struct.pack('<LQL', 4, 0x1c, 0x34)
+ sym_values = struct.pack('<LQLL', 4, 0x1c, 0x34, 4)
upto1 = 4 + len(U_BOOT_SPL_DATA)
- expected1 = tools.GetBytes(0xff, 4) + sym_values + U_BOOT_SPL_DATA[16:]
+ expected1 = tools.GetBytes(0xff, 4) + sym_values + U_BOOT_SPL_DATA[20:]
self.assertEqual(expected1, data[:upto1])
upto2 = upto1 + 1 + len(U_BOOT_SPL_DATA)
- expected2 = tools.GetBytes(0xff, 1) + sym_values + U_BOOT_SPL_DATA[16:]
+ expected2 = tools.GetBytes(0xff, 1) + sym_values + U_BOOT_SPL_DATA[20:]
self.assertEqual(expected2, data[upto1:upto2])
upto3 = 0x34 + len(U_BOOT_DATA)
expected3 = tools.GetBytes(0xff, 1) + U_BOOT_DATA
self.assertEqual(expected3, data[upto2:upto3])
- expected4 = sym_values + U_BOOT_TPL_DATA[16:]
+ expected4 = sym_values + U_BOOT_TPL_DATA[20:]
self.assertEqual(expected4, data[upto3:])
def testPackX86RomIfwiSectiom(self):
diff --git a/tools/binman/test/u_boot_binman_syms.c b/tools/binman/test/u_boot_binman_syms.c
index 4898f983e3..4520b319f1 100644
--- a/tools/binman/test/u_boot_binman_syms.c
+++ b/tools/binman/test/u_boot_binman_syms.c
@@ -11,3 +11,4 @@
binman_sym_declare(unsigned long, u_boot_spl, offset);
binman_sym_declare(unsigned long long, u_boot_spl2, offset);
binman_sym_declare(unsigned long, u_boot_any, image_pos);
+binman_sym_declare(unsigned long, u_boot_any, size);
--
2.23.0.187.g17f5b7556c-goog
More information about the U-Boot
mailing list