[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug ld/17057] New: Production of DSOs using TLSDESC is utterly broken o
From: |
bugdal at aerifal dot cx |
Subject: |
[Bug ld/17057] New: Production of DSOs using TLSDESC is utterly broken on i386 |
Date: |
Sun, 15 Jun 2014 03:30:12 +0000 |
https://sourceware.org/bugzilla/show_bug.cgi?id=17057
Bug ID: 17057
Summary: Production of DSOs using TLSDESC is utterly broken on
i386
Product: binutils
Version: unspecified
Status: NEW
Severity: normal
Priority: P2
Component: ld
Assignee: unassigned at sourceware dot org
Reporter: bugdal at aerifal dot cx
Attempting to compile/link the following program:
__thread int my_tls = 1;
int *my_tls_addr() { return &my_tls; }
with the following gcc command line:
gcc -shared -mtls-dialect=gnu2 -fPIC -o foo.so foo.c
results in the following error message (details vary by version; I also tried
two different builds of 2.24, my own and Debian's):
/usr/bin/ld: BFD (GNU Binutils) 2.23.2 assertion fail elf32-i386.c:3922
The problem seems to be a miscomputation of the size of .got.plt needed for the
TLSDESC entries. Incidentally, if there are no PLT entries at all (this can be
achieved with the above program by -nostartfiles), the error goes away, but the
resulting DSO is unusable; it contains no DT_JMPREL in the DYNAMIC, so TLSDESC
relocations don't happen and naturally this results in a crash when the program
attempts to access the TLS.
Is this code completely untested? I can't seem to figure out how to produce any
usable/testable TLSDESC-using DSO.
--
You are receiving this mail because:
You are on the CC list for the bug.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Bug ld/17057] New: Production of DSOs using TLSDESC is utterly broken on i386,
bugdal at aerifal dot cx <=