summaryrefslogtreecommitdiff
path: root/ports/sysdeps/arm/setjmp.S
diff options
context:
space:
mode:
Diffstat (limited to 'ports/sysdeps/arm/setjmp.S')
-rw-r--r--ports/sysdeps/arm/setjmp.S17
1 files changed, 15 insertions, 2 deletions
diff --git a/ports/sysdeps/arm/setjmp.S b/ports/sysdeps/arm/setjmp.S
index a6c161db54..fedd994313 100644
--- a/ports/sysdeps/arm/setjmp.S
+++ b/ports/sysdeps/arm/setjmp.S
@@ -16,19 +16,32 @@
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
-/* ??? Needs more rearrangement for the STM to handle thumb mode. */
-#define NO_THUMB
#include <sysdep.h>
#include <bits/setjmp.h>
#include <rtld-global-offsets.h>
#include <arm-features.h>
ENTRY (__sigsetjmp)
+#ifdef PTR_MANGLE
+ PTR_MANGLE (a4, fp, a3, ip)
+#else
+ mov a4, fp
+#endif
mov ip, r0
/* Save registers */
sfi_breg ip, \
stmia \B!, JMP_BUF_REGLIST
+#ifdef PTR_MANGLE
+ mov a4, sp
+ PTR_MANGLE2 (a4, a4, a3)
+ str a4, [ip], #4
+ PTR_MANGLE2 (a4, lr, a3)
+ str a4, [ip], #4
+#else
+ str sp, [ip], #4
+ str lr, [ip], #4
+#endif
#if !defined ARM_ASSUME_NO_IWMMXT || defined __SOFTFP__
# define NEED_HWCAP 1