Skip to content

Commit ba04798

Browse files
committed
Fix "TLS transition from R_X86_64_TLSGD to R_X86_64_GOTTPOFF against _tsrm_ls_cache' at 0x12fc3 in section .text' failed"
In order to get information about the _tsrm_ls_cache TLS variable, we emit ASM code with TLS-related relocations [1]. These relocations, once adjusted by the linker, give us the offset or address of the variable's TLS descriptor. Specifically, we use relocations meant for use in the "General Dynamic" model described in [1]. When building Opcache statically in a binary, the linker will attempt to optimize the General Dynamic code sequence to a more efficient one. Unfortunately, linkers will break as we don't use the exact code sequence they are expecting. Here I use a different approach to get information about the TLS variable: * Emit the exact code sequence expected by linker, so that linking works * Extract the information we want by inspecting the ASM code. If the linker did something we didn't expect, we fallback to a safer (but slower) mechanism. [1] https://www.akkadia.org/drepper/tls.pdf
1 parent 3ffefcc commit ba04798

File tree

1 file changed

+556
-94
lines changed

1 file changed

+556
-94
lines changed

0 commit comments

Comments
 (0)