On Linux/x86 and Linux/x86-64, I got [EMAIL PROTECTED] tls-5]$ cat x.c #include <stdio.h>
__thread int foo __attribute__((tls_model("global-dynamic"))) = 100; int main () { printf ("foo: %d\n", foo); return 0; } [EMAIL PROTECTED] tls-5]$ gcc -o x x.c /usr/local/bin/ld: BFD (Linux/GNU Binutils) 2.18.50.0.1.20070811 assertion fail /net/gnu-13/export/linux/src/binutils/binutils/bfd/elf64-x86-64.c:2568 [EMAIL PROTECTED] tls-5]$ ./x foo: 100 The assert comes from /* GD->LE transition. .byte 0x66; leaq [EMAIL PROTECTED](%rip), %rdi .word 0x6666; rex64; call [EMAIL PROTECTED] Change it into: movq %fs:0, %rax leaq [EMAIL PROTECTED](%rax), %rax */ BFD_ASSERT (rel->r_offset >= 4); for (i = 0; i < 4; i++) BFD_ASSERT (bfd_get_8 (input_bfd, contents + rel->r_offset - 4 + i) == tlsgd[i]); BFD_ASSERT (rel->r_offset + 12 <= input_section->size); for (i = 0; i < 4; i++) BFD_ASSERT (bfd_get_8 (input_bfd, contents + rel->r_offset + 4 + i) == tlsgd[i+4]); BFD_ASSERT (rel + 1 < relend); BFD_ASSERT (ELF64_R_TYPE (rel[1].r_info) == R_X86_64_PLT32); Why is R_X86_64_PLT32 required here? -- Summary: ___tls_get_addr call requires @PLT even without -fpic Product: binutils Version: 2.19 (HEAD) Status: NEW Severity: normal Priority: P2 Component: ld AssignedTo: unassigned at sources dot redhat dot com ReportedBy: hjl at lucon dot org CC: bug-binutils at gnu dot org http://sourceware.org/bugzilla/show_bug.cgi?id=4918 ------- You are receiving this mail because: ------- You are on the CC list for the bug, or are watching someone who is. _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-binutils