On 28.02.25 14:21, Jerome Forissier wrote:
On 2/28/25 14:05, Heinrich Schuchardt wrote:
On 25.02.25 17:34, Jerome Forissier wrote:
Implement initjmp() for Arm.
Signed-off-by: Jerome Forissier <jerome.foriss...@linaro.org>
---
arch/Kconfig | 1 +
arch/arm/include/asm/setjmp.h | 1 +
arch/arm/lib/setjmp.S | 11 +++++++++++
arch/arm/lib/setjmp_aarch64.S | 9 +++++++++
4 files changed, 22 insertions(+)
diff --git a/arch/Kconfig b/arch/Kconfig
index 8d5b54031b3..57695fada8d 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -94,6 +94,7 @@ config ARC
config ARM
bool "ARM architecture"
select HAVE_SETJMP
+ select HAVE_INITJMP
select ARCH_SUPPORTS_LTO
select CREATE_ARCH_SYMLINK
select HAVE_PRIVATE_LIBGCC if !ARM64
diff --git a/arch/arm/include/asm/setjmp.h b/arch/arm/include/asm/setjmp.h
index 662bec86321..1ad5b500f2a 100644
--- a/arch/arm/include/asm/setjmp.h
+++ b/arch/arm/include/asm/setjmp.h
@@ -23,5 +23,6 @@ typedef struct jmp_buf_data jmp_buf[1];
int setjmp(jmp_buf jmp);
void longjmp(jmp_buf jmp, int ret);
+int initjmp(jmp_buf jmp, void __noreturn (*func)(void), void *stack_top);
As this is not a standard function we cannot expect developers to know
what it does and how to use it.
Please, provide Sphinx style documentation with the necessary information.
I agree on principle, but if I add documentation here then I should add the
same for all architectures. That being said the prototypes are already
duplicated so maybe consolidation is a question for another time. I will
add Shpinx style doc to all 3 commits "{arm,riscv,sandbox}: add initjmp()".
Yes, this was not designed correctly:
We should move setjmp.h to include/asm-generic and include an
architecture specific setjmp_bits.h from there.
setjmp_bits.h would provide the struct jmp_buf_data definition.
As for usage, I think the best documentation is test/lib/initjmp.c added
by "test: lib: add initjmp() test".
Example code is valuable but does not replace documentation.
Best regards
Heinrich