bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug ld/11217] New: Automatic multiple TOC and __thread problems


From: amodra at gmail dot com
Subject: [Bug ld/11217] New: Automatic multiple TOC and __thread problems
Date: 25 Jan 2010 05:27:58 -0000

gcc currently generates code that assumes a TOC is smaller than 64k.  A large
TOC requires ld to partition the TOC into groups smaller than 64k with TOC
pointer adjusting stubs inserted on calls between functions using differing TOC
groups.  That works reasonably well except that code generated by gcc for all
TLS models besides local exec uses @got relocs, and these generate GOT entries
that are placed in the first TOC group.  The net result is that functions using
a TOC group other than the first can't access their GOT entries.  ld ought to
generate multiple GOT entries, one in each group.

Also, ld's partitioning of functions into TOC groups could be better.  Current
glibc bsd-_setjmp.o contains a function of just two instructions, "li r1,1; b
__vmx__sigsetjmp_ent;".  Since this object file uses no TOC entries, the
function can be placed in any TOC group, but will cause an error if it happens
to be placed in a different TOC group to __vmx__sigsetjmp_ent as the linker
cannot insert TOC pointer adjusting stubs on plain branches (tail calls).

-- 
           Summary: Automatic multiple TOC and __thread problems
           Product: binutils
           Version: 2.20
            Status: NEW
          Severity: normal
          Priority: P2
         Component: ld
        AssignedTo: amodra at gmail dot com
        ReportedBy: amodra at gmail dot com
                CC: bug-binutils at gnu dot org
GCC target triplet: powerpc64-linux


http://sourceware.org/bugzilla/show_bug.cgi?id=11217

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.




reply via email to

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