[uClibc]0.9.19: Memory fault with setjmp on arm7tdmi

Erik Andersen andersen at codepoet.org
Tue Mar 11 15:34:40 UTC 2003


On Tue Mar 11, 2003 at 01:50:50PM +0100, Markus Pietrek wrote:
> Hi folks,
> 
> just compiled uClibc-0.9.19 for an NetARM+50 (arm7tdmi)/uclinux-2.4.20 and 
> I'am impressed. All went smooth and the gcc wrapper makes life much easier 
> now :-)

cool

> The applications I tested so far work fine. But using setjmp() results in an 
> "Memory fault", even the uclibc-0.9.19 setjmp_test

I see you have both UCLIBC_HAS_FLOATS and UCLIBC_HAS_SOFT_FLOAT
enabled, and you have HAS_FPU disabled.  Hmm.  Lemme take a look
at the setjmp code for that case.

    <sound of Erik reading the arm *jmp code>

Yeah, that does look broken to me.  Could you try this patch and
let me know if it fixes the problem for you?


--- libc/sysdeps/linux/arm/setjmp.S	3 Mar 2003 00:05:15 -0000	1.9
+++ libc/sysdeps/linux/arm/setjmp.S	11 Mar 2003 15:32:31 -0000
@@ -29,14 +30,16 @@ __sigsetjmp:
 	/* Save registers */
 #if defined __UCLIBC_HAS_FLOATS__ && ! defined __UCLIBC_HAS_SOFT_FLOAT__
 	sfmea   f4, 4, [r0]!
-#else
-	add     r0, r0, #48		/* skip the FP registers */
-#endif
 	stmia   r0, {v1-v6, sl, fp, sp, lr}
 
 	/* Restore pointer to jmp_buf */
 	sub     r0, r0, #48
+#else
+	stmia	r0, {v1-v6, sl, fp, sp, lr}
+#endif
 
 	/* Make a tail call to __sigjmp_save; it takes the same args.  */
 	B	__sigjmp_save	(PLT)
-.size __sigsetjmp,.-__sigsetjmp;
+
+.size __sigsetjmp,.-__sigsetjmp
+
--- libc/sysdeps/linux/arm/__longjmp.S	23 Feb 2003 23:24:44 -0000	1.4
+++ libc/sysdeps/linux/arm/__longjmp.S	11 Mar 2003 15:13:26 -0000
@@ -26,17 +26,16 @@
 .globl __longjmp;
 .type __longjmp,%function
 .align 4;
+
 __longjmp:
 	mov	ip, r0		/* save jmp_buf pointer */
-	
 	movs	r0, r1		/* get the return value in place */
 	moveq	r0, #1		/* can't let setjmp() return zero! */
 
 #if defined __UCLIBC_HAS_FLOATS__ && ! defined __UCLIBC_HAS_SOFT_FLOAT__
 	lfmfd	f4, 4, [ip] !	/* load the floating point regs */
-#else
-	add		ip, ip, #48		/* skip the FP registers */
 #endif	
 
 	ldmia     ip ,  {v1-v6, sl, fp, sp, pc}
-.size __longjmp,.-__longjmp;
+
+.size __longjmp,.-__longjmp

 -Erik

--
Erik B. Andersen             http://codepoet-consulting.com/
--This message was written using 73% post-consumer electrons--



More information about the uClibc mailing list