diff options
Diffstat (limited to 'ports/sysdeps/arm/setjmp.S')
-rw-r--r-- | ports/sysdeps/arm/setjmp.S | 17 |
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 |