链接程序和库指南

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

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

@tlsgd(x)

GOT 中分配两个连续项,以存储 TLS_index 结构。此结构将传递给 ___tls_get_addr()。引用此项的指令将绑定到两个 GOT 项中的第一项。

@tlsgdplt(x)

可以按处理引用 ___tls_get_addr() 函数的 R_386_PLT32 重定位的方式处理此重定位。

@tlsldm(x)

GOT 中分配两个连续项,以存储 TLS_index 结构。此结构将传递给 ___tls_get_addr()。将 TLS_indexti_tlsoffset 字段设置为 0,并且在运行时填充 ti_moduleid。对 ___tls_get_addr() 的调用将返回动态 TLS 块的起始偏移。

@gotntpoff(x)

GOT 中分配一项,并使用相对于静态 TLS 块的负 tlsoffset 初始化该项。运行时将使用 R_386_TLS_TPOFF 重定位执行此序列。

@indntpoff(x)

此表达式类似于 @gotntpoff,但它用在位置相关代码中。在 movladdl 指令中,@gotntpoff 将解析为相对于 GOT 起始位置的 GOT 插槽地址。@indntpoff 将解析为绝对 GOT 插槽地址。

@ntpoff(x)

计算相对于静态 TLS 块的负 tlsoffset

@dtpoff(x)

计算相对于 TLS 块的 tlsoffset。此值用作加数的立即值,并且不与特定寄存器关联。

@dtpmod(x)

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

表 8–17 32 位 x86: 线程局部存储的重定位类型

名称 

值 

字段 

计算 

R_386_TLS_GD_PLT

12

Word32

@tlsgdplt

R_386_TLS_LDM_PLT

13

Word32

@tlsldmplt

R_386_TLS_TPOFF

14

Word32

@ntpoff(S)

R_386_TLS_IE

15

Word32

@indntpoff(S)

R_386_TLS_GOTIE

16

Word32

@gotntpoff(S)

R_386_TLS_LE

17

Word32

@ntpoff(S)

R_386_TLS_GD

18

Word32

@tlsgd(S)

R_386_TLS_LDM

19

Word32

@tlsldm(S)

R_386_TLS_LDO_32

32

Word32

@dtpoff(S)

R_386_TLS_DTPMOD32

35

Word32

@dtpmod(S)

R_386_TLS_DTPOFF32

36

Word32

@dtpoff(S)