ARM: Fix up setjmp/longjmp changes sfi_* macro use.

This commit is contained in:
Roland McGrath 2014-03-11 10:59:01 -07:00
parent 4facea4730
commit d7706c3258
3 changed files with 25 additions and 9 deletions

View File

@ -1,3 +1,10 @@
2014-03-11 Roland McGrath <roland@hack.frob.com>
* sysdeps/arm/setjmp.S: Use sfi_breg on stores of mangled registers.
* sysdeps/arm/__longjmp.S: Use sfi_breg on loads of mangled registers.
Move sfi_sp use from the load-multiple (that no longer sets sp) to
the new mov targetting sp.
2014-03-11 Adhemerval Zanella <azanella@linux.vnet.ibm.com> 2014-03-11 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
[BZ #16683] [BZ #16683]

View File

@ -38,22 +38,27 @@ ENTRY (__longjmp)
#endif #endif
#ifdef PTR_DEMANGLE #ifdef PTR_DEMANGLE
ldr a4, [ip], #4 sfi_breg ip, \
ldr a4, [\B], #4
PTR_DEMANGLE (a4, a4, a3, r4) PTR_DEMANGLE (a4, a4, a3, r4)
cfi_undefined (r4) cfi_undefined (r4)
ldr r4, [ip], #4 sfi_breg ip, \
ldr r4, [\B], #4
PTR_DEMANGLE2 (r4, r4, a3) PTR_DEMANGLE2 (r4, r4, a3)
#else #else
ldr a4, [ip], #4 sfi_breg ip, \
ldr r4, [ip], #4 ldr a4, [\B], #4
sfi_breg ip, \
ldr r4, [\B], #4
cfi_undefined (r4) cfi_undefined (r4)
#endif #endif
/* longjmp probe expects longjmp first argument (4@r0), second /* longjmp probe expects longjmp first argument (4@r0), second
argument (-4@r1), and target address (4@r4), respectively. */ argument (-4@r1), and target address (4@r4), respectively. */
LIBC_PROBE (longjmp, 3, 4@r0, -4@r1, 4@r4) LIBC_PROBE (longjmp, 3, 4@r0, -4@r1, 4@r4)
sfi_sp \
mov sp, a4 mov sp, a4
mov lr, r4 mov lr, r4
sfi_sp sfi_breg ip, \ sfi_breg ip, \
ldmia \B!, JMP_BUF_REGLIST ldmia \B!, JMP_BUF_REGLIST
cfi_restore (v1) cfi_restore (v1)
cfi_restore (v2) cfi_restore (v2)

View File

@ -36,12 +36,16 @@ ENTRY (__sigsetjmp)
#ifdef PTR_MANGLE #ifdef PTR_MANGLE
mov a4, sp mov a4, sp
PTR_MANGLE2 (a4, a4, a3) PTR_MANGLE2 (a4, a4, a3)
str a4, [ip], #4 sfi_breg ip, \
str a4, [\B], #4
PTR_MANGLE2 (a4, lr, a3) PTR_MANGLE2 (a4, lr, a3)
str a4, [ip], #4 sfi_breg ip, \
str a4, [\B], #4
#else #else
str sp, [ip], #4 sfi_breg ip, \
str lr, [ip], #4 str sp, [\B], #4
sfi_breg ip, \
str lr, [\B], #4
#endif #endif
/* Save registers */ /* Save registers */
sfi_breg ip, \ sfi_breg ip, \