Binman looks for __image_copy_start to determine the base address of an
entry if elf-base-sym isn't specified, which is missing in RISC-V port.
This causes binman skips RISC-V SPL entries without filling addresses
into its .binman_sym_table section.

This patch defines __image_copy_start in linkerscript of both SPL and
proper U-Boot to ensure binman_sym functions correctly with the default
binman.dtsi. The paired symbol, __image_copy_end, is introduced as well
for completeness.

Signed-off-by: Yao Zi <zi...@disroot.org>
Reviewed-by: Simon Glass <s...@chromium.org>
---
 arch/riscv/cpu/u-boot-spl.lds | 2 ++
 arch/riscv/cpu/u-boot.lds     | 3 +++
 2 files changed, 5 insertions(+)

diff --git a/arch/riscv/cpu/u-boot-spl.lds b/arch/riscv/cpu/u-boot-spl.lds
index 907094620bd..0717833df55 100644
--- a/arch/riscv/cpu/u-boot-spl.lds
+++ b/arch/riscv/cpu/u-boot-spl.lds
@@ -16,6 +16,7 @@ ENTRY(_start)
 SECTIONS
 {
        . = ALIGN(4);
+       __image_copy_start = ADDR(.text);
        .text : {
                arch/riscv/cpu/start.o  (.text)
                *(.text*)
@@ -46,6 +47,7 @@ SECTIONS
 
        _end = .;
        _image_binary_end = .;
+       __image_copy_end = .;
 
        .bss : {
                __bss_start = .;
diff --git a/arch/riscv/cpu/u-boot.lds b/arch/riscv/cpu/u-boot.lds
index 2ffe6ba3c8f..b11ea8b56d2 100644
--- a/arch/riscv/cpu/u-boot.lds
+++ b/arch/riscv/cpu/u-boot.lds
@@ -10,6 +10,7 @@ ENTRY(_start)
 SECTIONS
 {
        . = ALIGN(4);
+       __image_copy_start = ADDR(.text);
        .text : {
                arch/riscv/cpu/start.o  (.text)
        }
@@ -57,6 +58,8 @@ SECTIONS
                __efi_runtime_rel_stop = .;
        }
 
+       __image_copy_end = .;
+
        /DISCARD/ : { *(.rela.plt*) }
        .rela.dyn : {
                __rel_dyn_start = .;
-- 
2.49.0

Reply via email to