bug-binutils
[Top][All Lists]
Advanced

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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]