From patchwork Sun Oct 9 19:47:29 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Schwab X-Patchwork-Id: 16372 Received: (qmail 43808 invoked by alias); 9 Oct 2016 19:47:45 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 43796 invoked by uid 89); 9 Oct 2016 19:47:44 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.4 required=5.0 tests=AWL, BAYES_00, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_LOW autolearn=no version=3.3.2 spammy=1756, HX-HELO:sk:mail-ou, bcl, D*l X-HELO: mail-out.m-online.net X-Auth-Info: ECx/3cgQ16/GMYUgS90cvgX3soVPeOZSNLdKZUiJ7BE+ZPP/xUJZKiEUh/PDm5XE From: Andreas Schwab To: libc-alpha@sourceware.org Subject: powerpc32: make PLT call in _mcount compatible with -msecure-plt (bug 20554) CC: Alan Modra X-Yow: This TOPS OFF my partygoing experience! Someone I DON'T LIKE is talking to me about a HEART-WARMING European film.. Date: Sun, 09 Oct 2016 21:47:29 +0200 Message-ID: <87pon9s3se.fsf@linux-m68k.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) MIME-Version: 1.0 This fixes _mcount on powerpc32 so that it doesn't force bss-plt. Tested by running the profiling tests from the gcc testsuite which were skipped without this change do to the linker message. Installed on master. Andreas. [BZ #20554] * sysdeps/powerpc/powerpc32/ppc-mcount.S (_mcount) [PIC && !SHARED]: Set up PIC register for PLT call. --- sysdeps/powerpc/powerpc32/ppc-mcount.S | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/sysdeps/powerpc/powerpc32/ppc-mcount.S b/sysdeps/powerpc/powerpc32/ppc-mcount.S index 68df440cf3..1d36b91243 100644 --- a/sysdeps/powerpc/powerpc32/ppc-mcount.S +++ b/sysdeps/powerpc/powerpc32/ppc-mcount.S @@ -40,22 +40,38 @@ */ 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)