[Bug middle-end/96200] Implement __builtin_thread_pointer() and __builtin_set_thread_pointer() if TLS is supported
fw at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat Aug 29 05:48:24 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96200
--- Comment #6 from Florian Weimer <fw at gcc dot gnu.org> ---
(In reply to H.J. Lu from comment #4)
> On Linux/i386 and Linux/x86-64, thread pointer access is done via syscall.
> On Linux/x86-64, __builtin_thread_pointer and __builtin_set_thread_pointer
> may be implemented with FSGSBASE ISA. Is it possible to implement these
> builtins on Linux/i386 and Linux/x86-64 for all processors?
It's effectively part of the x86-64 ABI, but I think it's currently
undocumented. On x86-64, it looks like this:
static inline void *
thread_pointer (void)
{
void *result;
asm ("mov %%fs:0, %0" : "=r" (result));
return result;
}
i386 is similar, but with %gs, I think.
This is ABI since the early NPTL days, and GCC knows about this very
explicitly, to implement the -mno-tls-direct-seg-refs option.
More information about the Gcc-bugs
mailing list