このコードシーケンスは、動的実行可能ファイルでのみ使用できます。このモデルは、その実行可能ファイル内、またはプロセスの起動時に読み込まれる任意の共有ライブラリ内で定義された TLS 変数を参照できます。このモデルでは、プロセスの起動後に読み込まれる共有ライブラリ内の TLS 変数を参照することはできません。
表 8–4 SPARC: 32 ビットの Initial Executable スレッド固有変数のアクセスコード
未処理の再配置 |
シンボル |
|
---|---|---|
GOT[n] |
R_SPARC_TLS_TPOFF32 |
x |
sethi 命令は R_SPARC_TLS_IE_HI22 再配置を生成し、or 命令は R_SPARC_TLS_IE_LO10 再配置を生成します。これらの再配置は、シンボル x の静的な TLS オフセットを保存する領域を大域オフセットテーブル内に作成するように、リンカーに指示します。このとき、GOT に対する R_SPARC_TLS_TPOFF32 の再配置は、未処理の状態に置かれます。あとで、実行時リンカーがシンボル x の負の静的 TLS オフセットを埋め込みます。ld 命令には R_SPARC_TLS_IE_LD 再配置によってタグが付けられ、add 命令には R_SPARC_TLS_IE_ADD 再配置によってタグが付けられます。
R_SPARC_TLS_IE_ADD 再配置によってタグが付けられた add 命令の GOT ポインタとして使用されるレジスタは、この命令内の最初のレジスタでなければなりません。このように指定することで、リンカーはコード変換時に GOT ポインタであるレジスタを識別できるようになります。