From b73d0bb584e5f89c8d80c7435f1a6c036be25dd9 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Mon, 26 Aug 2024 13:11:41 -0600 Subject: [PATCH] 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 --- tools/binman/entry.py | 11 +++++++++-- tools/binman/etype/section.py | 15 +++++---------- tools/binman/image.py | 10 ++++------ 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/tools/binman/entry.py b/tools/binman/entry.py index 8ad9fe89e0..68f8d62bba 100644 --- a/tools/binman/entry.py +++ b/tools/binman/entry.py @@ -711,15 +711,22 @@ class Entry(object): def WriteSymbols(self, section): """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: section: Section containing the entry """ if self.auto_write_symbols and not self.no_write_symbols: # Check if we are writing symbols into an ELF file 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(), - is_elf, self.elf_base_sym, - self.symbols_base) + is_elf, self.elf_base_sym, symbols_base) def CheckEntries(self): """Check that the entry offsets are correct diff --git a/tools/binman/etype/section.py b/tools/binman/etype/section.py index 6c181531b8..7d2eb42627 100644 --- a/tools/binman/etype/section.py +++ b/tools/binman/etype/section.py @@ -627,12 +627,10 @@ class Entry_section(Entry): optional: True if the symbol is optional. If False this function will raise if the symbol is not found msg: Message to display if an error occurs - base_addr: Base address of image. This is added to the returned - image_pos in most cases so that the returned position indicates - where the targetted entry/binary has actually been loaded. But - if end-at-4gb is used, this is not done, since the binary is - already assumed to be linked to the ROM position and using - execute-in-place (XIP). + base_addr (int): Base address of image. This is added to the + returned value of image-pos so that the returned position + indicates where the targeted entry/binary has actually been + loaded Returns: 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': return entry.offset elif prop_name == 'image_pos': - value = entry.image_pos - if not self.GetImage()._end_4gb: - value += base_addr - return value + return base_addr + entry.image_pos if prop_name == 'size': return entry.size else: diff --git a/tools/binman/image.py b/tools/binman/image.py index c667f583db..24ce0af7c7 100644 --- a/tools/binman/image.py +++ b/tools/binman/image.py @@ -404,12 +404,10 @@ class Image(section.Entry_section): optional: True if the symbol is optional. If False this function will raise if the symbol is not found msg: Message to display if an error occurs - base_addr: Base address of image. This is added to the returned - image_pos in most cases so that the returned position indicates - where the targeted entry/binary has actually been loaded. But - if end-at-4gb is used, this is not done, since the binary is - already assumed to be linked to the ROM position and using - execute-in-place (XIP). + base_addr (int): Base address of image. This is added to the + returned value of image-pos so that the returned position + indicates where the targeted entry/binary has actually been + loaded Returns: Value that should be assigned to that symbol, or None if it was -- 2.39.5