链接程序和库指南

x64: 局部可执行 (Local Executable, LE)

此代码序列实现线程局部存储的访问模型中介绍的 LE 模型。

表 8–22 x64: 局部可执行的线程局部变量的访问代码

代码序列

初始重定位

符号

0x00 movq %fs:0, %rax

0x06 leaq  x@tpoff(%rax), %rax



# %rax - contains address of TLS variable
<none>

R_AMD64_TPOFF32
x

要装入 TLS 变量的内容(而不是 TLS 变量的地址),可使用以下序列。

表 8–23 x64: 局部可执行的线程局部变量的访问代码 II

代码序列

初始重定位

符号

0x00 movq %fs:0, %rax

0x06 movq  x@tpoff(%rax), %rax



# %rax - contains contents of TLS variable
<none>

R_AMD64_TPOFF32
x

以下序列更短。

表 8–24 x64: 局部可执行的线程局部变量的访问代码 III

代码序列

初始重定位

符号

0x00 movq  %fs:x@tpoff, %rax



# %rax - contains contents of TLS variable
R_AMD64_TPOFF32
x