[RFC PATCH 03/17] RISC-V: implement relocate_to_adr_full()
Ahmad Fatoum
a.fatoum at barebox.org
Tue Oct 27 00:24:36 PDT 2026
In preparation for the new common PBL entry code that will make
use of relocate_to_adr_full(), implement it for RISC-V as on ARM.
Unlike relocate_to_adr(), which stops copying at __bss_start, the _full
variant copies up to __image_end, so barebox proper can still be
decompressed after the move.
Assisted-by: Claude:opus-5
Signed-off-by: Ahmad Fatoum <a.fatoum at barebox.org>
---
arch/riscv/include/asm/reloc.h | 1 +
arch/riscv/lib/setupc.S | 16 ++++++++++++----
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/arch/riscv/include/asm/reloc.h b/arch/riscv/include/asm/reloc.h
index 9a59326cad27..6b921ff702d7 100644
--- a/arch/riscv/include/asm/reloc.h
+++ b/arch/riscv/include/asm/reloc.h
@@ -7,6 +7,7 @@ unsigned long get_runtime_offset(void);
void relocate_to_current_adr(void);
void relocate_to_adr(unsigned long target);
+void relocate_to_adr_full(unsigned long target);
void setup_c(void);
diff --git a/arch/riscv/lib/setupc.S b/arch/riscv/lib/setupc.S
index 938c78350c7c..68924f2f94df 100644
--- a/arch/riscv/lib/setupc.S
+++ b/arch/riscv/lib/setupc.S
@@ -39,13 +39,22 @@ bss_cleared:
/*
* void relocate_to_adr(unsigned long targetadr)
+ * void relocate_to_adr_full(unsigned long targetadr)
*
* Copy binary to targetadr, relocate code and continue
- * executing at new address.
+ * executing at new address. The _full variant takes the piggy data
+ * along, so barebox proper can still be decompressed afterwards.
*/
.section .text.relocate_to_adr
-ENTRY(relocate_to_adr)
/* a0: target address */
+ENTRY(relocate_to_adr_full)
+ lla a3, __image_end /* include piggy data */
+ j 1f
+ENDPROC(relocate_to_adr_full)
+
+ENTRY(relocate_to_adr)
+ lla a3, __bss_start /* skip piggy data */
+1:
addi sp, sp, -SZREG * 2
lla a1, _text /* a1: source address */
@@ -61,8 +70,7 @@ ENTRY(relocate_to_adr)
add a2, a2, a0
REG_S a2, (sp)
- lla a2, __bss_start
- sub a2, a2, a1 /* a2: size */
+ sub a2, a3, a1 /* a2: size */
jal __memcpy
--
2.47.3
More information about the barebox
mailing list