JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
リンカーとライブラリ     Oracle Solaris 11 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

パート I リンカーおよび実行時リンカーの使用

1.  Oracle Solaris リンカーの紹介

2.  リンカー

3.  実行時リンカー

4.  共有オブジェクト

5.  インタフェースおよびバージョン管理

6.  動的ストリングトークンによる依存関係の確立

パート II クイックリファレンス

7.  リンカーのクイックリファレンス

8.  バージョン管理の手引き

パート III 詳細情報

9.  直接結合

10.  mapfile

11.  拡張性メカニズム

パート IV ELF アプリケーションバイナリインタフェース

12.  オブジェクトファイル形式

13.  プログラムの読み込みと動的リンク

14.  スレッド固有領域 (TLS)

C/C++ プログラミングインタフェース

スレッド固有領域 (TLS) セクション

スレッド固有領域の実行時の割り当て

プログラムの起動

スレッドの作成

起動後の動的読み込み

スレッド固有領域ブロックの遅延割り当て

スレッド固有領域のアクセスモデル

SPARC: スレッド固有変数へのアクセス

SPARC: General Dynamic (GD)

SPARC: Local Dynamic (LD)

32 ビット SPARC: Initial Executable (IE)

64 ビット SPARC: Initial Executable (IE)

SPARC: Local Executable (LE)

SPARC: スレッド固有領域の再配置のタイプ

32 ビット x86: スレッド固有変数へのアクセス

32 ビット x86: General Dynamic (GD)

x86: Local Dynamic (LD)

32 ビット x86: Initial Executable (IE)

32 ビット x86: Local Executable (LE)

32 ビット x86: スレッド固有領域の再配置のタイプ

x64: スレッド固有変数へのアクセス

x64: General Dynamic (GD)

x64: Local Dynamic (LD)

x64: Initial Executable (IE)

x64: Local Executable (LE)

x64: スレッド固有領域の再配置のタイプ

パート V 付録

A.  リンカーとライブラリのアップデートおよび新機能

B.  System V Release 4 (バージョン 1) Mapfile

索引

スレッド固有領域 (TLS) セクション

コンパイル時に割り当てられたスレッド固有データのコピーは、実行される個々のスレッドに、個別に関連付けられる必要があります。このデータを提供するために、TLS セクションを使用してサイズと初期の内容を指定します。コンパイル環境は、SHF_TLS フラグで識別されるセクション内に TLS を割り当てます。これらのセクションは、領域がどのように宣言されているかにもとづき、初期化された TLS と初期化されていない TLS を提供します。

初期化されていないセクションは、適切な整列になるようにパッドを入れられて、初期化されたセクションの直後に割り当てられます。結合されたこれらのセクションは、新しいスレッドの作成時に TLS の割り当てに使用できる TLS テンプレートとなります。このテンプレートの初期化された部分を、TLS 初期化イメージと呼びます。初期化されたスレッド固有変数の結果として発生する再配置はすべて、このテンプレートに適用されます。その後、新しいスレッドが初期値を要求すると、再配置された値が使用されます。

TLS シンボルのシンボルタイプは STT_TLS です。これらのシンボルには、TLS テンプレートの先頭からの相対オフセットが割り当てられます。これらのシンボルに関連付けられた実際の仮想アドレスとは無関係です。このアドレスが指すのはテンプレートだけで、各データ項目のスレッドごとのコピーではありません。動的実行可能ファイルと共有オブジェクトでは、STT_TLS シンボルの st_value フィールドに、定義済みシンボルの場合は割り当てられた TLS オフセットが含まれます。未定義シンボルの場合は、このフィールドにゼロが含まれます。

TLS へのアクセスをサポートするために、再配置がいくつか定義されます。「SPARC: スレッド固有領域の再配置のタイプ」「32 ビット x86: スレッド固有領域の再配置のタイプ」、および「x64: スレッド固有領域の再配置のタイプ」を参照してください。TLS 再配置は通常、タイプ STT_TLS のシンボルを参照します。TLS 再配置は、GOT エントリに関連するローカルセクションシンボルも参照できます。この場合、割り当てられた TLS のオフセットが、関連する GOT エントリに保存されます。

静的 TLS 項目に対する再配置の場合、再配置アドレスは、静的 TLS テンプレートの最後からの負のオフセットとして符号化されます。このオフセットの計算は、最初に、32 ビットオブジェクトの場合はもっとも近い 8 バイト境界に、64 ビットオブジェクトの場合はもっとも近い 16 バイト境界にテンプレートサイズを丸めます。この丸めによって、静的な TLS テンプレートがどのような利用にも適切に配置されることが保証されます。

動的実行可能ファイルと共有オブジェクトでは、PT_TLS プログラムエントリが TLS テンプレートを記述します。このテンプレートには、次のメンバーが含まれます。

表 14-1 ELF PT_TLS プログラムヘッダーエントリ

メンバー
p_offset
TLS 初期化イメージのファイルオフセット
p_vaddr
TLS 初期化イメージの仮想メモリーアドレス
p_paddr
0
p_filesz
TLS 初期化イメージのサイズ
p_memsz
TLS テンプレートの合計サイズ
p_flags
PF_R
p_align
TLS テンプレートの整列