diff --git a/headers/posix/arch/arm/arch_setjmp.h b/headers/posix/arch/arm/arch_setjmp.h index 2a86ea60ac..a2ce56e36b 100644 --- a/headers/posix/arch/arm/arch_setjmp.h +++ b/headers/posix/arch/arm/arch_setjmp.h @@ -5,8 +5,7 @@ #ifndef _ARCH_SETJMP_H_ #define _ARCH_SETJMP_H_ -#define _SETJMP_BUF_SZ (7+6+2+8*((96/8)/4)) +#define _SETJMP_BUF_SZ ((15+2)*4) typedef int __jmp_buf[_SETJMP_BUF_SZ]; -#warning ARM: fix jmpbuf size #endif /* _ARCH_SETJMP_H_ */ diff --git a/src/system/libroot/posix/arch/arm/sigsetjmp.S b/src/system/libroot/posix/arch/arm/sigsetjmp.S index 14bab2ef88..a0f59ad758 100644 --- a/src/system/libroot/posix/arch/arm/sigsetjmp.S +++ b/src/system/libroot/posix/arch/arm/sigsetjmp.S @@ -10,6 +10,7 @@ /* int sigsetjmp(jmp_buf buffer, int saveMask) */ FUNCTION(__sigsetjmp): FUNCTION(sigsetjmp): + stmdb sp!, {r4, lr} stmia r0, {r0-r14} str lr,[r0, #60] mrs r1,cpsr @@ -18,19 +19,21 @@ FUNCTION(sigsetjmp): mov r0, #0 bl __setjmp_save_sigs + ldmia sp!, {r4, pc} FUNCTION_END(__sigsetjmp) FUNCTION_END(sigsetjmp) /* int setjmp(jmp_buf buffer) */ FUNCTION(setjmp): + stmdb sp!, {r4, lr} stmia r0, {r0-r14} str lr,[r0, #60] mrs r1,cpsr str r1,[r0,#64] ldr r1,[r0,#4] mov r0, #0 - bl __sigsetjmp + ldmia sp!, {r4, pc} FUNCTION_END(setjmp) #pragma weak _setjmp=setjmp