オブジェクトファイルが動的リンクに関係している場合、このオブジェクトファイルのプログラムヘッダーテーブルには、PT_DYNAMIC 型の要素が存在します。このセグメントには、.dynamic セクションが存在します。特殊なシンボル _DYNAMIC は、このセクションを示し、このセクションには、次の構造体を持つ配列が存在します。sys/link.h を参照してください。
typedef struct { Elf32_Sword d_tag; union { Elf32_Word d_val; Elf32_Addr d_ptr; Elf32_Off d_off; } d_un; } Elf32_Dyn; typedef struct { Elf64_Xword d_tag; union { Elf64_Xword d_val; Elf64_Addr d_ptr; } d_un; } Elf64_Dyn;
このタイプの各オブジェクトの場合、d_tag は d_un の解釈に影響します。
このオブジェクトは、さまざまに解釈される整数値を表します。
このオブジェクトは、プログラムの仮想アドレスを表します。ファイルの仮想アドレスは、実行時にメモリーの仮想アドレスに一致しないことがあります。実行時リンカーは、動的構造体に存在するアドレスを解釈するとき、元のファイル値とメモリーのベースアドレスに基づいて実際のアドレスを計算します。整合性のため、ファイルには動的構造体内のアドレスを補正するための再配置エントリは存在しません。
一般的に、各動的タグ値によって d_un union の解釈が決まります。この規則は、他社製ツールによる動的タグの解釈をよりシンプルにします。偶数の値を持つタグは、d_ptr を使用する動的セクションのエントリを示します。奇数の値を持つタグは、d_val を使用する動的セクションのエントリ、または d_ptr と d_val のどちらも使用しない動的セクションのエントリを示します。互換性のために次のような特別な範囲の値を持つタグは、これらの規則に従いません。他社製ツールは、これらの例外的な範囲に項目ごとに明示的に対応する必要があります。
特別な値 DT_ENCODING より小さい値を持つタグ。
DT_LOOS - DT_SUNW_ENCODING の値を持つタグ。
DT_HIOS - DT_LOPROC の値を持つタグ。
次の表は、実行可能オブジェクトファイルと共有オブジェクトファイルのタグ要求についてまとめています。タグに「必須」という印が付いている場合、動的リンク配列にはその型のエントリが存在しなければなりません。また、オプションは、タグのエントリが現れてもよいですが必須ではないことを意味します。
|
_DYNAMIC 配列の終わりを示します。
ヌル文字で終わっている文字列の DT_STRTAB 文字列テーブルオフセットであり、必要な依存性の名前を示します。動的配列には、この型の複数のエントリが存在できます。これらのエントリの相対順序は意味がありますが、ほかの型のエントリに対するこれらのエントリの相対順序には意味がありません。共有オブジェクトの依存関係を参照してください。
プロシージャーのリンクテーブルに関連付けられている再配置エントリの合計サイズ (単位: バイト)。プロシージャーのリンクテーブル (プロセッサ固有)を参照してください。
プロシージャーのリンクテーブルまたはグローバルオフセットテーブルに関連付けられるアドレス。プロシージャーのリンクテーブル (プロセッサ固有)と大域オフセットテーブル (プロセッサ固有)を参照してください。
シンボルハッシュテーブルのアドレス。このテーブルは、DT_SYMTAB 要素で示されるシンボルテーブルを参照します。ハッシュテーブルセクションを参照してください。
文字列テーブルのアドレス。文字列テーブルには、実行時リンカーが必要とするシンボル名、依存性名、およびほかの文字列が存在します。文字列テーブルセクションを参照してください。
シンボルテーブルのアドレス。シンボルテーブルセクションを参照してください。
再配置テーブルのアドレス。再配置セクションを参照してください。
オブジェクトファイルには、複数の再配置セクションを指定できます。リンカーは、実行可能オブジェクトファイルまたは共有オブジェクトファイルの再配置テーブルを作成するとき、これらのセクションを連結して単一のテーブルを作成します。これらの各セクションはオブジェクトファイル内で独立している場合がありますが、実行時リンカーは単一のテーブルとして扱います。実行時リンカーは、実行可能ファイルのプロセスイメージを作成したり、またはプロセスイメージに共有オブジェクトを付加したりするとき、再配置テーブルを読み取り、関連付けられている動作を実行します。
この要素が存在する場合、DT_RELASZ 要素と DT_RELAENT 要素も存在する必要があります。再配置がファイルに対して必須の場合、DT_RELA または DT_REL が使用可能です。
DT_RELA 再配置テーブルの合計サイズ (単位: バイト)。
DT_RELA 再配置エントリのサイズ (単位: バイト)。
DT_STRTAB 文字列テーブルの合計サイズ (単位: バイト)。
DT_SYMTAB シンボルエントリのサイズ (単位: バイト)。
初期化関数のアドレス。初期設定および終了セクションを参照してください。
終了関数のアドレス。初期設定および終了セクションを参照してください。
ヌル文字で終わっている文字列の DT_STRTAB 文字列テーブルオフセットで、共有オブジェクトの名前を示します。共有オブジェクト名の記録を参照してください。
ヌル文字で終わっているライブラリ検索パス文字列の DT_STRTAB 文字列テーブルオフセット。この要素の使用は、DT_RUNPATH に置き換えられました。実行時リンカーが検索するディレクトリを参照してください。
オブジェクトが、リンク編集中に適用されたシンボリック結合を含むことを示します。この要素の使用は、DF_SYMBOLIC フラグに置き換えられました。-B symbolic オプションの使用を参照してください。
DT_RELA に似ていますが、テーブルに暗黙の加数が存在する点が異なります。この要素が存在する場合、DT_RELSZ 要素と DT_RELENT 要素も存在する必要があります。
DT_REL 再配置テーブルの合計サイズ (単位: バイト)。
DT_REL 再配置エントリのサイズ (単位: バイト)。
プロシージャーのリンクテーブルが参照する再配置エントリの型 (DT_REL または DT_RELA) を示します。1 つのプロシージャーのリンクテーブルでは、すべての再配置は、同じ再配置を使用しなければなりません。プロシージャーのリンクテーブル (プロセッサ固有)を参照してください。この要素が存在する場合、DT_JMPREL 要素も存在する必要があります。
デバッグに使用されます。
1 つまたは複数の再配置エントリが書き込み不可セグメントに対する変更を要求する可能性があり、実行時リンカーはそれに応じて対応できることを示します。この要素の使用は、DF_TEXTREL フラグに置き換えられました。位置独立のコードを参照してください。
プロシージャーのリンクテーブルにのみ関連付けられている再配置エントリのアドレス。プロシージャーのリンクテーブル (プロセッサ固有)を参照してください。これらの再配置エントリを分離しておくと、遅延結合が有効なオブジェクトの読み込み時に、実行時リンカーはこれらのエントリを無視できます。この要素が存在する場合、DT_PLTRELSZ 要素と DT_PLTREL 要素も存在する必要があります。
直後の DT_ 要素に適用されるさまざまな状態フラグ。表 50 を参照してください。
プログラムに制御を渡す前に、このオブジェクトについてのすべての再配置を処理するよう実行時リンカーに指示します。環境またはdlopen(3C)で指定された場合、このエントリは遅延結合の使用指令よりも優先されます。この要素の使用は、DF_BIND_NOW フラグに置き換えられました。詳細は、再配置が実行されるときを参照してください。
初期設定関数へのポインタの配列のアドレス。この要素が存在する場合、DT_INIT_ARRAYSZ 要素も存在する必要があります。初期設定および終了セクションを参照してください。
終了関数へのポインタの配列のアドレス。この要素が存在する場合、DT_FINI_ARRAYSZ 要素も存在する必要があります。初期設定および終了セクションを参照してください。
DT_INIT_ARRAY 配列の合計サイズ (単位: バイト)。
DT_FINI_ARRAY 配列の合計サイズ (単位: バイト)。
ヌル文字で終わっているライブラリ検索パス文字列の DT_STRTAB 文字列テーブルオフセット。実行時リンカーが検索するディレクトリを参照してください。
このオブジェクトに特有のフラグ値。表 48 を参照してください。
DT_ENCODING と等しいかそれより大きく、かつ DT_LOOS と等しいかそれより小さい動的タグ値は、d_un union の解釈の規則に従います。
初期設定前関数へのポインタの配列のアドレス。この要素が存在する場合、DT_PREINIT_ARRAYSZ 要素も存在する必要があります。この配列は、実行可能ファイル内でのみ処理されます。共有オブジェクト内に含まれている場合、この配列は無視されます。初期設定および終了セクションを参照してください。
DT_PREINIT_ARRAY 配列の合計サイズ (単位: バイト)。
値が正である動的配列タグの数。
この範囲の値 (両端の値を含む) は、オペレーティングシステム固有のセマンティクスのために予約されています。このような値はすべて、d_un union の解釈の規則に従います。
ヌル文字で終わっている文字列の DT_STRTAB 文字列テーブルオフセットで、シンボル別の補助フィルティーを 1 つ以上指定します。補助フィルタの生成を参照してください。
実行時リンカーによる使用のために予約されています。
ヌル文字で終わっている文字列の DT_STRTAB 文字列テーブルオフセットで、シンボル別の標準フィルティーを 1 つ以上指定します。標準フィルタの生成を参照してください。
機能セクションのアドレス。機能セクションを参照してください。
シンボルテーブルのアドレス。局所関数シンボルが含まれ、DT_SYMTAB から提供されるシンボルを拡張します。これらのシンボルは常に、DT_SYMTAB から提供されるシンボルの直前に並んで配置されます。シンボルテーブルセクションを参照してください。
DT_SUNW_SYMTAB と DT_SYMTAB から提供されるシンボルテーブルを結合したサイズ。
DT_SUNW_ENCODING と等しいかそれより大きく、かつ DT_HIOS と等しいかそれより小さい動的タグ値は、d_un union の解釈の規則に従います。
DT_SUNW_SYMSORT および DT_SUNW_TLSSORT シンボルソートエントリのサイズ (単位: バイト)。
シンボルテーブルインデックスの配列のアドレス。DT_SUNW_SYMTAB が参照するシンボルテーブル内の関数シンボルと変数シンボルに、ソートキーに基づいてアクセスできます。シンボルソートセクションを参照してください。
DT_SUNW_SYMSORT 配列の合計サイズ (単位: バイト)。
シンボルテーブルインデックスの配列のアドレス。DT_SUNW_SYMTAB が参照するシンボルテーブル内のスレッド固有シンボルに、ソートキーに基づいてアクセスできます。シンボルソートセクションを参照してください。
DT_SUNW_TLSSORT 配列の合計サイズ (単位: バイト)。
シンボルをその機能要件に関連付けることができるシンボルテーブルインデックスの配列のアドレス。機能セクションを参照してください。
動的文字列テーブルの末尾に予約されている未使用領域の合計サイズ (単位: バイト)。オブジェクト内に DT_SUNW_STRPAD が存在しない場合は、予約されている領域はありません。
機能ファミリインデックスの配列のアドレス。インデックスの各ファミリは 0 エントリで終了します。
このオブジェクトを生成したリンカーのマシンアーキテクチャー。DT_SUNW_LDMACH では、ELF ヘッダーの e_machine フィールドに使用される EM_ 整数値と同じ値が使用されます。ELF ヘッダーを参照してください。DT_SUNW_LDMACH は、オブジェクトを構築するリンカーのクラス (32 ビットまたは 64 ビット) とプラットフォームを識別するために使用されます。この情報は、実行時リンカーでは使用されず、ドキュメントのためだけに使用されます。
DT_SUNW_CAPCHAIN エントリのサイズ (バイト単位)。
合計サイズ (バイト単位)、または DT_SUNW_CAPCHAIN 連鎖。
ヌル文字で終わっている親オブジェクト名の DT_STRTAB 文字列テーブルオフセット。提供される名前は、パスコンポーネントがないファイル名のみを含む basename です。親オブジェクトを参照してください。
このオブジェクトに固有のアドレス空間配置のランダム化 (ASLR) フラグの値。sxadm(1M)および 表 51 を参照してください。
オブジェクトを構築したときにリンカーの –z relax オプションで指定された妥当性チェック緩和オプション。表 52 を参照してください。
このオブジェクトに固有の非実行可能ヒープ (NXHEAP) フラグの値。sxadm(1M) および表 53 を参照してください。
このオブジェクトに固有の非実行可能スタック (NXSTACK) フラグの値。sxadm(1M) および表 54 を参照してください。
シンボル情報テーブルのアドレス。この要素が存在する場合、DT_SYMINENT 要素と DT_SYMINSZ 要素も存在する必要があります。Syminfo テーブルセクションを参照してください。
DT_SYMINFO 情報エントリのサイズ (単位: バイト)。
DT_SYMINFO テーブルのサイズ (単位: バイト)。
バージョン定義テーブルのアドレス。このテーブル内の要素には、文字列テーブル DT_STRTAB のインデックスが含まれます。この要素が存在する場合、DT_VERDEFNUM 要素も存在する必要があります。バージョン定義セクションを参照してください。
DT_VERDEF テーブルのエントリ数。
バージョン依存性テーブルのアドレス。このテーブル内の要素には、文字列テーブル DT_STRTAB のインデックスが含まれます。この要素が存在する場合、DT_VERNEEDNUM 要素も存在する必要があります。バージョン依存関係セクションを参照してください。
DT_VERNEEDNUM テーブルのエントリ数。
すべての Elf32_Rela または Elf64_Rela 再配置の連結から生成される RELATIVE 再配置回数を示します。再配置セクションの結合を参照してください。
すべての Elf32_Rel 再配置の連結から生成される RELATIVE 再配置回数を示します。再配置セクションの結合を参照してください。
ヌル文字で終わっている DT_STRTAB 文字列テーブルオフセットで、1 つ以上の補助フィルティーを指定します。補助フィルタの生成を参照してください。
ヌル文字で終わっている DT_STRTAB 文字列テーブルオフセットで、1 つ以上の標準「フィルティー」を指定します。標準フィルタの生成を参照してください。
オブジェクトの選択されたセクションの簡単なチェックサム。gelf_checksum(3ELF)のマニュアルページを参照してください。
DT_MOVETAB 移動エントリのサイズ (単位: バイト)。
DT_MOVETAB テーブルの合計サイズ (単位: バイト)。
移動テーブルのアドレス。この要素が存在する場合、DT_MOVEENT 要素と DT_MOVESZ 要素も存在する必要があります。移動セクションを参照してください。
ヌル文字で終わっている DT_STRTAB 文字列テーブルオフセットで、構成ファイルを定義します。構成ファイルは、実行可能ファイルでのみ有効であり、通常このオブジェクトに固有のファイルです。デフォルトの検索パスの構成を参照してください。
ヌル文字で終わっている DT_STRTAB 文字列テーブルオフセットで、1 つ以上の監査ライブラリを定義します。実行時リンカーの監査インタフェースを参照してください。
ヌル文字で終わっている DT_STRTAB 文字列テーブルオフセットで、1 つ以上の監査ライブラリを定義します。実行時リンカーの監査インタフェースを参照してください。
このオブジェクトに特有のフラグ値。表 49 を参照してください。
この範囲の値 (両端の値を含む) は、動的構造体の d_un.d_val フィールドによって使用されます。
この範囲の値 (両端の値を含む) は、動的構造体の d_un.d_ptr フィールドによって使用されます。ELF オブジェクトが作成後に調整された場合、これらのエントリも更新する必要があります。
DT_SYMTAB シンボルテーブル内の STT_SPARC_REGISTER シンボルのインデックス。シンボルテーブルの各 STT_SPARC_REGISTER シンボルには、1 つの動的エントリが存在します。レジスタシンボルを参照してください。
この範囲の値は、プロセッサ固有のセマンティクスのために予約されています。
動的配列の最後にある DT_NULL 要素と、DT_NEEDED と DT_POSFLAG_1 要素の相対的な順序を除くと、エントリはどの順序で現れてもかまいません。表に示されていないタグ値は予約されています。
|
オブジェクトに $ORIGIN 処理が必要であることを示します。関連する依存関係の配置を参照してください。
オブジェクトが、リンク編集中に適用されたシンボリック結合を含むことを示します。-B symbolic オプションの使用を参照してください。
1 つまたは複数の再配置エントリが書き込み不可セグメントに対する変更を要求する可能性があり、実行時リンカーはそれに応じて対応できることを示します。位置独立のコードを参照してください。
プログラムに制御を渡す前に、このオブジェクトについてのすべての再配置を処理するよう実行時リンカーに指示します。環境またはdlopen(3C)で指定された場合、このエントリは遅延結合の使用指令よりも優先されます。詳細は、再配置が実行されるときを参照してください。
静的なスレッド固有ストレージスキームを使用するコードがオブジェクトに含まれていることを示します。静的なスレッド固有ストレージは、dlopen(3C)または遅延ロードを使用して動的にロードされるオブジェクトでは使用すべきではありません。
|
プログラムに制御を渡す前に、このオブジェクトについてのすべての再配置を処理するよう実行時リンカーに指示します。環境またはdlopen(3C)で指定された場合、このフラグは遅延結合の使用指令よりも優先されます。詳細は、再配置が実行されるときを参照してください。
オブジェクトがグループのメンバーであることを示します。このフラグは、リンカーの –B group オプションを使用してオブジェクトに記録されます。オブジェクト階層を参照してください。
オブジェクトがプロセスから削除できないことを示します。オブジェクトは、dlopen(3C)で直接または依存関係としてプロセスにロードされた場合、dlclose(3C)でアンロードできません。このフラグは、リンカーの –z nodelete オプションを使用してオブジェクトに記録されます。
フィルタに対してのみ意味があります。関連付けられているすべてのフィルティーがただちに処理されることを示します。このフラグは、リンカーの –z loadfltr オプションを使用してオブジェクトに記録されます。フィルティーの処理を参照してください。
ロードされたほかのオブジェクトよりも先に、このオブジェクトの初期化セクションが実行されることを示します。このフラグは特殊なシステムライブラリでのみ使用するもので、リンカーの –z initfirst オプションを使用してオブジェクトに記録されます。
dlopen(3C)を使ってオブジェクトを実行中のプロセスに追加できないことを示します。このフラグは、リンカーの –z nodlopen オプションを使用してオブジェクトに記録されます。
オブジェクトに $ORIGIN 処理が必要であることを示します。関連する依存関係の配置を参照してください。
オブジェクトが直接結合情報を使用することを示します。Chapter 6, 直接結合を参照してください。
オブジェクトシンボルテーブルの割り込みが、プライマリロードオブジェクト (通常は実行可能ファイル) 以外のすべてのシンボルの前で発生します。このフラグは、リンカーの –z interpose オプションを使用して記録されます。実行時割り込みを参照してください。
このオブジェクトの依存関係を検索する際、デフォルトのライブラリ検索パスがすべて無視されることを示します。このフラグは、リンカーの –z nodefaultlib オプションを使用してオブジェクトに記録されます。実行時リンカーが検索するディレクトリを参照してください。
このオブジェクトがdldump(3C)によってダンプされないことを示します。このオプションの候補には、再配置を保持しないオブジェクトが含まれ、これらのオブジェクトは、crle(1)を使用して代替オブジェクトを生成する際に含めることができます。このフラグは、リンカーの –z nodump オプションを使用してオブジェクトに記録されます。
このオブジェクトが、crle(1)によって生成された代替構成オブジェクトであることを示します。このフラグにより実行時リンカーがトリガーされ、構成ファイル $ORIGIN/ld.config. app-name が検索されます。
フィルティーに対してのみ意味があります。以降の「フィルティー」に対するフィルタ検索は行われません。このフラグは、リンカーの –z endfiltee オプションを使用してオブジェクトに記録されます。機能のフィルティー検索の縮小および 命令セットのフィルティー検索の縮小を参照してください。
このオブジェクトにディスプレイスメント再配置が適用されたことを示します。再配置が適用されるとレコードは破棄されるため、オブジェクト内のディスプレイスメント再配置レコードはもはや存在しません。ディスプレイスメント再配置を参照してください。
このオブジェクトのディスプレイスメント再配置が保留されていることを示します。ディスプレイスメント再配置はオブジェクト内部で終了するため、再配置は実行時に完了できます。ディスプレイスメント再配置を参照してください。
このオブジェクトに、直接結合できないシンボルが含まれることを示します。SYMBOL_SCOPE および SYMBOL_VERSION ディレクティブを参照してください。
カーネルの実行時リンカーによる使用のために予約されています。
カーネルの実行時リンカーによる使用のために予約されています。
カーネルの実行時リンカーによる使用のために予約されています。
このオブジェクトがリンカーによって最初に構築されたあとに編集または変更されたことを示します。このフラグは、オブジェクトが最初に構築されたあとになんらかの変更が加えられたことをデバッガに警告するために使用されます。
カーネルの実行時リンカーによる使用のために予約されています。
プライマリロードオブジェクト (通常は実行可能ファイル) 以外のすべてのシンボルの前に割り込むべき個々のシンボルが、オブジェクトに含まれることを示します。このフラグは、mapfile と INTERPOSE キーワードを使ってオブジェクトが構築されるときに記録されます。SYMBOL_SCOPE および SYMBOL_VERSION ディレクティブを参照してください。
動的実行可能ファイルで大域監査が必要であることを示します。大域監査の記録を参照してください。
このオブジェクトに singleton シンボルが定義されている、またはオブジェクトがこのシンボルを参照していることを示します。SYMBOL_SCOPE および SYMBOL_VERSION ディレクティブを参照してください。
オブジェクトがスタブであることを示します。スタブオブジェクトを参照してください。
オブジェクトがインタプリタを指定する位置独立実行可能ファイル (共有オブジェクトの特殊なケース) であることを示します。リンカーの –z type オプションを参照してください。
オブジェクトが弱い標準フィルタであることを示します。実行時の動作は通常の標準フィルタと同じです。リンク編集時に、未使用の依存関係の処理がアクティブな場合、DT_FILTER によって指定されたターゲットフィルティーの同じシンボルを優先するために、弱いフィルタのシンボルを無視できます。弱いフィルタの生成を参照してください。
|
後続の DT_NEEDED エントリが遅延ロード対象のオブジェクトであることを示します。このフラグは、リンカーの –z lazyload オプションを使用した結果としてオブジェクトに記録されます。動的依存関係の遅延読み込みを参照してください。
後続の DT_NEEDED エントリがグループとしてロードされるオブジェクトであることを示します。このフラグは、リンカーの –z groupperm オプションを使用した結果としてオブジェクトに記録されます。グループの分離を参照してください。
次の DT_NEEDED エントリを遅延依存関係として識別します。このフラグは、リンカーの –z deferred オプションを使用した結果としてオブジェクトに記録されます。dlopen() の代替手段の提供を参照してください。
次の DT_SUNW_FILTER エントリを既存の処理の依存関係から満たすことができることを識別します。内部使用。
|
DV_SUNW_ASLR_DISABLE および DV_SUNW_ASLR_ENABLE は、リンカーの –z aslr オプションを使用してオブジェクトに記録されます。
|
DF_SUNW_RELAX_ フラグは、リンカーの –z relax オプションを使用した結果としてオブジェクトに記録されます。
|
DV_SUNW_NXHEAP_DISABLE および DV_SUNW_NXHEAP_ENABLE は、リンカーの –z nxheap オプションを使用してオブジェクトに記録されます。
|
DV_SUNW_NXSTACK_DISABLE および DV_SUNW_NXSTACK_ENABLE は、リンカーの –z nxstack オプションを使用してオブジェクトに記録されます。