コンパイル時に割り当てられたデータを、スレッドごとに複製して関連付けるために、スレッド固有領域 (thread-local storage、TLS) セクションを使用して、そのようなデータのサイズおよび初期の内容を指定することができます。
SHF_TLS 型のセクションは、初期化されていないスレッド固有領域と初期化されたスレッド固有領域を提供します。初期化されていないセクションである .tbss は、適切な整列のためのパディングに従って、初期化されたセクションである .tdata および .tdata1 の直後に割り当てられます。セクションの組み合わせにより TLS テンプレートが形成され、この TLS テンプレートは、新しいスレッドが作成されるたびに、スレッド固有領域の割り当てに使用されます。
このテンプレートの初期化された部分を、TLS 初期化イメージと呼びます。初期化されたスレッド固有変数の結果発生する再配置はすべて、このテンプレートに適用され、新しいスレッドが初期値を要求すると、再配置された値が使用されます。
1 つの PT_TLS プログラムエントリは、1 つの TLS テンプレートを記述し、次の構成要素を持ちます。
表 7–35 ELF PT_TLS プログラムエントリ
構成要素 |
値 |
---|---|
p_offset |
TLS 初期化イメージのファイルオフセット |
p_vaddr |
TLS 初期化イメージの仮想メモリーアドレス |
p_paddr |
予約済み |
p_filesz |
TLS 初期化イメージのサイズ |
p_memsz |
TLS テンプレートの合計サイズ |
p_flags |
PF_R |
p_align |
TLS テンプレートの整列 |