summaryrefslogtreecommitdiffstats
path: root/newlib
diff options
context:
space:
mode:
Diffstat (limited to 'newlib')
-rw-r--r--newlib/ChangeLog4
-rw-r--r--newlib/libc/machine/arm/setjmp.S10
2 files changed, 14 insertions, 0 deletions
diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index 8ce345e28..1dcaa51ef 100644
--- a/newlib/ChangeLog
+++ b/newlib/ChangeLog
@@ -1,3 +1,7 @@
+2008-04-25 Nick Clifton <nickc@redhat.com>
+
+ * libc/machine/arm/setjmp.S: Fix thumb2 support.
+
2008-04-24 Nick Clifton <nickc@redhat.com>
* libc/include/machine/ieeefp.h: Fix typo: _DOUBLE_IS_32_BITS
diff --git a/newlib/libc/machine/arm/setjmp.S b/newlib/libc/machine/arm/setjmp.S
index 84e7cd70b..4bb2a46a7 100644
--- a/newlib/libc/machine/arm/setjmp.S
+++ b/newlib/libc/machine/arm/setjmp.S
@@ -120,7 +120,12 @@ SYM (\name):
FUNC_START setjmp
/* Save all the callee-preserved registers into the jump buffer. */
+#ifdef __thumb2__
+ stmea a1!, { v1-v7, fp, ip, lr }
+ str sp, [a1],#+4
+#else
stmea a1!, { v1-v7, fp, ip, sp, lr }
+#endif
#if 0 /* Simulator does not cope with FP instructions yet. */
#ifndef __SOFTFP__
@@ -142,7 +147,12 @@ SYM (\name):
/* If we have stack extension code it ought to be handled here. */
/* Restore the registers, retrieving the state when setjmp() was called. */
+#ifdef __thumb2__
+ ldmfd a1!, { v1-v7, fp, ip, lr }
+ ldr sp, [a1],#+4
+#else
ldmfd a1!, { v1-v7, fp, ip, sp, lr }
+#endif
#if 0 /* Simulator does not cope with FP instructions yet. */
#ifndef __SOFTFP__