binman: Handle writing ELF symbols in the Entry class

This feature is used by several etypes and we plan to add more that use
it. Make symbol writing a feature of the base class to reduce the code
duplication.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2022-10-20 18:22:46 -06:00 committed by Tom Rini
parent 2b8b27fb8d
commit 3fbba5568c
8 changed files with 21 additions and 34 deletions

View File

@ -12,6 +12,7 @@ import sys
import time import time
from binman import bintool from binman import bintool
from binman import elf
from dtoc import fdt_util from dtoc import fdt_util
from patman import tools from patman import tools
from patman.tools import to_hex, to_hex_size from patman.tools import to_hex, to_hex_size
@ -86,10 +87,15 @@ class Entry(object):
fake_fname: Fake filename, if one was created, else None fake_fname: Fake filename, if one was created, else None
required_props (dict of str): Properties which must be present. This can required_props (dict of str): Properties which must be present. This can
be added to by subclasses be added to by subclasses
elf_fname (str): Filename of the ELF file, if this entry holds an ELF
file, or is a binary file produced from an ELF file
auto_write_symbols (bool): True to write ELF symbols into this entry's
contents
""" """
fake_dir = None fake_dir = None
def __init__(self, section, etype, node, name_prefix=''): def __init__(self, section, etype, node, name_prefix='',
auto_write_symbols=False):
# Put this here to allow entry-docs and help to work without libfdt # Put this here to allow entry-docs and help to work without libfdt
global state global state
from binman import state from binman import state
@ -125,6 +131,8 @@ class Entry(object):
self.fake_fname = None self.fake_fname = None
self.required_props = [] self.required_props = []
self.comp_bintool = None self.comp_bintool = None
self.elf_fname = None
self.auto_write_symbols = auto_write_symbols
@staticmethod @staticmethod
def FindEntryClass(etype, expanded): def FindEntryClass(etype, expanded):
@ -647,7 +655,8 @@ class Entry(object):
Args: Args:
section: Section containing the entry section: Section containing the entry
""" """
pass if self.auto_write_symbols:
elf.LookupAndWriteSymbols(self.elf_fname, self, section.GetImage())
def CheckEntries(self): def CheckEntries(self):
"""Check that the entry offsets are correct """Check that the entry offsets are correct

View File

@ -31,8 +31,9 @@ class Entry_blob(Entry):
the node (if enabled with -u) which provides the uncompressed size of the the node (if enabled with -u) which provides the uncompressed size of the
data. data.
""" """
def __init__(self, section, etype, node): def __init__(self, section, etype, node, auto_write_symbols=False):
super().__init__(section, etype, node) super().__init__(section, etype, node,
auto_write_symbols=auto_write_symbols)
self._filename = fdt_util.GetString(self._node, 'filename', self.etype) self._filename = fdt_util.GetString(self._node, 'filename', self.etype)
def ObtainContents(self, fake_size=0): def ObtainContents(self, fake_size=0):

View File

@ -5,7 +5,6 @@
# Entry-type module for spl/u-boot-spl.bin # Entry-type module for spl/u-boot-spl.bin
# #
from binman import elf
from binman.entry import Entry from binman.entry import Entry
from binman.etype.blob import Entry_blob from binman.etype.blob import Entry_blob
@ -35,11 +34,9 @@ class Entry_u_boot_spl(Entry_blob):
unless --no-expanded is used or the node has a 'no-expanded' property. unless --no-expanded is used or the node has a 'no-expanded' property.
""" """
def __init__(self, section, etype, node): def __init__(self, section, etype, node):
super().__init__(section, etype, node) super().__init__(section, etype, node, auto_write_symbols=True)
self.elf_fname = 'spl/u-boot-spl' self.elf_fname = 'spl/u-boot-spl'
self.auto_write_symbols = True
def GetDefaultFilename(self): def GetDefaultFilename(self):
return 'spl/u-boot-spl.bin' return 'spl/u-boot-spl.bin'
def WriteSymbols(self, section):
elf.LookupAndWriteSymbols(self.elf_fname, self, section.GetImage())

View File

@ -5,7 +5,6 @@
# Entry-type module for 'u-boot-spl-nodtb.bin' # Entry-type module for 'u-boot-spl-nodtb.bin'
# #
from binman import elf
from binman.entry import Entry from binman.entry import Entry
from binman.etype.blob import Entry_blob from binman.etype.blob import Entry_blob
@ -32,11 +31,8 @@ class Entry_u_boot_spl_nodtb(Entry_blob):
binman uses that to look up symbols to write into the SPL binary. binman uses that to look up symbols to write into the SPL binary.
""" """
def __init__(self, section, etype, node): def __init__(self, section, etype, node):
super().__init__(section, etype, node) super().__init__(section, etype, node, auto_write_symbols=True)
self.elf_fname = 'spl/u-boot-spl' self.elf_fname = 'spl/u-boot-spl'
def GetDefaultFilename(self): def GetDefaultFilename(self):
return 'spl/u-boot-spl-nodtb.bin' return 'spl/u-boot-spl-nodtb.bin'
def WriteSymbols(self, section):
elf.LookupAndWriteSymbols(self.elf_fname, self, section.GetImage())

View File

@ -5,7 +5,6 @@
# Entry-type module for tpl/u-boot-tpl.bin # Entry-type module for tpl/u-boot-tpl.bin
# #
from binman import elf
from binman.entry import Entry from binman.entry import Entry
from binman.etype.blob import Entry_blob from binman.etype.blob import Entry_blob
@ -35,11 +34,8 @@ class Entry_u_boot_tpl(Entry_blob):
unless --no-expanded is used or the node has a 'no-expanded' property. unless --no-expanded is used or the node has a 'no-expanded' property.
""" """
def __init__(self, section, etype, node): def __init__(self, section, etype, node):
super().__init__(section, etype, node) super().__init__(section, etype, node, auto_write_symbols=True)
self.elf_fname = 'tpl/u-boot-tpl' self.elf_fname = 'tpl/u-boot-tpl'
def GetDefaultFilename(self): def GetDefaultFilename(self):
return 'tpl/u-boot-tpl.bin' return 'tpl/u-boot-tpl.bin'
def WriteSymbols(self, section):
elf.LookupAndWriteSymbols(self.elf_fname, self, section.GetImage())

View File

@ -5,7 +5,6 @@
# Entry-type module for 'u-boot-tpl-nodtb.bin' # Entry-type module for 'u-boot-tpl-nodtb.bin'
# #
from binman import elf
from binman.entry import Entry from binman.entry import Entry
from binman.etype.blob import Entry_blob from binman.etype.blob import Entry_blob
@ -32,11 +31,8 @@ class Entry_u_boot_tpl_nodtb(Entry_blob):
binman uses that to look up symbols to write into the TPL binary. binman uses that to look up symbols to write into the TPL binary.
""" """
def __init__(self, section, etype, node): def __init__(self, section, etype, node):
super().__init__(section, etype, node) super().__init__(section, etype, node, auto_write_symbols=True)
self.elf_fname = 'tpl/u-boot-tpl' self.elf_fname = 'tpl/u-boot-tpl'
def GetDefaultFilename(self): def GetDefaultFilename(self):
return 'tpl/u-boot-tpl-nodtb.bin' return 'tpl/u-boot-tpl-nodtb.bin'
def WriteSymbols(self, section):
elf.LookupAndWriteSymbols(self.elf_fname, self, section.GetImage())

View File

@ -5,7 +5,6 @@
# Entry-type module for vpl/u-boot-vpl.bin # Entry-type module for vpl/u-boot-vpl.bin
# #
from binman import elf
from binman.entry import Entry from binman.entry import Entry
from binman.etype.blob import Entry_blob from binman.etype.blob import Entry_blob
@ -32,11 +31,8 @@ class Entry_u_boot_vpl(Entry_blob):
binman uses that to look up symbols to write into the VPL binary. binman uses that to look up symbols to write into the VPL binary.
""" """
def __init__(self, section, etype, node): def __init__(self, section, etype, node):
super().__init__(section, etype, node) super().__init__(section, etype, node, auto_write_symbols=True)
self.elf_fname = 'vpl/u-boot-vpl' self.elf_fname = 'vpl/u-boot-vpl'
def GetDefaultFilename(self): def GetDefaultFilename(self):
return 'vpl/u-boot-vpl.bin' return 'vpl/u-boot-vpl.bin'
def WriteSymbols(self, section):
elf.LookupAndWriteSymbols(self.elf_fname, self, section.GetImage())

View File

@ -5,7 +5,6 @@
# Entry-type module for 'u-boot-vpl-nodtb.bin' # Entry-type module for 'u-boot-vpl-nodtb.bin'
# #
from binman import elf
from binman.entry import Entry from binman.entry import Entry
from binman.etype.blob import Entry_blob from binman.etype.blob import Entry_blob
@ -32,11 +31,8 @@ class Entry_u_boot_vpl_nodtb(Entry_blob):
binman uses that to look up symbols to write into the VPL binary. binman uses that to look up symbols to write into the VPL binary.
""" """
def __init__(self, section, etype, node): def __init__(self, section, etype, node):
super().__init__(section, etype, node) super().__init__(section, etype, node, auto_write_symbols=True)
self.elf_fname = 'vpl/u-boot-vpl' self.elf_fname = 'vpl/u-boot-vpl'
def GetDefaultFilename(self): def GetDefaultFilename(self):
return 'vpl/u-boot-vpl-nodtb.bin' return 'vpl/u-boot-vpl-nodtb.bin'
def WriteSymbols(self, section):
elf.LookupAndWriteSymbols(self.elf_fname, self, section.GetImage())