mirror of
https://github.com/smaeul/u-boot.git
synced 2025-10-14 04:46:01 +01:00
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:
parent
2b8b27fb8d
commit
3fbba5568c
@ -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
|
||||||
|
@ -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):
|
||||||
|
@ -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())
|
|
||||||
|
@ -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())
|
|
||||||
|
@ -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())
|
|
||||||
|
@ -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())
|
|
||||||
|
@ -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())
|
|
||||||
|
@ -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())
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user