binman: Allow support for writing a size symbol to binaries
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@chromium.org>
This commit is contained in:
parent
eb0086fa59
commit
b87064c249
@ -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):
|
||||
|
@ -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))
|
||||
|
||||
|
@ -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):
|
||||
@ -3305,20 +3305,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):
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user