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).