链接程序和库指南

x64: 线程局部存储的重定位类型

下表中列出的 TLS 重定位是针对 x64 定义的。此表中的说明使用以下表示法。

@tlsgd(%rip)

GOT 中分配两个连续项,以存储 TLS_index 结构。此结构将传递给 __tls_get_addr()。只能在确切的常规动态代码序列中使用此指令。

@tlsld(%rip)

GOT 中分配两个连续项,以存储 TLS_index 结构。此结构将传递给 __tls_get_addr()。在运行时,将目标文件的 ti_offset 偏移字段设置为零,并初始化 ti_module 偏移。对 __tls_get_addr() 函数的调用将返回动态 TLS 块的起始偏移。只能在确切的代码序列中使用此指令。

@dtpoff

计算变量相对于包含它的 TLS 块起始位置的偏移。计算所得的值将用作加数的立即值,并且不与特定寄存器关联。

@dtpmod(x)

计算包含 TLS 符号的目标文件的标识符。

@gottpoff(%rip)

GOT 中分配一项,以将变量偏移保存在初始 TLS 块中。此偏移相对于 TLS 块的结束位置 %fs:0。运算符只能与 movqaddq 指令一起使用。

@tpoff(x)

计算变量相对于 TLS 块结束位置 %fs:0 的偏移。不创建任何 GOT 项。

表 8–25 x64: 线程局部存储的重定位类型

名称 

值 

字段 

计算 

R_AMD64_DPTMOD64

16

Word64

@dtpmod(s)

R_AMD64_DTPOFF64

17

Word64

@dtpoff(s)

R_AMD64_TPOFF64

18

Word64

@tpoff(s)

R_AMD64_TLSGD

19

Word32

@tlsgd(s)

R_AMD64_TLSLD

20

Word32

@tlsld(s)

R_AMD64_DTPOFF32

21

Word32

@dtpoff(s)

R_AMD64_GOTTPOFF

22

Word32

@gottpoff(s)

R_AMD64_TPOFF32

23

Word32

@gottpoff(s)