powerpc32: make PLT call in _mcount compatible with -msecure-plt (bug 20554)

This commit is contained in:
Alan Modra 2016-10-04 19:59:38 +02:00 committed by Andreas Schwab
parent d0800ae0e7
commit 3f413ec8d1
2 changed files with 31 additions and 3 deletions

View File

@ -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> 2016-10-07 Joseph Myers <joseph@codesourcery.com>
* math/math.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (iseqsig): Define * math/math.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (iseqsig): Define

View File

@ -40,22 +40,38 @@
*/ */
ENTRY(_mcount) 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) stwu r1,-48(r1)
cfi_adjust_cfa_offset (48) cfi_adjust_cfa_offset (48)
#endif
/* We need to save the parameter-passing registers. */ /* We need to save the parameter-passing registers. */
stw r3, 12(r1) stw r3, 12(r1)
stw r4, 16(r1) stw r4, 16(r1)
stw r5, 20(r1) stw r5, 20(r1)
stw r6, 24(r1) stw r6, 24(r1)
mflr r4 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 mfcr r5
stw r7, 28(r1) stw r7, 28(r1)
stw r8, 32(r1) stw r8, 32(r1)
stw r9, 36(r1) stw r9, 36(r1)
stw r10,40(r1) stw r10,40(r1)
stw r4, 44(r1) stw r4, 44(r1)
cfi_offset (lr, -4) cfi_rel_offset (lr, 44)
stw r5, 8(r1) stw r5, 8(r1)
#ifndef SHARED #ifndef SHARED
bl JUMPTARGET(__mcount_internal) bl JUMPTARGET(__mcount_internal)
@ -71,13 +87,18 @@ ENTRY(_mcount)
mtcrf 0xff,r6 mtcrf 0xff,r6
lwz r5, 20(r1) lwz r5, 20(r1)
lwz r6, 24(r1) lwz r6, 24(r1)
lwz r0, 52(r1) lwz r0, CALLER_LR_OFFSET(r1)
lwz r7, 28(r1) lwz r7, 28(r1)
lwz r8, 32(r1) lwz r8, 32(r1)
mtlr r0 mtlr r0
lwz r9, 36(r1) lwz r9, 36(r1)
lwz r10,40(r1) lwz r10,40(r1)
/* ...unwind the stack frame, and return to your usual programming. */ /* ...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 addi r1,r1,48
#endif
bctr bctr
END(_mcount) END(_mcount)