You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
0 commit comments