mirror of git://sourceware.org/git/glibc.git
arm: Unless arm4t, pop return address directly into pc
This commit is contained in:
parent
46dede0c00
commit
d137b6dc52
|
@ -1,5 +1,9 @@
|
||||||
2013-03-06 Richard Henderson <rth@redhat.com>
|
2013-03-06 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/arm/arm-mcount.S (_mcount): Use pop into pc unless
|
||||||
|
__ARM_ARCH_4T__ and __THUMB_INTERWORK__.
|
||||||
|
* sysdeps/arm/dl-tlsdesc.S (_dl_tlsdesc_dynamic): Likewise.
|
||||||
|
|
||||||
* sysdeps/arm/sysdep.h (BX, BXC, BLX): New macros.
|
* sysdeps/arm/sysdep.h (BX, BXC, BLX): New macros.
|
||||||
(DO_RET): Use BX.
|
(DO_RET): Use BX.
|
||||||
(RETINSTR): Use BXC.
|
(RETINSTR): Use BXC.
|
||||||
|
|
|
@ -82,9 +82,7 @@ ENTRY(_mcount)
|
||||||
ldrne r0, [r0, #-4]
|
ldrne r0, [r0, #-4]
|
||||||
movsne r1, lr
|
movsne r1, lr
|
||||||
blne __mcount_internal
|
blne __mcount_internal
|
||||||
#ifdef __thumb2__
|
#if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__)
|
||||||
pop {r0, r1, r2, r3, fp, pc}
|
|
||||||
#else
|
|
||||||
pop {r0, r1, r2, r3, fp, lr}
|
pop {r0, r1, r2, r3, fp, lr}
|
||||||
cfi_adjust_cfa_offset (-24)
|
cfi_adjust_cfa_offset (-24)
|
||||||
cfi_restore (r0)
|
cfi_restore (r0)
|
||||||
|
@ -94,6 +92,8 @@ ENTRY(_mcount)
|
||||||
cfi_restore (fp)
|
cfi_restore (fp)
|
||||||
cfi_restore (lr)
|
cfi_restore (lr)
|
||||||
bx lr
|
bx lr
|
||||||
|
#else
|
||||||
|
pop {r0, r1, r2, r3, fp, pc}
|
||||||
#endif
|
#endif
|
||||||
END(_mcount)
|
END(_mcount)
|
||||||
|
|
||||||
|
|
|
@ -109,13 +109,18 @@ _dl_tlsdesc_dynamic:
|
||||||
1: mov r0, r1
|
1: mov r0, r1
|
||||||
bl __tls_get_addr
|
bl __tls_get_addr
|
||||||
rsb r0, r4, r0
|
rsb r0, r4, r0
|
||||||
2: pop {r2,r3,r4, lr}
|
2:
|
||||||
|
#if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__)
|
||||||
|
pop {r2,r3,r4, lr}
|
||||||
cfi_adjust_cfa_offset (-16)
|
cfi_adjust_cfa_offset (-16)
|
||||||
cfi_restore (lr)
|
cfi_restore (lr)
|
||||||
cfi_restore (r4)
|
cfi_restore (r4)
|
||||||
cfi_restore (r3)
|
cfi_restore (r3)
|
||||||
cfi_restore (r2)
|
cfi_restore (r2)
|
||||||
BX (lr)
|
bx lr
|
||||||
|
#else
|
||||||
|
pop {r2,r3,r4, pc}
|
||||||
|
#endif
|
||||||
.fnend
|
.fnend
|
||||||
cfi_endproc
|
cfi_endproc
|
||||||
.size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic
|
.size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic
|
||||||
|
|
Loading…
Reference in New Issue