Implement initjmp() for use with the incoming bthread support. Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- arch/arm/Kconfig | 1 + arch/arm/include/asm/setjmp.h | 2 ++ arch/arm/lib32/setjmp.S | 8 ++++++++ arch/arm/lib64/setjmp.S | 9 +++++++++ 4 files changed, 20 insertions(+) diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index ab0bf030131c..cdb934136e34 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -5,6 +5,7 @@ config ARM select HAVE_CONFIGURABLE_TEXT_BASE if !RELOCATABLE select HAVE_IMAGE_COMPRESSION select HAVE_ARCH_KASAN + select HAS_ARCH_SJLJ select ARM_OPTIMZED_STRING_FUNCTIONS if KASAN default y diff --git a/arch/arm/include/asm/setjmp.h b/arch/arm/include/asm/setjmp.h index 538d9cd50651..4877e4312411 100644 --- a/arch/arm/include/asm/setjmp.h +++ b/arch/arm/include/asm/setjmp.h @@ -26,4 +26,6 @@ typedef struct jmp_buf_data jmp_buf[1]; int setjmp(jmp_buf jmp) __attribute__((returns_twice)); void longjmp(jmp_buf jmp, int ret) __attribute__((noreturn)); +int initjmp(jmp_buf jmp, void __noreturn (*func)(void), void *stack_top); + #endif /* _SETJMP_H_ */ diff --git a/arch/arm/lib32/setjmp.S b/arch/arm/lib32/setjmp.S index f0606a7f6659..626d915da183 100644 --- a/arch/arm/lib32/setjmp.S +++ b/arch/arm/lib32/setjmp.S @@ -33,4 +33,12 @@ ENTRY(longjmp) 1: bx lr ENDPROC(longjmp) + +.pushsection .text.initjmp, "ax" +ENTRY(initjmp) + str a3, [a1, #32] /* stack pointer */ + str a2, [a1, #36] /* return address */ + mov a1, #0 + bx lr +ENDPROC(initjmp) .popsection diff --git a/arch/arm/lib64/setjmp.S b/arch/arm/lib64/setjmp.S index 0910e2f5a6c3..80be8cb0f201 100644 --- a/arch/arm/lib64/setjmp.S +++ b/arch/arm/lib64/setjmp.S @@ -36,3 +36,12 @@ ENTRY(longjmp) ret ENDPROC(longjmp) .popsection + +.pushsection .text.initjmp, "ax" +ENTRY(initjmp) + str x2, [x0, #96] /* stack pointer */ + str x1, [x0, #88] /* return address */ + mov x0, #0 + ret +ENDPROC(initjmp) +.popsection -- 2.29.2 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox