From 420d6ddd5bbabbcffb02ba6ce35403d61d78567f Mon Sep 17 00:00:00 2001 From: Ryosei Takagi Date: Fri, 1 Apr 2011 16:44:42 +0000 Subject: [PATCH] Save and restore r7 and adjust stack on failure for ARM EABI ____longjmp_chk. --- ChangeLog.arm | 5 +++++ sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S | 13 ++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ChangeLog.arm b/ChangeLog.arm index 60f2c0b..e655775 100644 --- a/ChangeLog.arm +++ b/ChangeLog.arm @@ -1,3 +1,8 @@ +2011-04-01 Ryosei Takagi + + * sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S: + Save and restore r7, and also adjust sp. + 2011-04-01 Joseph Myers * sysdeps/unix/sysv/linux/arm/bits/fcntl.h (O_PATH): Define. diff --git a/sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S b/sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S index 508b4ba..9d8e464 100644 --- a/sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S +++ b/sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S @@ -52,13 +52,15 @@ longjmp_msg: cfi_remember_state; \ cmp sp, reg; \ bls .Lok; \ + str r7, [sp, #-4]!; \ + cfi_adjust_cfa_offset (4); \ + cfi_rel_offset (r7, 0); \ mov r5, r0; \ cfi_undefined (r5); \ mov r7, #SYS_ify(sigaltstack); \ - cfi_undefined (r7); \ mov r0, #0; \ - sub sp, sp, #16; /* >= sizeof (stack_t) */ \ - cfi_adjust_cfa_offset (16); \ + sub sp, sp, #12; /* == sizeof (stack_t) */ \ + cfi_adjust_cfa_offset (12); \ cfi_remember_state; \ mov r1, sp; \ swi #0; \ @@ -74,6 +76,11 @@ longjmp_msg: cmp r2, r3; \ bhi .Lok2; \ .Lfail: \ + add sp, sp, #12; \ + cfi_adjust_cfa_offset (-12); \ + ldr r7, [sp], #4; \ + cfi_adjust_cfa_offset (-4); \ + cfi_restore (r7); \ CALL_FAIL \ cfi_restore_state; \ .Lok2: \ -- 2.7.4