https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103015
Bug ID: 103015 Summary: [i386][solaris] Segmentation fault loading pointer to TLS Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: ibuclaw at gdcproject dot org Target Milestone: --- Translation of D test gdc.test/runnable/testv.d that segfaults when compiled with -O2, and linking libraries in dynamically. --- // Compiled with -m32 -O2 int printf(const char*, ...); _Thread_local int a1[2] = {5,6}; _Thread_local int a2[3] = {5,6,7}; _Thread_local int a3[4] = {5,6,7,8}; int sum3(int* xx, int length) { int s = 0; for (int i = 0; i < length; i++) { int x = xx[i]; s += x; } return s; } int main() { printf("%d\n", sum3(a3, sizeof(a3) / sizeof(a3[0]))); return 0; } --- --- Dump of assembler code for function main: 0x08050c60 <+0>: lea 0x4(%esp),%ecx 0x08050c64 <+4>: and $0xfffffff0,%esp 0x08050c67 <+7>: pushl -0x4(%ecx) 0x08050c6a <+10>: push %ebp 0x08050c6b <+11>: mov %esp,%ebp 0x08050c6d <+13>: push %ecx 0x08050c6e <+14>: sub $0xc,%esp 0x08050c71 <+17>: mov %gs:0x0,%eax 0x08050c77 <+23>: lea -0x4(%esp),%esp => 0x08050c7b <+27>: movdqa -0x28(%eax),%xmm0 0x08050c83 <+35>: movdqa %xmm0,%xmm1 0x08050c87 <+39>: psrldq $0x8,%xmm1 0x08050c8c <+44>: paddd %xmm1,%xmm0 0x08050c90 <+48>: movdqa %xmm0,%xmm1 0x08050c94 <+52>: psrldq $0x4,%xmm1 0x08050c99 <+57>: paddd %xmm1,%xmm0 0x08050c9d <+61>: movd %xmm0,(%esp) 0x08050ca2 <+66>: push $0x80509f8 0x08050ca7 <+71>: call 0x8050a4c <printf@plt> 0x08050cac <+76>: mov -0x4(%ebp),%ecx 0x08050caf <+79>: add $0x10,%esp 0x08050cb2 <+82>: xor %eax,%eax 0x08050cb4 <+84>: leave 0x08050cb5 <+85>: lea -0x4(%ecx),%esp 0x08050cb8 <+88>: ret End of assembler dump. ---