在x86-64架构上,两个寄存器具有特殊用途:FS和GS。在linux 2.6。*中,FS寄存器似乎用于存储线程本地信息。
在x86-64中,有3个TLS条目,其中两个可通过FS和GS访问,FS由glibc内部使用(在IA32中,FS由Wine和GS由glibc使用)。
Glibc使其TLS入口指向,struct pthread其中包含一些用于线程的内部结构。Glibc通常将struct pthread变量引用pd为 pthread描述符 。
struct pthread
pd
在x86-64上,struct pthread以a开头tcbhead_t(这取决于体系结构,请参见宏TLS_DTV_AT_TP和TLS_TCB_AT_TP)。即使只有一个线程,此线程控制块头AFAIU仍包含一些必填字段。DTV是动态线程向量,并且包含指向通过加载的DSO的TLS块的指针dlopen()。在TCB之前或之后,在(程序)加载时链接了可执行文件和DSO的静态TLS块。Ulrich Drepper的TLS文档中对TCB和DTV进行了很好的解释(请参阅第3章中的图)。
tcbhead_t
TLS_DTV_AT_TP
TLS_TCB_AT_TP
dlopen()