This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi! We right now ICE with -mcmodel=large -fpic on x86_64 on TLS GD and LD sequences, because obviously we can't call __tls_get_addr@plt there from code potentially more than 2GB away from the PLT slot. The attached patches add support for that in gcc and also teaches linker about those, because otherwise the linker will fail if you try to link such -mcmodel=large -fpic code into binaries or PIEs. To make transitions possible, we emit always leaq foo@tlsgd(%rip), %rdi movabsq $__tls_get_addr@pltoff, %rax addq $rbx, %rax call *%rax resp. leaq foo@tlsld(%rip), %rdi movabsq $__tls_get_addr@pltoff, %rax addq $rbx, %rax call *%rax sequences (22 bytes, 6 bytes longer than what we do for TLSGD for normal libraries). Bootstrapped/regtested on x86_64-linux and i686-linux, attached is also the sources I've used to test all the 3 different transitions. Ok for trunk and 4.8 branch (and binutils trunk)? Jakub
Attachment:
gcc49-pr58067.patch
Description: Text document
Attachment:
ld-pr58067.patch
Description: Text document
Attachment:
a.c
Description: Text document
Attachment:
b.c
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |