syminfo セクションには、Elf32_Syminfo 型または Elf64_Syminfo 型の複数のエントリが存在します。関連付けられているシンボルテーブルの各エントリ (sh_link) の .SUNW_syminfo セクションには、1 つのエントリが存在します。
このセクションがオブジェクトに存在している場合、関連付けられているシンボルテーブルからシンボルインデックスを取り出し、このシンボルインデックスを使ってこのセクションに存在する対応する Elf32_Syminfo または Elf64_Syminfo エントリを見つけることで、追加シンボル情報を見つけます。関連付けられているシンボルテーブルと、Syminfo テーブルには、必ず同じ数のエントリが存在します。
インデックス 0 は、Syminfo テーブルの現バージョン (SYMINFO_CURRENT) を格納するために使用されます。シンボルテーブルエントリ 0 は必ず UNDEF シンボルテーブルエントリに対して予約されるので、矛盾は発生しません。
Symfino エントリの形式 (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;
この構造体の要素を次に示します。
これは、.dynamic セクションのエントリへのインデックスで、sh_info フィールドにより示され、Syminfo フラグを増加させます。 たとえば、DT_NEEDED エントリは、Syminfo エントリに関連付けられた動的オブジェクトを示します。表 7–25 に示すエントリは、si_boundto に対して予約されています。
表 7–25 ELF si_boundto 予約値
名前 |
値 |
意味 |
---|---|---|
SYMINFO_BT_SELF |
0xffff |
自己に結びつけられるシンボル |
SYMINFO_BT_PARENT |
0xfffe |
親に結びつけられるシンボル。親は、この動的オブジェクトの読み込みを発生させる最初のオブジェクト |
このビットフィールドでは、次の表に示すフラグを設定できます。
表 7–26 ELF Syminfo フラグ
名前 |
値 |
意味 |
---|---|---|
SYMINFO_FLG_DIRECT |
0x01 |
外部オブジェクトの直接参照 |
SYMINFO_FLG_COPY |
0x04 |
コピー再配置の結果 |
SYMINFO_FLG_LAZYLOAD |
0x08 |
遅延読み込み可能な外部オブジェクト参照 |