[Bug target/81996] __builtin_return_address(0) does not work on powerpc in -fPIC -fstack-protector-all mode and causes SIGSEGVs

segher at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Aug 28 12:01:00 GMT 2017


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81996

Segher Boessenkool <segher at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |segher at gcc dot gnu.org
      Known to fail|                            |8.0

--- Comment #4 from Segher Boessenkool <segher at gcc dot gnu.org> ---
Hi!

(In reply to Sergei Trofimovich from comment #2)
> gcc master is slightly better here but is still inefficient in fPIC mode:
> 
> gcc -O2 -fno-PIC:
> 
>     f:
>         mflr 3
>         blr
> 
> gcc -O2 -fPIC:
> 
>     f:
>         stwu 1,-16(1)
>         mflr 0
>         stw 0,20(1)
>         stw 30,8(1)
>         lwz 9,0(1)
>         lwz 0,20(1)
>         lwz 3,4(9)
>         lwz 30,8(1)
>         mtlr 0
>         addi 1,1,16
>         blr

This code looks fine.  But it is *without* -fstack-protector-all, and with
it indeed a problem shows up:

===
f:
        stwu 1,-48(1)
        mflr 0
        stw 0,52(1)          # save at old r1+4
        stw 30,40(1)
        lwz 9,-28680(2)
        stw 9,28(1)
        li 9,0
        lwz 9,32(1)          # tries to get the old r1; but that is at r1+48 !
        lwz 10,28(1)
        lwz 8,-28680(2)
        xor. 10,10,8
        li 8,0
        lwz 3,4(9)           # and load from old r1+4
        bne 0,.L5
        lwz 0,52(1)
        lwz 30,40(1)
        addi 1,1,48
        mtlr 0
        blr
.L5:
        bl __stack_chk_fail@plt
===

Confirmed.  (Needs -m32).


More information about the Gcc-bugs mailing list