此代码序列实现线程局部存储的访问模型中介绍的 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 |