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.  プログラムの読み込みと動的リンク

プログラムヘッダー

ベースアドレス

セグメントへのアクセス権

セグメントの内容

プログラムの読み込み (プロセッサ固有)

プログラムインタプリタ

実行時リンカー

動的セクション

大域オフセットテーブル (プロセッサ固有)

プロシージャーのリンクテーブル (プロセッサ固有)

32 ビット SPARC: プロシージャーのリンクテーブル

64 ビット SPARC: プロシージャーのリンクテーブル

32 ビット x86: プロシージャーのリンクテーブル

x64: プロシージャーのリンクテーブル

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

パート V 付録

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

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

索引

動的セクション

オブジェクトファイルが動的リンクに関係している場合、このオブジェクトファイルのプログラムヘッダーテーブルには、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_tagd_un の解釈に影響します。

d_val

このオブジェクトは、さまざまに解釈される整数値を表します。

d_ptr

このオブジェクトは、プログラムの仮想アドレスを表します。ファイルの仮想アドレスは、実行時にメモリーの仮想アドレスに一致しないことがあります。実行時リンカーは、動的構造体に存在するアドレスを解釈するとき、元のファイル値とメモリーのベースアドレスに基づいて実際のアドレスを計算します。整合性のため、ファイルには動的構造体内のアドレスを「補正」するための再配置エントリは存在しません。

一般的に、各動的タグ値によって d_un union の解釈が決まります。この規則は、他社製ツールによる動的タグの解釈をよりシンプルにします。偶数の値を持つタグは、d_ptr を使用する動的セクションのエントリを示します。奇数の値を持つタグは、d_val を使用する動的セクションのエントリ、または d_ptrd_val のどちらも使用しない動的セクションのエントリを示します。互換性のために次のような特別な範囲の値を持つタグは、これらの規則に従いません。他社製ツールは、これらの例外的な範囲に項目ごとに明示的に対応する必要があります。

次の表は、実行可能オブジェクトファイルと共有オブジェクトファイルのタグ要求についてまとめています。タグに「必須」という印が付いている場合、動的リンク配列にはその型のエントリが存在しなければなりません。また、「任意」は、タグのエントリが現れてもよいですが必須ではないことを意味します。

表 13-8 ELF 動的配列タグ

名前
d_un
実行可能ファイル
共有オブジェクトファイル
DT_NULL
0
無視される
必須
必須
DT_NEEDED
1
d_val
任意
任意
DT_PLTRELSZ
2
d_val
任意
任意
DT_PLTGOT
3
d_ptr
任意
任意
DT_HASH
4
d_ptr
必須
必須
DT_STRTAB
5
d_ptr
必須
必須
DT_SYMTAB
6
d_ptr
必須
必須
DT_RELA
7
d_ptr
必須
任意
DT_RELASZ
8
d_val
必須
任意
DT_RELAENT
9
d_val
必須
任意
DT_STRSZ
10
d_val
必須
必須
DT_SYMENT
11
d_val
必須
必須
DT_INIT
12
d_ptr
任意
任意
DT_FINI
13
d_ptr
任意
任意
DT_SONAME
14
d_val
無視される
任意
DT_RPATH
15
d_val
任意
任意
DT_SYMBOLIC
16
無視される
無視される
任意
DT_REL
17
d_ptr
必須
任意
DT_RELSZ
18
d_val
必須
任意
DT_RELENT
19
d_val
必須
任意
DT_PLTREL
20
d_val
任意
任意
DT_DEBUG
21
d_ptr
任意
無視される
DT_TEXTREL
22
無視される
任意
任意
DT_JMPREL
23
d_ptr
任意
任意
DT_BIND_NOW
24
無視される
任意
任意
DT_INIT_ARRAY
25
d_ptr
任意
任意
DT_FINI_ARRAY
26
d_ptr
任意
任意
DT_INIT_ARRAYSZ
27
d_val
任意
任意
DT_FINI_ARRAYSZ
28
d_val
任意
任意
DT_RUNPATH
29
d_val
任意
任意
DT_FLAGS
30
d_val
任意
任意
DT_ENCODING
32
指定なし
指定なし
指定なし
DT_PREINIT_ARRAY
32
d_ptr
任意
無視される
DT_PREINIT_ARRAYSZ
33
d_val
任意
無視される
DT_MAXPOSTAGS
34
指定なし
指定なし
指定なし
DT_LOOS
0x6000000d
指定なし
指定なし
指定なし
DT_SUNW_AUXILIARY
0x6000000d
d_ptr
指定なし
任意
DT_SUNW_RTLDINF
0x6000000e
d_ptr
任意
任意
DT_SUNW_FILTER
0x6000000e
d_ptr
指定なし
任意
DT_SUNW_CAP
0x60000010
d_ptr
任意
任意
DT_SUNW_SYMTAB
0x60000011
d_ptr
任意
任意
DT_SUNW_SYMSZ
0x60000012
d_val
任意
任意
DT_SUNW_ENCODING
0x60000013
指定なし
指定なし
指定なし
DT_SUNW_SORTENT
0x60000013
d_val
任意
任意
DT_SUNW_SYMSORT
0x60000014
d_ptr
任意
任意
DT_SUNW_SYMSORTSZ
0x60000015
d_val
任意
任意
DT_SUNW_TLSSORT
0x60000016
d_ptr
任意
任意
DT_SUNW_TLSSORTSZ
0x60000017
d_val
任意
任意
DT_SUNW_CAPINFO
0x60000018
d_ptr
任意
任意
DT_SUNW_STRPAD
0x60000019
d_val
任意
任意
DT_SUNW_CAPCHAIN
0x6000001a
d_ptr
任意
任意
DT_SUNW_LDMACH
0x6000001b
d_val
任意
任意
DT_SUNW_CAPCHAINENT
0x6000001d
d_val
任意
任意
DT_SUNW_CAPCHAINSZ
0x6000001f
d_val
任意
任意
DT_HIOS
0x6ffff000
指定なし
指定なし
指定なし
DT_VALRNGLO
0x6ffffd00
指定なし
指定なし
指定なし
DT_CHECKSUM
0x6ffffdf8
d_val
任意
任意
DT_PLTPADSZ
0x6ffffdf9
d_val
任意
任意
DT_MOVEENT
0x6ffffdfa
d_val
任意
任意
DT_MOVESZ
0x6ffffdfb
d_val
任意
任意
DT_POSFLAG_1
0x6ffffdfd
d_val
任意
任意
DT_SYMINSZ
0x6ffffdfe
d_val
任意
任意
DT_SYMINENT
0x6ffffdff
d_val
任意
任意
DT_VALRNGHI
0x6ffffdff
指定なし
指定なし
指定なし
DT_ADDRRNGLO
0x6ffffe00
指定なし
指定なし
指定なし
DT_CONFIG
0x6ffffefa
d_ptr
任意
任意
DT_DEPAUDIT
0x6ffffefb
d_ptr
任意
任意
DT_AUDIT
0x6ffffefc
d_ptr
任意
任意
DT_PLTPAD
0x6ffffefd
d_ptr
任意
任意
DT_MOVETAB
0x6ffffefe
d_ptr
任意
任意
DT_SYMINFO
0x6ffffeff
d_ptr
任意
任意
DT_ADDRRNGHI
0x6ffffeff
指定なし
指定なし
指定なし
DT_RELACOUNT
0x6ffffff9
d_val
任意
任意
DT_RELCOUNT
0x6ffffffa
d_val
任意
任意
DT_FLAGS_1
0x6ffffffb
d_val
任意
任意
DT_VERDEF
0x6ffffffc
d_ptr
任意
任意
DT_VERDEFNUM
0x6ffffffd
d_val
任意
任意
DT_VERNEED
0x6ffffffe
d_ptr
任意
任意
DT_VERNEEDNUM
0x6fffffff
d_val
任意
任意
DT_LOPROC
0x70000000
指定なし
指定なし
指定なし
DT_SPARC_REGISTER
0x70000001
d_val
任意
任意
DT_AUXILIARY
0x7ffffffd
d_val
指定なし
任意
DT_USED
0x7ffffffe
d_val
任意
任意
DT_FILTER
0x7fffffff
d_val
指定なし
任意
DT_HIPROC
0x7fffffff
指定なし
指定なし
指定なし
DT_NULL

_DYNAMIC 配列の終わりを示します。

DT_NEEDED

ヌル文字で終わっている文字列の DT_STRTAB 文字列テーブルオフセットであり、必要な依存性の名前を示します。動的配列には、この型の複数のエントリが存在できます。これらのエントリの相対順序は意味がありますが、ほかの型のエントリに対するこれらのエントリの相対順序には意味がありません。「共有オブジェクトの依存性」を参照してください。

DT_PLTRELSZ

プロシージャーのリンクテーブルに関連付けられている再配置エントリの合計サイズ (単位: バイト)。「プロシージャーのリンクテーブル (プロセッサ固有)」を参照してください。

DT_PLTGOT

プロシージャーのリンクテーブルまたは大域オフセットテーブルに関連付けられるアドレス。「プロシージャーのリンクテーブル (プロセッサ固有)」「大域オフセットテーブル (プロセッサ固有)」を参照してください。

DT_HASH

シンボルハッシュテーブルのアドレス。このテーブルは、DT_SYMTAB 要素で示されるシンボルテーブルを参照します。「ハッシュテーブルセクション」を参照してください。

DT_STRTAB

文字列テーブルのアドレス。文字列テーブルには、実行時リンカーが必要とするシンボル名、依存性名、およびほかの文字列が存在します。「文字列テーブルセクション」を参照してください。

DT_SYMTAB

シンボルテーブルのアドレス。「シンボルテーブルセクション」を参照してください。

DT_RELA

再配置テーブルのアドレス。「再配置セクション」を参照してください。

オブジェクトファイルには、複数の再配置セクションを指定できます。リンカーは、実行可能オブジェクトファイルまたは共有オブジェクトファイルの再配置テーブルを作成するとき、これらのセクションを連結して単一のテーブルを作成します。これらの各セクションはオブジェクトファイル内で独立している場合がありますが、実行時リンカーは単一のテーブルとして扱います。実行時リンカーは、実行可能ファイルのプロセスイメージを作成したり、またはプロセスイメージに共有オブジェクトを付加したりするとき、再配置テーブルを読み取り、関連付けられている動作を実行します。

この要素が存在する場合、DT_RELASZ 要素と DT_RELAENT 要素も存在する必要があります。再配置がファイルに対して必須の場合、DT_RELA または DT_REL が使用可能です。

DT_RELASZ

DT_RELA 再配置テーブルの合計サイズ (単位: バイト)。

DT_RELAENT

DT_RELA 再配置エントリのサイズ (単位: バイト)。

DT_STRSZ

DT_STRTAB 文字列テーブルの合計サイズ (単位: バイト)。

DT_SYMENT

DT_SYMTAB シンボルエントリのサイズ (単位: バイト)。

DT_INIT

初期化関数のアドレス。「初期設定および終了セクション」を参照してください。

DT_FINI

終了関数のアドレス。「初期設定および終了セクション」を参照してください。

DT_SONAME

ヌル文字で終わっている文字列の DT_STRTAB 文字列テーブルオフセットで、共有オブジェクトの名前を示します。「共有オブジェクト名の記録」を参照してください。

DT_RPATH

ヌル文字で終わっているライブラリ検索パス文字列の DT_STRTAB 文字列テーブルオフセット。この要素の使用は、DT_RUNPATH に置き換えられました。「実行時リンカーが検索するディレクトリ」を参照してください。

DT_SYMBOLIC

オブジェクトが、リンク編集中に適用されたシンボリック結合を含むことを示します。この要素の使用は、DF_SYMBOLIC フラグに置き換えられました。-B symbolic オプションの使用」を参照してください。

DT_REL

DT_RELA に似ていますが、テーブルに暗黙の加数が存在する点が異なります。この要素が存在する場合、DT_RELSZ 要素と DT_RELENT 要素も存在する必要があります。

DT_RELSZ

DT_REL 再配置テーブルの合計サイズ (単位: バイト)。

DT_RELENT

DT_REL 再配置エントリのサイズ (単位: バイト)。

DT_PLTREL

プロシージャーのリンクテーブルが参照する再配置エントリの型 (DT_REL または DT_RELA) を示します。1 つのプロシージャーのリンクテーブルでは、すべての再配置は、同じ再配置を使用しなければなりません。「プロシージャーのリンクテーブル (プロセッサ固有)」を参照してください。この要素が存在する場合、DT_JMPREL 要素も存在する必要があります。

DT_DEBUG

デバッグに使用されます。

DT_TEXTREL

1 つまたは複数の再配置エントリが書き込み不可セグメントに対する変更を要求する可能性があり、実行時リンカーはそれに応じて対応できることを示します。この要素の使用は、DF_TEXTREL フラグに置き換えられました。「位置独立のコード」を参照してください。

DT_JMPREL

プロシージャーのリンクテーブルにのみ関連付けられている再配置エントリのアドレス。「プロシージャーのリンクテーブル (プロセッサ固有)」を参照してください。これらの再配置エントリを分離しておくと、遅延結合が有効なオブジェクトの読み込み時に、実行時リンカーはこれらのエントリを無視できます。この要素が存在する場合、DT_PLTRELSZ 要素と DT_PLTREL 要素も存在する必要があります。

DT_POSFLAG_1

直後の DT_ 要素に適用されるさまざまな状態フラグ。表 13-11 を参照してください。

DT_BIND_NOW

プログラムに制御を渡す前に、このオブジェクトについてのすべての再配置を処理するよう実行時リンカーに指示します。環境または dlopen(3C) で指定された場合、このエントリは遅延結合の使用指令よりも優先されます。この要素の使用は、DF_BIND_NOW フラグに置き換えられました。詳細は、「再配置が実行されるとき」を参照してください。

DT_INIT_ARRAY

初期設定関数へのポインタの配列のアドレス。この要素が存在する場合、DT_INIT_ARRAYSZ 要素も存在する必要があります。「初期設定および終了セクション」を参照してください。

DT_FINI_ARRAY

終了関数へのポインタの配列のアドレス。この要素が存在する場合、DT_FINI_ARRAYSZ 要素も存在する必要があります。「初期設定および終了セクション」を参照してください。

DT_INIT_ARRAYSZ

DT_INIT_ARRAY 配列の合計サイズ (単位: バイト)。

DT_FINI_ARRAYSZ

DT_FINI_ARRAY 配列の合計サイズ (単位: バイト)。

DT_RUNPATH

ヌル文字で終わっているライブラリ検索パス文字列の DT_STRTAB 文字列テーブルオフセット。「実行時リンカーが検索するディレクトリ」を参照してください。

DT_FLAGS

このオブジェクトに特有のフラグ値。表 13-9 を参照してください。

DT_ENCODING

DT_ENCODING と等しいかそれより大きく、かつ DT_LOOS と等しいかそれより小さい動的タグ値は、 d_un union の解釈の規則に従います。

DT_PREINIT_ARRAY

「初期設定前」関数へのポインタの配列のアドレス。この要素が存在する場合、DT_PREINIT_ARRAYSZ 要素も存在する必要があります。この配列は、実行可能ファイル内でのみ処理されます。共有オブジェクト内に含まれている場合、この配列は無視されます。「初期設定および終了セクション」を参照してください。

DT_PREINIT_ARRAYSZ

DT_PREINIT_ARRAY 配列の合計サイズ (単位: バイト)。

DT_MAXPOSTAGS

値が正である動的配列タグの数。

DT_LOOS - DT_HIOS

この範囲の値 (両端の値を含む) は、オペレーティングシステム固有のセマンティクスのために予約されています。このような値はすべて、d_un union の解釈の規則に従います。

DT_SUNW_AUXILIARY

ヌル文字で終わっている文字列の DT_STRTAB 文字列テーブルオフセットで、シンボル別の補助フィルティーを 1 つ以上指定します。「補助フィルタの生成」を参照してください。

DT_SUNW_RTLDINF

実行時リンカーによる使用のために予約されています。

DT_SUNW_FILTER

ヌル文字で終わっている文字列の DT_STRTAB 文字列テーブルオフセットで、シンボル別の標準フィルティーを 1 つ以上指定します。「標準フィルタの生成」を参照してください。

DT_SUNW_CAP

機能セクションのアドレス。「機能セクション」を参照してください。

DT_SUNW_SYMTAB

シンボルテーブルのアドレス。局所関数シンボルが含まれ、DT_SYMTAB から提供されるシンボルを拡張します。これらのシンボルは常に、DT_SYMTAB から提供されるシンボルの直前に並んで配置されます。「シンボルテーブルセクション」を参照してください。

DT_SUNW_SYMSZ

DT_SUNW_SYMTABDT_SYMTAB から提供されるシンボルテーブルを結合したサイズ。

DT_SUNW_ENCODING

DT_SUNW_ENCODING と等しいかそれより大きく、かつ DT_HIOS と等しいかそれより小さい動的タグ値は、d_un union の解釈の規則に従います。

DT_SUNW_SORTENT

DT_SUNW_SYMSORT および DT_SUNW_TLSSORT シンボルソートエントリのサイズ (単位: バイト)。

DT_SUNW_SYMSORT

シンボルテーブルインデックスの配列のアドレス。DT_SUNW_SYMTAB が参照するシンボルテーブル内の関数シンボルと変数シンボルに、ソートキーに基づいてアクセスできます。「シンボルソートセクション」を参照してください。

DT_SUNW_SYMSORTSZ

DT_SUNW_SYMSORT 配列の合計サイズ (単位: バイト)。

DT_SUNW_TLSSORT

シンボルテーブルインデックスの配列のアドレス。DT_SUNW_SYMTAB が参照するシンボルテーブル内のスレッド固有シンボルに、ソートキーに基づいてアクセスできます。「シンボルソートセクション」を参照してください。

DT_SUNW_TLSSORTSZ

DT_SUNW_TLSSORT 配列の合計サイズ (単位: バイト)。

DT_SUNW_CAPINFO

シンボルをその機能要件に関連付けることができるシンボルテーブルインデックスの配列のアドレス。「機能セクション」を参照してください。

DT_SUNW_STRPAD

動的文字列テーブルの末尾に予約されている未使用領域の合計サイズ (単位: バイト)。オブジェクト内に DT_SUNW_STRPAD が存在しない場合は、予約されている領域はありません。

DT_SUNW_CAPCHAIN

機能ファミリインデックスの配列のアドレス。インデックスの各ファミリは 0 エントリで終了します。

DT_SUNW_LDMACH

このオブジェクトを生成したリンカーのマシンアーキテクチャー。DT_SUNW_LDMACH では、ELF ヘッダーの e_machine フィールドに使用される EM_ 整数値と同じ値が使用されます。「ELF ヘッダー」を参照してください。DT_SUNW_LDMACH は、オブジェクトを構築するリンカーのクラス (32 ビットまたは 64 ビット) とプラットフォームを識別するために使用されます。この情報は、実行時リンカーでは使用されず、ドキュメントのためだけに使用されます。

DT_SUNW_CAPCHAINENT

DT_SUNW_CAPCHAIN エントリのサイズ (バイト単位)。

DT_SUNW_CAPCHAINSZ

合計サイズ (バイト単位)、または DT_SUNW_CAPCHAIN 連鎖。

DT_SYMINFO

シンボル情報テーブルのアドレス。この要素が存在する場合、DT_SYMINENT 要素と DT_SYMINSZ 要素も存在する必要があります。「Syminfo テーブルセクション」を参照してください。

DT_SYMINENT

DT_SYMINFO 情報エントリのサイズ (単位: バイト)。

DT_SYMINSZ

DT_SYMINFO テーブルのサイズ (単位: バイト)。

DT_VERDEF

バージョン定義テーブルのアドレス。このテーブル内の要素には、文字列テーブル DT_STRTAB のインデックスが含まれます。この要素が存在する場合、DT_VERDEFNUM 要素も存在する必要があります。「バージョン定義セクション」を参照してください。

DT_VERDEFNUM

DT_VERDEF テーブルのエントリ数。

DT_VERNEED

バージョン依存性テーブルのアドレス。このテーブル内の要素には、文字列テーブル DT_STRTAB のインデックスが含まれます。この要素が存在する場合、DT_VERNEEDNUM 要素も存在する必要があります。「バージョン依存セクション」を参照してください。

DT_VERNEEDNUM

DT_VERNEEDNUM テーブルのエントリ数。

DT_RELACOUNT

すべての Elf32_Rela または Elf64_Rela 再配置の連結から生成される RELATIVE 再配置回数を示します。「再配置セクションの結合」を参照してください。

DT_RELCOUNT

すべての Elf32_Rel 再配置の連結から生成される RELATIVE 再配置回数を示します。「再配置セクションの結合」を参照してください。

DT_AUXILIARY

ヌル文字で終わっている DT_STRTAB 文字列テーブルオフセットで、1 つ以上の補助フィルティーを指定します。「補助フィルタの生成」を参照してください。

DT_FILTER

ヌル文字で終わっている DT_STRTAB 文字列テーブルオフセットで、1 つ以上の標準「フィルティー」を指定します。「標準フィルタの生成」を参照してください。

DT_CHECKSUM

オブジェクトの選択されたセクションの簡単なチェックサム。gelf_checksum(3ELF) のマニュアルページを参照してください。

DT_MOVEENT

DT_MOVETAB 移動エントリのサイズ (単位: バイト)。

DT_MOVESZ

DT_MOVETAB テーブルの合計サイズ (単位: バイト)。

DT_MOVETAB

移動テーブルのアドレス。この要素が存在する場合、DT_MOVEENT 要素と DT_MOVESZ 要素も存在する必要があります。「移動セクション」を参照してください。

DT_CONFIG

ヌル文字で終わっている DT_STRTAB 文字列テーブルオフセットで、構成ファイルを定義します。構成ファイルは、実行可能ファイルでのみ有効であり、通常このオブジェクトに固有のファイルです。「デフォルトの検索パスの設定」を参照してください。

DT_DEPAUDIT

ヌル文字で終わっている DT_STRTAB 文字列テーブルオフセットで、1 つ以上の監査ライブラリを定義します。「実行時リンカーの監査インタフェース」を参照してください。

DT_AUDIT

ヌル文字で終わっている DT_STRTAB 文字列テーブルオフセットで、1 つ以上の監査ライブラリを定義します。「実行時リンカーの監査インタフェース」を参照してください。

DT_FLAGS_1

このオブジェクトに特有のフラグ値。表 13-10 を参照してください。

DT_VALRNGLO - DT_VALRNGHI

この範囲の値 (両端の値を含む) は、動的構造体の d_un.d_val フィールドによって使用されます。

DT_ADDRRNGLO - DT_ADDRRNGHI

この範囲の値 (両端の値を含む) は、動的構造体の d_un.d_ptr フィールドによって使用されます。ELF オブジェクトが作成後に調整された場合、これらのエントリも更新する必要があります。

DT_SPARC_REGISTER

DT_SYMTAB シンボルテーブル内の STT_SPARC_REGISTER シンボルのインデックス。シンボルテーブルの各 STT_SPARC_REGISTER シンボルには、1 つの動的エントリが存在します。「レジスタシンボル」を参照してください。

DT_LOPROC - DT_HIPROC

この範囲の値は、プロセッサ固有のセマンティクスのために予約されています。

動的配列の最後にある DT_NULL 要素と、DT_NEEDEDDT_POSFLAG_1 要素の相対的な順序を除くと、エントリはどの順序で現れてもかまいません。表に示されていないタグ値は予約されています。

表 13-9 ELF 動的フラグ DT_FLAGS

名前
意味
DF_ORIGIN
0x1
$ORIGIN 処理が必要です
DF_SYMBOLIC
0x2
シンボリックシンボル解決が必要です
DF_TEXTREL
0x4
テキストの再配置が存在します
DF_BIND_NOW
0x8
非遅延結合が必要です
DF_STATIC_TLS
0x10
オブジェクトは静的なスレッド固有領域方式を使用します
DF_ORIGIN

オブジェクトに $ORIGIN 処理が必要であることを示します。「関連する依存関係の配置」を参照してください。

DF_SYMBOLIC

オブジェクトが、リンク編集中に適用されたシンボリック結合を含むことを示します。-B symbolic オプションの使用」を参照してください。

DF_TEXTREL

1 つまたは複数の再配置エントリが書き込み不可セグメントに対する変更を要求する可能性があり、実行時リンカーはそれに応じて対応できることを示します。「位置独立のコード」を参照してください。

DF_BIND_NOW

プログラムに制御を渡す前に、このオブジェクトについてのすべての再配置を処理するよう実行時リンカーに指示します。環境または dlopen(3C) で指定された場合、このエントリは遅延結合の使用指令よりも優先されます。詳細は、「再配置が実行されるとき」を参照してください。

DF_STATIC_TLS

静的なスレッド固有領域方式を使用するコードがオブジェクトに含まれていることを示します。静的なスレッド固有領域は、dlopen(3C) または遅延読み込みを使用して動的に読み込まれるオブジェクトでは使用すべきではありません。

表 13-10 ELF 動的フラグ DT_FLAGS_1

名前
意味
DF_1_NOW
0x1
完全な再配置処理を行います。
DF_1_GLOBAL
0x2
未使用
DF_1_GROUP
0x4
オブジェクトがグループのメンバーであることを示します。
DF_1_NODELETE
0x8
オブジェクトがプロセスから削除できないことを示します。
DF_1_LOADFLTR
0x10
フィルティーの即時読み込みを保証します。
DF_1_INITFIRST
0x20
オブジェクトの初期化を最初に実行します。
DF_1_NOOPEN
0x40
オブジェクトを dlopen(3C) で使用できません。
DF_1_ORIGIN
0x80
$ORIGIN 処理が必要です。
DF_1_DIRECT
0x100
直接結合が有効です。
DF_1_INTERPOSE
0x400
オブジェクトは割り込み処理です。
DF_1_NODEFLIB
0x800
デフォルトのライブラリ検索パスを無視します。
DF_1_NODUMP
0x1000
オブジェクトを dldump(3C) でダンプできません。
DF_1_CONFALT
0x2000
オブジェクトは代替構成です。
DF_1_ENDFILTEE
0x4000
「フィルティー」がフィルタの検索を終了します。
DF_1_DISPRELDNE
0x8000
ディスプレイスメント再配置が実行されました。
DF_1_DISPRELPND
0x10000
ディスプレイスメント再配置の保留。
DF_1_NODIRECT
0x20000
オブジェクトは間接的な結合を含みます。
DF_1_IGNMULDEF
0x40000
内部使用。
DF_1_NOKSYMS
0x80000
内部使用。
DF_1_NOHDR
0x100000
内部使用。
DF_1_EDITED
0x200000
オブジェクトが最初に構築されてから変更されています。
DF_1_NORELOC
0x400000
内部使用。
DF_1_SYMINTPOSE
0x800000
個別の割り込みシンボルが存在します。
DF_1_GLOBAUDIT
0x1000000
大域監査を確立します。
DF_1_SINGLETON
0x2000000
シングルトンシンボルが存在します。
DF_1_NOW

プログラムに制御を渡す前に、このオブジェクトについてのすべての再配置を処理するよう実行時リンカーに指示します。環境または dlopen(3C) で指定された場合、このフラグは遅延結合の使用指令よりも優先されます。詳細は、「再配置が実行されるとき」を参照してください。

DF_1_GROUP

オブジェクトがグループのメンバーであることを示します。このフラグは、リンカーの -B group オプションを使用してオブジェクトに記録されます。「オブジェクト階層」を参照してください。

DF_1_NODELETE

オブジェクトがプロセスから削除できないことを示します。オブジェクトは、dlopen(3C) で直接または依存性としてプロセスに読み込まれた場合、dlclose(3C) で読み込み解除できません。このフラグは、リンカーの -z nodelete オプションを使用してオブジェクトに記録されます。

DF_1_LOADFLTR

フィルタに対してのみ意味があります。関連付けられているすべてのフィルティーがただちに処理されることを示します。このフラグは、リンカーの -z loadfltr オプションを使用してオブジェクトに記録されます。「「フィルティー」の処理」を参照してください。

DF_1_INITFIRST

読み込まれたほかのオブジェクトよりも先に、このオブジェクトの初期化セクションが実行されることを示します。このフラグは特殊なシステムライブラリでのみ使用するもので、リンカーの -z initfirst オプションを使用してオブジェクトに記録されます。

DF_1_NOOPEN

dlopen(3C) を使ってオブジェクトを実行中のプロセスに追加できないことを示します。このフラグは、リンカーの -z nodlopen オプションを使用してオブジェクトに記録されます。

DF_1_ORIGIN

オブジェクトに $ORIGIN 処理が必要であることを示します。「関連する依存関係の配置」を参照してください。

DF_1_DIRECT

オブジェクトが直接結合情報を使用することを示します。第 9 章直接結合を参照してください。

DF_1_INTERPOSE

オブジェクトシンボルテーブルの割り込みが、一次読み込みオブジェクト (通常は実行可能ファイル) 以外のすべてのシンボルの前で発生します。このフラグは、リンカーの -z interpose オプションを使用して記録されます。「実行時割り込み」を参照してください。

DF_1_NODEFLIB

このオブジェクトの依存関係を検索する際、デフォルトのライブラリ検索パスがすべて無視されることを示します。このフラグは、リンカーの -z nodefaultlib オプションを使用してオブジェクトに記録されます。「実行時リンカーが検索するディレクトリ」を参照してください。

DF_1_NODUMP

このオブジェクトが dldump(3C) によってダンプされないことを示します。このオプションの候補には、再配置を保持しないオブジェクトが含まれ、これらのオブジェクトは、crle(1) を使用して代替オブジェクトを生成する際に含めることができます。このフラグは、リンカーの -z nodump オプションを使用してオブジェクトに記録されます。

DF_1_CONFALT

このオブジェクトが、crle(1) によって生成された代替構成オブジェクトであることを示します。このフラグにより実行時リンカーがトリガーされ、構成ファイル $ORIGIN/ld.config. app-name が検索されます。

DF_1_ENDFILTEE

「フィルティー」に対してのみ意味があります。以降の「フィルティー」に対するフィルタ検索は行われません。このフラグは、リンカーの -z endfiltee オプションを使用してオブジェクトに記録されます。「「フィルティー」検索の縮小」を参照してください。

DF_1_DISPRELDNE

このオブジェクトにディスプレイスメント再配置が適用されたことを示します。再配置が適用されるとレコードは破棄されるため、オブジェクト内のディスプレイスメント再配置レコードはもはや存在しません。「ディスプレイスメント再配置」を参照してください。

DF_1_DISPRELPND

このオブジェクトのディスプレイスメント再配置が保留されていることを示します。ディスプレイスメント再配置はオブジェクト内部で終了するため、再配置は実行時に完了できます。「ディスプレイスメント再配置」を参照してください。

DF_1_NODIRECT

このオブジェクトに、直接結合できないシンボルが含まれることを示します。「SYMBOL_SCOPE/SYMBOL_VERSION 指令」を参照してください。

DF_1_IGNMULDEF

カーネルの実行時リンカーによる使用のために予約されています。

DF_1_NOKSYMS

カーネルの実行時リンカーによる使用のために予約されています。

DF_1_NOHDR

カーネルの実行時リンカーによる使用のために予約されています。

DF_1_EDITED

このオブジェクトがリンカーによって最初に構築されたあとに編集または変更されたことを示します。このフラグは、オブジェクトが最初に構築されたあとになんらかの変更が加えられたことをデバッガに警告するために使用されます。

DF_1_NORELOC

カーネルの実行時リンカーによる使用のために予約されています。

DF_1_SYMINTPOSE

一次読み込みオブジェクト (通常は実行可能ファイル) 以外のすべてのシンボルの前に割り込むべき個々のシンボルが、オブジェクトに含まれることを示します。このフラグは、mapfileINTERPOSE キーワードを使ってオブジェクトが構築されるときに記録されます。「SYMBOL_SCOPE/SYMBOL_VERSION 指令」を参照してください。

DF_1_GLOBAUDIT

動的実行可能ファイルで大域監査が必要であることを示します。「大域監査の記録」を参照してください。

DF_1_SINGLETON

このオブジェクトに singleton シンボルが定義されている、またはオブジェクトがこのシンボルを参照していることを示します。「SYMBOL_SCOPE/SYMBOL_VERSION 指令」を参照してください。

表 13-11 ELF 動的位置フラグ DT_POSFLAG_1

名前
意味
DF_P1_LAZYLOAD
0x1
遅延読み込みされた依存関係を示します。
DF_P1_GROUPPERM
0x2
グループの依存関係を示します。
DF_P1_LAZYLOAD

後続の DT_NEEDED エントリが遅延読み込み対象のオブジェクトであることを示します。このフラグは、リンカーの -z lazyload オプションを使用してオブジェクトに記録されます。「動的依存関係の遅延読み込み」を参照してください。

DF_P1_GROUPPERM

後続の DT_NEEDED エントリがグループとして読み込まれるオブジェクトであることを示します。このフラグは、リンカーの -z groupperm オプションを使用してオブジェクトに記録されます。「グループの分離」を参照してください。