mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
binman: Update elf to return number of written symbols
Update the LookupAndWriteSymbols() function to return the number of symbols written. Also add some logging for when debugging is not enabled. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
8163907adf
commit
7a58a0f319
2 changed files with 16 additions and 5 deletions
|
@ -248,6 +248,9 @@ def LookupAndWriteSymbols(elf_fname, entry, section, is_elf=False,
|
|||
entry: Entry to process
|
||||
section: Section which can be used to lookup symbol values
|
||||
base_sym: Base symbol marking the start of the image
|
||||
|
||||
Returns:
|
||||
int: Number of symbols written
|
||||
"""
|
||||
if not base_sym:
|
||||
base_sym = '__image_copy_start'
|
||||
|
@ -269,12 +272,13 @@ def LookupAndWriteSymbols(elf_fname, entry, section, is_elf=False,
|
|||
|
||||
if not syms:
|
||||
tout.debug('LookupAndWriteSymbols: no syms')
|
||||
return
|
||||
return 0
|
||||
base = syms.get(base_sym)
|
||||
if not base and not is_elf:
|
||||
tout.debug('LookupAndWriteSymbols: no base')
|
||||
return
|
||||
return 0
|
||||
base_addr = 0 if is_elf else base.address
|
||||
count = 0
|
||||
for name, sym in syms.items():
|
||||
if name.startswith('_binman'):
|
||||
msg = ("Section '%s': Symbol '%s'\n in entry '%s'" %
|
||||
|
@ -307,6 +311,11 @@ def LookupAndWriteSymbols(elf_fname, entry, section, is_elf=False,
|
|||
(msg, name, offset, value, len(value_bytes)))
|
||||
entry.data = (entry.data[:offset] + value_bytes +
|
||||
entry.data[offset + sym.size:])
|
||||
count += 1
|
||||
if count:
|
||||
tout.detail(
|
||||
f"Section '{section.GetPath()}': entry '{entry.GetPath()}' : {count} symbols")
|
||||
return count
|
||||
|
||||
def GetSymbolValue(sym, data, msg):
|
||||
"""Get the value of a symbol
|
||||
|
|
|
@ -141,7 +141,8 @@ class TestElf(unittest.TestCase):
|
|||
entry = FakeEntry(10)
|
||||
section = FakeSection()
|
||||
elf_fname = self.ElfTestFile('u_boot_binman_syms_bad')
|
||||
elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
||||
count = elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
||||
self.assertEqual(0, count)
|
||||
|
||||
def testBadSymbolSize(self):
|
||||
"""Test that an attempt to use an 8-bit symbol are detected
|
||||
|
@ -162,7 +163,7 @@ class TestElf(unittest.TestCase):
|
|||
def testNoValue(self):
|
||||
"""Test the case where we have no value for the symbol
|
||||
|
||||
This should produce -1 values for all thress symbols, taking up the
|
||||
This should produce -1 values for all three symbols, taking up the
|
||||
first 16 bytes of the image.
|
||||
"""
|
||||
if not elf.ELF_TOOLS:
|
||||
|
@ -170,7 +171,8 @@ class TestElf(unittest.TestCase):
|
|||
entry = FakeEntry(28)
|
||||
section = FakeSection(sym_value=None)
|
||||
elf_fname = self.ElfTestFile('u_boot_binman_syms')
|
||||
elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
||||
count = elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
||||
self.assertEqual(5, count)
|
||||
expected = (struct.pack('<L', elf.BINMAN_SYM_MAGIC_VALUE) +
|
||||
tools.get_bytes(255, 20) +
|
||||
tools.get_bytes(ord('a'), 4))
|
||||
|
|
Loading…
Reference in a new issue