リンカーとライブラリ

x64: Initial Executable (IE)

このコードシーケンスは、「スレッド固有領域のアクセスモデル」で説明されている IE モデルを実装します。

表 8–20 x64: Initial Executable スレッド固有変数のアクセスコード

コードシーケンス

初期の再配置

シンボル

0x00 movq  %fs:0, %rax
0x09 addq  x@gottpoff(%rip), %rax

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

未処理の再配置

シンボル

GOT[n]
R_AMD64_TPOFF64
x

シンボル xR_AMD64_GOTTPOFF 再配置は、リンカーに GOT エントリおよび関連する R_AMD64_TPOFF64 再配置の生成を要求します。その後、この命令は x@gottpoff(%rip) 命令の最後からの GOT エントリの相対オフセットを使用します。R_AMD64_TPOFF64 再配置は、現在読み込まれているモジュールから決定されるシンボル x の値を使用します。オフセットは GOT エントリに書き込まれたあとで、addq 命令によって読み込まれます。

x のアドレスではなく x の内容を読み込む場合は、次のシーケンスを使用できます。

表 8–21 x64: Initial Executable スレッド固有変数のアクセスコード II

コードシーケンス

初期の再配置

シンボル

0x00 movq  x@gottpoff(%rip), %rax
0x06 movq  %fs:(%rax), %rax

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

未処理の再配置

シンボル

GOT[n]
R_AMD64_TPOFF64
x