リンカーとライブラリ

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

シンボルに特別なシンボル結合は含まれません。 

si_flags

このビットフィールドでは、次の表に示すフラグを設定できます。

名前 

値 

意味 

SYMINFO_FLG_DIRECT

0x01

シンボル参照は、定義を含むオブジェクトへ直接関連付けられます。 

SYMINFO_FLG_COPY

0x04

シンボル定義はコピー再配置の結果です。 

SYMINFO_FLG_LAZYLOAD

0x08

遅延読み込みの必要があるオブジェクトに対するシンボル参照です。 

SYMINFO_FLG_DIRECTBIND

0x10

シンボル参照は定義に直接結合される必要があります。 

SYMINFO_FLG_NOEXTDIRECT

0x20

外部参照はこのシンボル定義に直接結合できません。