From 3fbba5568ca9ccd59a6bc824dc2dd9e6eac2b504 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Thu, 20 Oct 2022 18:22:46 -0600 Subject: [PATCH] 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 --- tools/binman/entry.py | 13 +++++++++++-- tools/binman/etype/blob.py | 5 +++-- tools/binman/etype/u_boot_spl.py | 7 ++----- tools/binman/etype/u_boot_spl_nodtb.py | 6 +----- tools/binman/etype/u_boot_tpl.py | 6 +----- tools/binman/etype/u_boot_tpl_nodtb.py | 6 +----- tools/binman/etype/u_boot_vpl.py | 6 +----- tools/binman/etype/u_boot_vpl_nodtb.py | 6 +----- 8 files changed, 21 insertions(+), 34 deletions(-) diff --git a/tools/binman/entry.py b/tools/binman/entry.py index 63ec5cea3b..bdf53ddd92 100644 --- a/tools/binman/entry.py +++ b/tools/binman/entry.py @@ -12,6 +12,7 @@ import sys import time from binman import bintool +from binman import elf from dtoc import fdt_util from patman import tools 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 required_props (dict of str): Properties which must be present. This can 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 - 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 global state from binman import state @@ -125,6 +131,8 @@ class Entry(object): self.fake_fname = None self.required_props = [] self.comp_bintool = None + self.elf_fname = None + self.auto_write_symbols = auto_write_symbols @staticmethod def FindEntryClass(etype, expanded): @@ -647,7 +655,8 @@ class Entry(object): Args: section: Section containing the entry """ - pass + if self.auto_write_symbols: + elf.LookupAndWriteSymbols(self.elf_fname, self, section.GetImage()) def CheckEntries(self): """Check that the entry offsets are correct diff --git a/tools/binman/etype/blob.py b/tools/binman/etype/blob.py index ceaefb07b7..a50a806890 100644 --- a/tools/binman/etype/blob.py +++ b/tools/binman/etype/blob.py @@ -31,8 +31,9 @@ class Entry_blob(Entry): the node (if enabled with -u) which provides the uncompressed size of the data. """ - def __init__(self, section, etype, node): - super().__init__(section, etype, node) + def __init__(self, section, etype, node, auto_write_symbols=False): + super().__init__(section, etype, node, + auto_write_symbols=auto_write_symbols) self._filename = fdt_util.GetString(self._node, 'filename', self.etype) def ObtainContents(self, fake_size=0): diff --git a/tools/binman/etype/u_boot_spl.py b/tools/binman/etype/u_boot_spl.py index 6f79bf59f9..d1aa3b4fda 100644 --- a/tools/binman/etype/u_boot_spl.py +++ b/tools/binman/etype/u_boot_spl.py @@ -5,7 +5,6 @@ # Entry-type module for spl/u-boot-spl.bin # -from binman import elf from binman.entry import Entry 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. """ 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.auto_write_symbols = True def GetDefaultFilename(self): return 'spl/u-boot-spl.bin' - - def WriteSymbols(self, section): - elf.LookupAndWriteSymbols(self.elf_fname, self, section.GetImage()) diff --git a/tools/binman/etype/u_boot_spl_nodtb.py b/tools/binman/etype/u_boot_spl_nodtb.py index 316b38172e..50a126dc7e 100644 --- a/tools/binman/etype/u_boot_spl_nodtb.py +++ b/tools/binman/etype/u_boot_spl_nodtb.py @@ -5,7 +5,6 @@ # Entry-type module for 'u-boot-spl-nodtb.bin' # -from binman import elf from binman.entry import Entry 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. """ 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' def GetDefaultFilename(self): return 'spl/u-boot-spl-nodtb.bin' - - def WriteSymbols(self, section): - elf.LookupAndWriteSymbols(self.elf_fname, self, section.GetImage()) diff --git a/tools/binman/etype/u_boot_tpl.py b/tools/binman/etype/u_boot_tpl.py index 0c575df8cd..1883a2bd5f 100644 --- a/tools/binman/etype/u_boot_tpl.py +++ b/tools/binman/etype/u_boot_tpl.py @@ -5,7 +5,6 @@ # Entry-type module for tpl/u-boot-tpl.bin # -from binman import elf from binman.entry import Entry 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. """ 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' def GetDefaultFilename(self): return 'tpl/u-boot-tpl.bin' - - def WriteSymbols(self, section): - elf.LookupAndWriteSymbols(self.elf_fname, self, section.GetImage()) diff --git a/tools/binman/etype/u_boot_tpl_nodtb.py b/tools/binman/etype/u_boot_tpl_nodtb.py index 98f3853f45..7e08e58f1e 100644 --- a/tools/binman/etype/u_boot_tpl_nodtb.py +++ b/tools/binman/etype/u_boot_tpl_nodtb.py @@ -5,7 +5,6 @@ # Entry-type module for 'u-boot-tpl-nodtb.bin' # -from binman import elf from binman.entry import Entry 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. """ 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' def GetDefaultFilename(self): return 'tpl/u-boot-tpl-nodtb.bin' - - def WriteSymbols(self, section): - elf.LookupAndWriteSymbols(self.elf_fname, self, section.GetImage()) diff --git a/tools/binman/etype/u_boot_vpl.py b/tools/binman/etype/u_boot_vpl.py index 9daaca4f6f..62e5969c6e 100644 --- a/tools/binman/etype/u_boot_vpl.py +++ b/tools/binman/etype/u_boot_vpl.py @@ -5,7 +5,6 @@ # Entry-type module for vpl/u-boot-vpl.bin # -from binman import elf from binman.entry import Entry 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. """ 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' def GetDefaultFilename(self): return 'vpl/u-boot-vpl.bin' - - def WriteSymbols(self, section): - elf.LookupAndWriteSymbols(self.elf_fname, self, section.GetImage()) diff --git a/tools/binman/etype/u_boot_vpl_nodtb.py b/tools/binman/etype/u_boot_vpl_nodtb.py index 25c966cf34..db3d8a91c9 100644 --- a/tools/binman/etype/u_boot_vpl_nodtb.py +++ b/tools/binman/etype/u_boot_vpl_nodtb.py @@ -5,7 +5,6 @@ # Entry-type module for 'u-boot-vpl-nodtb.bin' # -from binman import elf from binman.entry import Entry 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. """ 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' def GetDefaultFilename(self): return 'vpl/u-boot-vpl-nodtb.bin' - - def WriteSymbols(self, section): - elf.LookupAndWriteSymbols(self.elf_fname, self, section.GetImage()) -- 2.39.5