diff --git a/newlib/ChangeLog b/newlib/ChangeLog index 01f0107ab..e7b3680d1 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,8 @@ +2009-05-13 Paul Brook + + * libc/machine/arm/setjmp.S: Don't bother saving IP. Copy SP to + IP before saving. Likewise when restoring. + 2009-05-13 Paul Brook * libc/machine/arm/setjmp.S: Add ARMv6-M implementation. diff --git a/newlib/libc/machine/arm/setjmp.S b/newlib/libc/machine/arm/setjmp.S index 2181a1874..a65fbabb9 100644 --- a/newlib/libc/machine/arm/setjmp.S +++ b/newlib/libc/machine/arm/setjmp.S @@ -170,8 +170,8 @@ SYM (\name): /* Save all the callee-preserved registers into the jump buffer. */ #ifdef __thumb2__ + mov ip, sp stmea a1!, { v1-v7, fp, ip, lr } - str sp, [a1],#+4 #else stmea a1!, { v1-v7, fp, ip, sp, lr } #endif @@ -198,7 +198,7 @@ SYM (\name): /* Restore the registers, retrieving the state when setjmp() was called. */ #ifdef __thumb2__ ldmfd a1!, { v1-v7, fp, ip, lr } - ldr sp, [a1],#+4 + mov sp, ip #else ldmfd a1!, { v1-v7, fp, ip, sp, lr } #endif