リンカーとライブラリ

Syminfo テーブル

このセクションには、Elf32_Syminfo 型または Elf64_Syminfo 型の複数のエントリが存在します。関連付けられているシンボルテーブルの各エントリ (sh_link) の .SUNW_syminfo セクションには、1 つのエントリが存在します。

このセクションがオブジェクトに存在している場合、関連付けられているシンボルテーブルからシンボルインデックスを取り出し、このシンボルインデックスを使ってこのセクションに存在する対応する Elf32_Syminfo または Elf64_Syminfo エントリを見つけることで、追加シンボル情報を見つけます。関連付けられているシンボルテーブルと、Syminfo テーブルには、必ず同じ数のエントリが存在します。

インデックス 0 は、Syminfo テーブルの現バージョン (SYMINFO_CURRENT) を格納するために使用されます。シンボルテーブルエントリ 0 は必ず UNDEF シンボルテーブルエントリに対して予約されるので、矛盾は発生しません。

Syminfo エントリの形式は、以下のとおりです。


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_flags

これはビットフィールドであり、表 7-26 に示すようにフラグを設定できます。

表 7-26 Syminfo フラグ

名前 

値 

意味 

SYMINFO_FLG_DIRECT

0x01

このシンボルは、外部オブジェクトを直接参照した 

SYMINFO_FLG_COPY

0x04

このシンボルは、コピー再配置を行なった結果 

SYMINFO_FLG_LAZYLOAD

0x08

このシンボルは、レイジーロード可能な外部オブジェクトを参照する 

si_boundto

sh_info フィールドで示される .dynamic セクションのエントリへのインデックス。このエントリは、DT_* (DT_NEEDED) エントリ (Syminfo エントリに関連付けられている動的オブジェクトを示す) を示します。表 7-27 に示すエントリは、si_boundto に対して予約されています。

表 7-27 si_boundto 予約値

名前 

値 

意味 

SYMINFO_BT_SELF

0xffff

自己に結びつけられるシンボル 

SYMINFO_BT_PARENT

0xfffe

親に結びつけられるシンボル。親は、この動的オブジェクトの読み込みを発生させる最初のオブジェクト