Syminfo テーブルセクション
syminfo セクションには、Elf32_Syminfo 型または Elf64_Syminfo 型の複数のエントリが存在します。.SUNW_syminfo セクションには、関連付けられているシンボルテーブル (sh_link) のエントリごとに 1 つのエントリが存在します。
このセクションがオブジェクトに存在している場合、関連付けられているシンボルテーブルからシンボルインデックスを取り出し、このシンボルインデックスを使ってこのセクションに存在する対応する Elf32_Syminfo エントリまたは Elf64_Syminfo エントリを見つけることで、追加シンボル情報を見つけます。関連付けられているシンボルテーブルと、Syminfo テーブルには、必ず同じ数のエントリが存在します。
インデックス 0 は、Syminfo テーブルの現バージョン (SYMINFO_CURRENT) を格納するために使用されます。シンボルテーブルエントリ 0 は必ず UNDEF シンボルテーブルエントリ用に予約されるので、矛盾は発生しません。
Syminfo エントリの形式は、次のとおりです。sys/link.h を参照してください。
typedef struct {
Elf32_Half si_boundto;
Elf32_Half si_flags;
} Elf32_Syminfo;
typedef struct {
Elf64_Half si_boundto;
Elf64_Half si_flags;
} Elf64_Syminfo;
- si_boundto
-
.dynamic セクションのエントリへのインデックスで、sh_info フィールドにより示され、Syminfo フラグを増加させます。たとえば、DT_NEEDED エントリは、Syminfo エントリに関連付けられた動的オブジェクトを示します。次の表に示すエントリは、si_boundto に対して予約されています。
|
|
|
SYMINFO_BT_SELF
|
0xffff
|
自己に結びつけられるシンボル。
|
SYMINFO_BT_PARENT
|
0xfffe
|
親に結びつけられるシンボル。親は、この動的オブジェクトの読み込みを発生させる最初のオブジェクトです。
|
SYMINFO_BT_NONE
|
0xfffd
|
シンボルに特別なシンボル結合は含まれません。
|
SYMINFO_BT_EXTERN
|
0xfffc
|
シンボル定義は外部です。
|
|
- si_flags
-
このビットフィールドでは、次の表に示すフラグを設定できます。
|
|
|
SYMINFO_FLG_DIRECT
|
0x01
|
シンボル参照は、定義を含むオブジェクトへ直接関連付けられます。
|
SYMINFO_FLG_FILTER
|
0x02
|
シンボル定義は、標準フィルタとして機能します。
|
SYMINFO_FLG_COPY
|
0x04
|
シンボル定義はコピー再配置の結果です。
|
SYMINFO_FLG_LAZYLOAD
|
0x08
|
遅延読み込みの必要があるオブジェクトに対するシンボル参照です。
|
SYMINFO_FLG_DIRECTBIND
|
0x10
|
シンボル参照は定義に直接結合される必要があります。
|
SYMINFO_FLG_NOEXTDIRECT
|
0x20
|
外部参照はこのシンボル定義に直接結合できません。
|
SYMINFO_FLG_AUXILIARY
|
0x40
|
シンボル定義は、補助フィルタとして機能します。
|
SYMINFO_FLG_INTERPOSE
|
0x80
|
シンボル定義は割り込み処理として機能します。この属性は動的実行可能ファイルにのみ適用できます。
|
SYMINFO_FLG_CAP
|
0x100
|
シンボルは、機能と関連付けられています。
|
SYMINFO_FLG_DEFERRED
|
0x200
|
シンボルを BIND_NOW 再配置に含めません。
|
SYMINFO_FLG_WEAKFILTER
|
0x400
|
弱い標準フィルタを指定するには、 SYMINFO_FLG_FILTER と組み合わせて設定します。実行時の動作は SYMINFO_FLG_FILTER と同じです。リンク編集時に、未使用の依存関係の処理がアクティブな場合、ターゲットフィルティーの同じシンボルを優先するために、弱いフィルタのシンボルを無視できます。 弱いフィルタの生成を参照してください
|
|