]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
arm: Unless arm4t, pop return address directly into pc
authorRichard Henderson <rth@twiddle.net>
Fri, 15 Feb 2013 06:15:55 +0000 (22:15 -0800)
committerRichard Henderson <rth@twiddle.net>
Wed, 6 Mar 2013 15:46:47 +0000 (07:46 -0800)
ports/ChangeLog.arm
ports/sysdeps/arm/arm-mcount.S
ports/sysdeps/arm/dl-tlsdesc.S

index 7acde015683cb78eb9b4ce70ab224586d95e17ea..400a7db51701c747aa1a9527190ebb839b418534 100644 (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.
index b6e5ec78a169e62470264a94b009f2b6dc4ac383..8ad077925be151947392558c472c24212d802e16 100644 (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)
 
index 62a7e438c18f48f902c7c2e2e9ffe7ef711b3879..e810d0db3787eddb67130b1b681be1145e2f8504 100644 (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