https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125511
Bug ID: 125511
Summary: [ppc] get tls symbol failed using -fno-plt
Product: gcc
Version: 14.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: zhenhangwang at huawei dot com
Target Milestone: ---
I find setting tls symbol failed by using -fno-plt
libtest.c:
```
__thread int xx;
void write_tls(void)
{
xx = 1;
}
```
powerpc-linux-gnu-gcc -O2 -fno-plt -fpic -shared libtest.c
-Wl,-soname=libtest.so -o libtest.so
test.c:
```
extern void write_tls(void);
int main(void)
{
write_tls();
return 0;
}
```
powerpc-linux-gnu-gcc -O2 -fno-plt test.c -L. -ltest && ./a.out
And gdb it, the r3 is 0x1001 is invalid, leads to core dump
```
(gdb) disassemble
(gdb) disassemble
Dump of assembler code for function write_tls:
0xb7fad510 <+0>: stwu r1,-16(r1)
0xb7fad514 <+4>: mflr r0
0xb7fad518 <+8>: bcl 20,4*cr7+so,0xb7fad51c <write_tls+12>
0xb7fad51c <+12>: stw r30,8(r1)
0xb7fad520 <+16>: mflr r30
0xb7fad524 <+20>: addis r30,r30,1
0xb7fad528 <+24>: stw r0,20(r1)
0xb7fad52c <+28>: addi r30,r30,2776
0xb7fad530 <+32>: addi r3,r30,-12
0xb7fad534 <+36>: addis r11,r30,0
0xb7fad538 <+40>: lwz r11,20(r11)
0xb7fad53c <+44>: mtctr r11
0xb7fad540 <+48>: bctrl
0xb7fad544 <+52>: lwz r0,20(r1)
0xb7fad548 <+56>: li r9,1
=> 0xb7fad54c <+60>: stw r9,0(r3)
0xb7fad550 <+64>: lwz r30,8(r1)
0xb7fad554 <+68>: mtlr r0
0xb7fad558 <+72>: addi r1,r1,16
0xb7fad55c <+76>: blr
End of assembler dump.
(gdb) info reg
r0 0x400480 4195456
r1 0xbffffa50 3221224016
r2 0xb8003240 3087020608
r3 0x1001 4097
r4 0xb7ffc948 3086993736
r5 0xbffffcfc 3221224700
r6 0xbffffd5c 3221224796
r7 0xb7fa2f6c 3086626668
r8 0x1 1
r9 0x1 1
r10 0xbffffa80 3221224064
r11 0xbffffa50 3221224016
r12 0xb7fad544 3086669124
r13 0x410ff4 4263924
r14 0x0 0
r15 0x0 0
r16 0x0 0
r17 0x0 0
r18 0x0 0
r19 0x0 0
r20 0x0 0
r21 0x0 0
```