]> sourceware.org Git - glibc.git/commitdiff
Save and restore r7 and adjust stack on failure for ARM EABI ____longjmp_chk.
authorRyosei Takagi <ryosei@sm.sony.co.jp>
Fri, 1 Apr 2011 16:44:42 +0000 (16:44 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Fri, 1 Apr 2011 16:44:42 +0000 (16:44 +0000)
ChangeLog.arm
sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S

index 60f2c0b64516cea7a483e3971575b7f35c660c7a..e655775e5e961b8552ee6feae6856c406886f1c6 100644 (file)
@@ -1,3 +1,8 @@
+2011-04-01  Ryosei Takagi  <ryosei@sm.sony.co.jp>
+
+       * sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S:
+       Save and restore r7, and also adjust sp.
+
 2011-04-01  Joseph Myers  <joseph@codesourcery.com>
 
        * sysdeps/unix/sysv/linux/arm/bits/fcntl.h (O_PATH): Define.
index 508b4babd766cc192be2fc970a17b938b8ac6371..9d8e4645832ffdfb36f2b8a404b819602ce0f2a9 100644 (file)
@@ -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:                                         \
This page took 0.0522550000000001 seconds and 5 git commands to generate.