]> sourceware.org Git - glibc.git/commitdiff
powerpc32: make PLT call in _mcount compatible with -msecure-plt (bug 20554)
authorAlan Modra <amodra@gmail.com>
Tue, 4 Oct 2016 17:59:38 +0000 (19:59 +0200)
committerAndreas Schwab <schwab@linux-m68k.org>
Sun, 9 Oct 2016 19:43:50 +0000 (21:43 +0200)
ChangeLog
sysdeps/powerpc/powerpc32/ppc-mcount.S

index cd17710e7c7a601a7feee82f8c0834762b0151ec..09e048541f0f9a2c1aee6c270730ae969538d679 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2016-10-09  Alan Modra  <amodra@gmail.com>
+           Andreas Schwab  <schwab@linux-m68k.org>
+
+       [BZ #20554]
+       * sysdeps/powerpc/powerpc32/ppc-mcount.S (_mcount)
+       [PIC && !SHARED]: Set up PIC register for PLT call.
+
 2016-10-07  Joseph Myers  <joseph@codesourcery.com>
 
        * math/math.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (iseqsig): Define
index 68df440cf3654dc3394850f968cc37689d4a3d0e..1d36b912434487b6739e696c08bbfaebee69b5dc 100644 (file)
 */
 
 ENTRY(_mcount)
+#if defined PIC && !defined SHARED
+# define CALLER_LR_OFFSET 68
+       stwu    r1,-64(r1)
+       cfi_adjust_cfa_offset (64)
+       stw     r30, 48(r1)
+       cfi_rel_offset (r30, 48)
+#else
+# define CALLER_LR_OFFSET 52
        stwu    r1,-48(r1)
        cfi_adjust_cfa_offset (48)
+#endif
 /* We need to save the parameter-passing registers.  */
        stw     r3, 12(r1)
        stw     r4, 16(r1)
        stw     r5, 20(r1)
        stw     r6, 24(r1)
        mflr    r4
-       lwz     r3, 52(r1)
+#if defined PIC && !defined SHARED
+       bcl     20,31,0f
+0:
+       mflr    r30
+       addis   r30, r30, _GLOBAL_OFFSET_TABLE_-0b@ha
+       addi    r30, r30, _GLOBAL_OFFSET_TABLE_-0b@l
+#endif
+       lwz     r3, CALLER_LR_OFFSET(r1)
        mfcr    r5
        stw     r7, 28(r1)
        stw     r8, 32(r1)
        stw     r9, 36(r1)
        stw     r10,40(r1)
        stw     r4, 44(r1)
-       cfi_offset (lr, -4)
+       cfi_rel_offset (lr, 44)
        stw     r5,  8(r1)
 #ifndef SHARED
        bl      JUMPTARGET(__mcount_internal)
@@ -71,13 +87,18 @@ ENTRY(_mcount)
        mtcrf   0xff,r6
        lwz     r5, 20(r1)
        lwz     r6, 24(r1)
-       lwz     r0, 52(r1)
+       lwz     r0, CALLER_LR_OFFSET(r1)
        lwz     r7, 28(r1)
        lwz     r8, 32(r1)
        mtlr    r0
        lwz     r9, 36(r1)
        lwz     r10,40(r1)
  /* ...unwind the stack frame, and return to your usual programming.  */
+#if defined PIC && !defined SHARED
+       lwz     r30, 48(r1)
+       addi    r1,r1,64
+#else
        addi    r1,r1,48
+#endif
        bctr
 END(_mcount)
This page took 0.173299 seconds and 5 git commands to generate.