This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] powerpc: fix ifunc-sel.h with GCC 6
- From: Aurelien Jarno <aurelien at aurel32 dot net>
- To: libc-alpha at sourceware dot org
- Date: Thu, 21 Jul 2016 13:22:32 +0200
- Subject: Re: [PATCH] powerpc: fix ifunc-sel.h with GCC 6
- Authentication-results: sourceware.org; auth=none
- References: <1469093774-25485-1-git-send-email-aurelien@aurel32.net>
On 2016-07-21 11:36, Aurelien Jarno wrote:
> On 32-bit PowerPC GCC 6 always saves the PIC register on the stack in
> the prologue and adjust the stack in the epilogue. It is therefore not
> possible anymore to just exit the function in the inline asm code,
> otherwise it corrupts the stack pointer. This causes the following tests
> to fail when using GCC 6:
>
> FAIL: elf/ifuncmain1
> FAIL: elf/ifuncmain1pic
> FAIL: elf/ifuncmain1picstatic
> FAIL: elf/ifuncmain1pie
> FAIL: elf/ifuncmain1staticpic
> FAIL: elf/ifuncmain1staticpie
> FAIL: elf/ifuncmain1vis
> FAIL: elf/ifuncmain1vispic
> FAIL: elf/ifuncmain1vispie
> FAIL: elf/ifuncmain2pic
> FAIL: elf/ifuncmain2picstatic
> FAIL: elf/ifuncmain3
> FAIL: elf/ifuncmain4picstatic
> FAIL: elf/ifuncmain5
> FAIL: elf/ifuncmain5picstatic
> FAIL: elf/ifuncmain5staticpic
>
> The solution is to replace the beqlr instructions by a beq to the end
> of the inline asm code. This fixes all the above failures.
>
> ChangeLog:
> * sysdeps/powerpc/ifunc-sel.h (ifunc_sel): Replace beqlr instructions
> by beq instructions jumping to the end of the function.
> ---
> ChangeLog | 5 +++++
> sysdeps/powerpc/ifunc-sel.h | 7 ++++---
> 2 files changed, 9 insertions(+), 3 deletions(-)
I forgot to say that I have tested this patch on ppc, ppc64 and ppc64le.
No regression in the testsuite.
--
Aurelien Jarno GPG: 4096R/1DDD8C9B
aurelien@aurel32.net http://www.aurel32.net