Thread-local Storage


Which ports have thread-local storage support in gcc/binutils?

Architecture GCC Binutils
alpha Yes Yes
arm Yes Yes
hppa Yes Yes
i386 Yes Yes
m68k Underway Underway
mips Yes Yes
powerpc Yes Yes
sh Yes Yes
sparc Yes Yes
sparc64 Yes Yes
vax No No
x86_64 Yes Yes

Phase 1: Kernel support

Area Task Responsible Progress
LWP Private data Define __HAVE_CPU_LWP_SETPRIVATE for the ports that need it. All Underway
Modify ucontext_t to store/retrieve the LWP private data. mjf Underway
Version setcontext(2) and getcontext(2). mjf Underway

Phase 2: MI dynamic linker support

Area Task Responsible Progress
Initialization Parse PT_TLS phdrs and create initialization image. None
Module (object) ID generation. None
Static model Allocation of TLS blocks for objects. None
Dynamic model Lazy allocation of TLS blocks. None
Dynamic thread vector None

Phase 3: MD dynamic linker and libpthread support

Architecture TLS relocs progress __tls_get_addr() progress Responsible
alpha None None
arm None None
hppa None None skrll, mjf
i386 None None
mips None None
powerpc None None
sh None None mjf
sparc None None
sparc64 None None
x86_64 None None

Phase 4: MI libpthread support

Area Task Responsible Progress
Interfaces Implement a pthread_tcb() function for each port. None
LWP startup Copy .tdata section for newly created LWP. None
Misc. Use the thread register to improve performance for pthread_self() None
Investigate bug reports that were opened because of the broken pthread_self()/signal interaction. Currently pthread_self() does not work in signal handlers that use an alternate stack, e.g. stack + libpthread doesn't work. By implementing pthread_self() with a thread regsiter these bugs go away. None