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

ドキュメントの情報

はじめに

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

1.  Oracle Solaris リンカーの紹介

2.  リンカー

3.  実行時リンカー

4.  共有オブジェクト

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

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

パート III 詳細情報

6.  直接結合

7.  システムのパフォーマンスを最適化するオブジェクトの構築

8.  mapfile

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

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

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

索引

ドキュメントの品質向上のためのご意見をください
簡潔すぎた
読みづらかった、または難し過ぎた
重要な情報が欠けていた
内容が間違っていた
翻訳版が必要
その他
Your rating has been updated
貴重なご意見を有り難うございました!

あなたの貴重なご意見はより良いドキュメント作成の手助けとなります 内容の品質向上と追加コメントのためのアンケートに参加されますか?

スレッド固有ストレージ (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 テンプレートの整列