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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|---                         |INVALID

--- Comment #3 from Segher Boessenkool <segher at gcc dot gnu.org> ---
Looking at GCC's output:

[ cutting away irrelevant (irrelevant here) dot ops: ]

geta:
        stwu 1,-16(1)
        mflr 0
        bcl 20,31,$+8
        mflr 3
        lwz 9,0(3)
        add 3,3,9
        stw 0,20(1)
        addi 3,3,a@got@tlsld
        stw 30,8(1)
        bl __tls_get_addr(a@tlsld)@plt
        lwz 0,20(1)
        lwz 30,8(1)
        addis 3,3,a@dtprel@ha
        mtlr 0
        addi 3,3,a@dtprel@l
        lwz 3,0(3)
        addi 1,1,16
        blr


getb:
        stwu 1,-16(1)
        mflr 0
        bcl 20,31,$+8
        mflr 3
        lwz 9,0(3)
        add 3,3,9
        stw 0,20(1)
        addi 3,3,b@got@tlsgd
        stw 30,8(1)
        bl __tls_get_addr(b@tlsgd)@plt
        lwz 0,20(1)
        lwz 30,8(1)
        lwz 3,0(3)
        mtlr 0
        addi 1,1,16
        blr


tlsld and tlsgd have quite different semantics, so this isn't a real surprise?

What do you think the compiler should do differently?

(Closing as invalid, please reopen if you want further action).

Reply via email to