[PATCH] amend! ARM/ARM64/RISC-V: pbl: add constructor support
Stefan Kerkmann <[email protected]>
| Newsgroups | org.infradead.lists.barebox |
|---|---|
| Message-ID | <[email protected]> |
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 <[email protected]> --- 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