次の表に、x86 用に定義された TLS 再配置を示します。この表の説明は、次の表記規則を使用しています。
TLS_index 構造体を保持するために、GOT 内に連続した 2 つのエントリを割り当てます。この構造体は、___tls_get_addr() に渡されます。このエントリを参照する命令は、2 つの GOT エントリのうちの最初のエントリに結合されます。
この再配置は、___tls_get_addr() 関数を参照する R_386_PLT32 再配置と同じように処理されます。
TLS_index 構造体を保持するために、GOT 内に連続した 2 つのエントリを割り当てます。この構造体は、___tls_get_addr() に渡されます。TLS_index の ti_tlsoffset フィールドは 0 に設定され、ti_moduleid は実行時に埋められます。___tls_get_addr() 呼び出しは、動的な TLS ブロックの開始オフセットを返します。
GOT 内に 1 つのエントリを割り当ててから、静的な TLS ブロックからの負の相対 tlsoffset を使用してこれを初期化します。これは、R_386_TLS_TPOFF 再配置を介して実行時に行われます。
この式は @gotntpoff に似ていますが、位置に依存するコードで使用されます。@gotntpoff は、movl 命令内または addl 命令内の GOT の先頭からの相対 GOT スロットアドレスに解決されます。@indntpoff は、絶対 GOT スロットアドレスに解決されます。
静的な TLS ブロックからの負の相対 tlsoffset を計算します。
TLS ブロックからの相対 tlsoffset を計算します。この値は加数の即値として使用され、特定のレジスタには関連付けられません。
シンボル S が含まれるオブジェクトの識別子を計算します。
名前 |
値 |
フィールド |
計算 |
---|---|---|---|
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) |