リンカーとライブラリ

スレッド固有領域

コンパイル時に割り当てられたデータを、スレッドごとに複製して関連付けるために、スレッド固有領域 (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 テンプレートの整列