[PATCH] amend! ARM/ARM64/RISC-V: pbl: add constructor support
Stefan Kerkmann
s.kerkmann at pengutronix.de
Tue Aug 18 05:08:19 PDT 2026
ARM/ARM64/RISC-V: pbl: add constructor support
This commit allows running functions marked with
__attribute__((constructor))[1] automatically after the C environment is
setup in setup_c, which most likely will be early setup code shared
across SoCs/Arches in the PBL.
The ARM64 setup_c function saved the link register (x30) in the caller
save register (x15). This is fragile as a constructor might use x15,
thus save it on the stack just like ARM32 and RISC-V.
[1]: https://gcc.gnu.org/onlinedocs/gcc-16.2.0/gcc/Common-Attributes.html#index-constructor
Signed-off-by: Stefan Kerkmann <s.kerkmann at pengutronix.de>
---
arch/arm/cpu/setupc_64.S | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/arch/arm/cpu/setupc_64.S b/arch/arm/cpu/setupc_64.S
index e3c6149e27..b1cfea47b1 100644
--- a/arch/arm/cpu/setupc_64.S
+++ b/arch/arm/cpu/setupc_64.S
@@ -10,10 +10,10 @@
* setup_c: clear bss if not yet done
*/
ENTRY(setup_c)
+ str x30, [sp, #-16]!
adr_l x0, bss_cleared
ldr w1, [x0]
cbnz w1, 1f /* skip if already done */
- mov x15, x30
adr_l x0, __bss_start
mov x1, #0
adr_l x2, __bss_stop
@@ -25,8 +25,9 @@ ENTRY(setup_c)
#ifdef __PBL__
bl pbl_do_ctors
#endif
- mov x30, x15
-1: ret
+1:
+ ldr x30, [sp], #16
+ ret
ENDPROC(setup_c)
.section .data.bss_cleared
--
2.47.3
More information about the barebox
mailing list