binman: Unwind the end-at-4gb special-case a little

Move the check for this further out, so that base_addr is computed in
Entry.WriteSymbols() rather than at lower levels.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2024-08-26 13:11:41 -06:00
parent bce055338e
commit b73d0bb584
3 changed files with 18 additions and 18 deletions

View file

@ -711,15 +711,22 @@ class Entry(object):
def WriteSymbols(self, section): def WriteSymbols(self, section):
"""Write symbol values into binary files for access at run time """Write symbol values into binary files for access at run time
As a special case, if symbols_base is not specified and this is an
end-at-4gb image, a symbols_base of 0 is used
Args: Args:
section: Section containing the entry section: Section containing the entry
""" """
if self.auto_write_symbols and not self.no_write_symbols: if self.auto_write_symbols and not self.no_write_symbols:
# Check if we are writing symbols into an ELF file # Check if we are writing symbols into an ELF file
is_elf = self.GetDefaultFilename() == self.elf_fname is_elf = self.GetDefaultFilename() == self.elf_fname
symbols_base = self.symbols_base
if symbols_base is None and self.GetImage()._end_4gb:
symbols_base = 0
elf.LookupAndWriteSymbols(self.elf_fname, self, section.GetImage(), elf.LookupAndWriteSymbols(self.elf_fname, self, section.GetImage(),
is_elf, self.elf_base_sym, is_elf, self.elf_base_sym, symbols_base)
self.symbols_base)
def CheckEntries(self): def CheckEntries(self):
"""Check that the entry offsets are correct """Check that the entry offsets are correct

View file

@ -627,12 +627,10 @@ class Entry_section(Entry):
optional: True if the symbol is optional. If False this function optional: True if the symbol is optional. If False this function
will raise if the symbol is not found will raise if the symbol is not found
msg: Message to display if an error occurs msg: Message to display if an error occurs
base_addr: Base address of image. This is added to the returned base_addr (int): Base address of image. This is added to the
image_pos in most cases so that the returned position indicates returned value of image-pos so that the returned position
where the targetted entry/binary has actually been loaded. But indicates where the targeted entry/binary has actually been
if end-at-4gb is used, this is not done, since the binary is loaded
already assumed to be linked to the ROM position and using
execute-in-place (XIP).
Returns: Returns:
Value that should be assigned to that symbol, or None if it was Value that should be assigned to that symbol, or None if it was
@ -655,10 +653,7 @@ class Entry_section(Entry):
if prop_name == 'offset': if prop_name == 'offset':
return entry.offset return entry.offset
elif prop_name == 'image_pos': elif prop_name == 'image_pos':
value = entry.image_pos return base_addr + entry.image_pos
if not self.GetImage()._end_4gb:
value += base_addr
return value
if prop_name == 'size': if prop_name == 'size':
return entry.size return entry.size
else: else:

View file

@ -404,12 +404,10 @@ class Image(section.Entry_section):
optional: True if the symbol is optional. If False this function optional: True if the symbol is optional. If False this function
will raise if the symbol is not found will raise if the symbol is not found
msg: Message to display if an error occurs msg: Message to display if an error occurs
base_addr: Base address of image. This is added to the returned base_addr (int): Base address of image. This is added to the
image_pos in most cases so that the returned position indicates returned value of image-pos so that the returned position
where the targeted entry/binary has actually been loaded. But indicates where the targeted entry/binary has actually been
if end-at-4gb is used, this is not done, since the binary is loaded
already assumed to be linked to the ROM position and using
execute-in-place (XIP).
Returns: Returns:
Value that should be assigned to that symbol, or None if it was Value that should be assigned to that symbol, or None if it was