mirror of
https://xff.cz/git/u-boot/
synced 2025-09-27 13:31:16 +02:00
binman: Use the Makefile for u_boot_binman_syms
Remove this file from git and instead build it using the Makefile. With this change a few things need to be adjusted: 1. The 'notes' section no-longer appears at the start of the ELF file (before the code), so update testSymbols to adjust the offsets. 2. The dynamic linker is disabled to avoid errors like: "Not enough room for program headers, try linking with -N" 3. The interpreter note is moved to the end of the image, so that the binman symbols appear first. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -70,7 +70,8 @@ def BuildElfTestFiles(target_dir):
|
|||||||
del os.environ['MAKEFLAGS']
|
del os.environ['MAKEFLAGS']
|
||||||
tools.Run('make', '-C', target_dir, '-f',
|
tools.Run('make', '-C', target_dir, '-f',
|
||||||
os.path.join(testdir, 'Makefile'), 'SRC=%s/' % testdir,
|
os.path.join(testdir, 'Makefile'), 'SRC=%s/' % testdir,
|
||||||
'bss_data', 'u_boot_ucode_ptr', 'u_boot_no_ucode_ptr')
|
'bss_data', 'u_boot_ucode_ptr', 'u_boot_no_ucode_ptr',
|
||||||
|
'u_boot_binman_syms', 'u_boot_binman_syms.bin')
|
||||||
|
|
||||||
|
|
||||||
class TestElf(unittest.TestCase):
|
class TestElf(unittest.TestCase):
|
||||||
@@ -118,7 +119,7 @@ class TestElf(unittest.TestCase):
|
|||||||
"""Test a symbol which extends outside the entry area is detected"""
|
"""Test a symbol which extends outside the entry area is detected"""
|
||||||
entry = FakeEntry(10)
|
entry = FakeEntry(10)
|
||||||
section = FakeSection()
|
section = FakeSection()
|
||||||
elf_fname = os.path.join(binman_dir, 'test', 'u_boot_binman_syms')
|
elf_fname = self.ElfTestFile('u_boot_binman_syms')
|
||||||
with self.assertRaises(ValueError) as e:
|
with self.assertRaises(ValueError) as e:
|
||||||
syms = elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
syms = elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
||||||
self.assertIn('entry_path has offset 4 (size 8) but the contents size '
|
self.assertIn('entry_path has offset 4 (size 8) but the contents size '
|
||||||
@@ -158,7 +159,7 @@ class TestElf(unittest.TestCase):
|
|||||||
"""
|
"""
|
||||||
entry = FakeEntry(20)
|
entry = FakeEntry(20)
|
||||||
section = FakeSection(sym_value=None)
|
section = FakeSection(sym_value=None)
|
||||||
elf_fname = os.path.join(binman_dir, 'test', 'u_boot_binman_syms')
|
elf_fname = self.ElfTestFile('u_boot_binman_syms')
|
||||||
syms = elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
syms = elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
||||||
self.assertEqual(tools.GetBytes(255, 16) + tools.GetBytes(ord('a'), 4),
|
self.assertEqual(tools.GetBytes(255, 16) + tools.GetBytes(ord('a'), 4),
|
||||||
entry.data)
|
entry.data)
|
||||||
@@ -169,7 +170,7 @@ class TestElf(unittest.TestCase):
|
|||||||
tout.Init(tout.DEBUG)
|
tout.Init(tout.DEBUG)
|
||||||
entry = FakeEntry(20)
|
entry = FakeEntry(20)
|
||||||
section = FakeSection()
|
section = FakeSection()
|
||||||
elf_fname = os.path.join(binman_dir, 'test', 'u_boot_binman_syms')
|
elf_fname = self.ElfTestFile('u_boot_binman_syms')
|
||||||
with test_util.capture_sys_output() as (stdout, stderr):
|
with test_util.capture_sys_output() as (stdout, stderr):
|
||||||
syms = elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
syms = elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
||||||
self.assertTrue(len(stdout.getvalue()) > 0)
|
self.assertTrue(len(stdout.getvalue()) > 0)
|
||||||
|
@@ -489,7 +489,8 @@ class TestFunctional(unittest.TestCase):
|
|||||||
Filename of ELF file to use as SPL
|
Filename of ELF file to use as SPL
|
||||||
"""
|
"""
|
||||||
# TODO(sjg@chromium.org): Drop this when all Elf files use ElfTestFile()
|
# TODO(sjg@chromium.org): Drop this when all Elf files use ElfTestFile()
|
||||||
if src_fname in ['bss_data', 'u_boot_ucode_ptr', 'u_boot_no_ucode_ptr']:
|
if src_fname in ['bss_data', 'u_boot_ucode_ptr', 'u_boot_no_ucode_ptr',
|
||||||
|
'u_boot_binman_syms']:
|
||||||
fname = cls.ElfTestFile(src_fname)
|
fname = cls.ElfTestFile(src_fname)
|
||||||
else:
|
else:
|
||||||
fname = cls.TestFile(src_fname)
|
fname = cls.TestFile(src_fname)
|
||||||
@@ -1223,14 +1224,14 @@ class TestFunctional(unittest.TestCase):
|
|||||||
|
|
||||||
def testSymbols(self):
|
def testSymbols(self):
|
||||||
"""Test binman can assign symbols embedded in U-Boot"""
|
"""Test binman can assign symbols embedded in U-Boot"""
|
||||||
elf_fname = self.TestFile('u_boot_binman_syms')
|
elf_fname = self.ElfTestFile('u_boot_binman_syms')
|
||||||
syms = elf.GetSymbols(elf_fname, ['binman', 'image'])
|
syms = elf.GetSymbols(elf_fname, ['binman', 'image'])
|
||||||
addr = elf.GetSymbolAddress(elf_fname, '__image_copy_start')
|
addr = elf.GetSymbolAddress(elf_fname, '__image_copy_start')
|
||||||
self.assertEqual(syms['_binman_u_boot_spl_prop_offset'].address, addr)
|
self.assertEqual(syms['_binman_u_boot_spl_prop_offset'].address, addr)
|
||||||
|
|
||||||
self._SetupSplElf('u_boot_binman_syms')
|
self._SetupSplElf('u_boot_binman_syms')
|
||||||
data = self._DoReadFile('053_symbols.dts')
|
data = self._DoReadFile('053_symbols.dts')
|
||||||
sym_values = struct.pack('<LQL', 0x24 + 0, 0x24 + 24, 0x24 + 20)
|
sym_values = struct.pack('<LQL', 0, 24, 20)
|
||||||
expected = (sym_values + U_BOOT_SPL_DATA[16:] +
|
expected = (sym_values + U_BOOT_SPL_DATA[16:] +
|
||||||
tools.GetBytes(0xff, 1) + U_BOOT_DATA + sym_values +
|
tools.GetBytes(0xff, 1) + U_BOOT_DATA + sym_values +
|
||||||
U_BOOT_SPL_DATA[16:])
|
U_BOOT_SPL_DATA[16:])
|
||||||
|
@@ -8,10 +8,11 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
VPATH := $(SRC)
|
VPATH := $(SRC)
|
||||||
CFLAGS := -march=i386 -m32 -nostdlib -I ../../../include
|
CFLAGS := -march=i386 -m32 -nostdlib -I $(SRC)../../../include \
|
||||||
|
-Wl,--no-dynamic-linker
|
||||||
|
|
||||||
LDS_UCODE := -T $(SRC)u_boot_ucode_ptr.lds
|
LDS_UCODE := -T $(SRC)u_boot_ucode_ptr.lds
|
||||||
LDS_BINMAN := -T u_boot_binman_syms.lds
|
LDS_BINMAN := -T $(SRC)u_boot_binman_syms.lds
|
||||||
LDS_BINMAN_BAD := -T u_boot_binman_syms_bad.lds
|
LDS_BINMAN_BAD := -T u_boot_binman_syms_bad.lds
|
||||||
|
|
||||||
TARGETS = u_boot_ucode_ptr u_boot_no_ucode_ptr bss_data \
|
TARGETS = u_boot_ucode_ptr u_boot_no_ucode_ptr bss_data \
|
||||||
|
Binary file not shown.
@@ -25,5 +25,6 @@ SECTIONS
|
|||||||
KEEP(*(SORT(.binman_sym*)));
|
KEEP(*(SORT(.binman_sym*)));
|
||||||
__binman_sym_end = .;
|
__binman_sym_end = .;
|
||||||
}
|
}
|
||||||
|
.interp : { *(.interp*) }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user