arm: Unless arm4t, pop return address directly into pc

This commit is contained in:
Richard Henderson 2013-02-14 22:15:55 -08:00
parent 46dede0c00
commit d137b6dc52
3 changed files with 14 additions and 5 deletions

View File

@ -1,5 +1,9 @@
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.
(DO_RET): Use BX.
(RETINSTR): Use BXC.

View File

@ -82,9 +82,7 @@ ENTRY(_mcount)
ldrne r0, [r0, #-4]
movsne r1, lr
blne __mcount_internal
#ifdef __thumb2__
pop {r0, r1, r2, r3, fp, pc}
#else
#if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__)
pop {r0, r1, r2, r3, fp, lr}
cfi_adjust_cfa_offset (-24)
cfi_restore (r0)
@ -94,6 +92,8 @@ ENTRY(_mcount)
cfi_restore (fp)
cfi_restore (lr)
bx lr
#else
pop {r0, r1, r2, r3, fp, pc}
#endif
END(_mcount)

View File

@ -109,13 +109,18 @@ _dl_tlsdesc_dynamic:
1: mov r0, r1
bl __tls_get_addr
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_restore (lr)
cfi_restore (r4)
cfi_restore (r3)
cfi_restore (r2)
BX (lr)
bx lr
#else
pop {r2,r3,r4, pc}
#endif
.fnend
cfi_endproc
.size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic