[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