Oracle® Solaris 11.2 链接程序和库指南

退出打印视图

更新时间: 2014 年 7 月
 
 

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 项。

表 14-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)