Solaris リンカーは、プライマリ出力オブジェクトに加えて、1 つ以上の補助オブジェクトを生成できます。補助オブジェクトには、通常はプライマリオブジェクトに書き込まれる割り当て不可のセクションが含まれています。補助オブジェクトが生成されると、プライマリオブジェクトおよび関連するすべての補助オブジェクトに、これらの関連するオブジェクトを識別する情報を含む SHT_SUNW_ancillary セクションが格納されます。これらのオブジェクトの補助セクションは、グループのほかのメンバーを識別および解釈するために必要な情報を提供します。
このセクションには、次の構造の配列が含まれます。sys/elf.h を参照してください。
typedef struct { Elf32_Word a_tag; union { Elf32_Word a_val; Elf32_Addr a_ptr; } a_un; } Elf32_Ancillary; typedef struct { Elf64_Xword a_tag; union { Elf64_Xword a_val; Elf64_Addr a_ptr; } a_un; } Elf64_Ancillary;
このタイプの各オブジェクトに対して、a_tag は a_un の解釈を制御します。
このオブジェクトは、さまざまに解釈される整数値を表します。
このオブジェクトは、プログラムの仮想アドレスを表します。
次の補助タグが存在します。
|
補助セクションのグループの最後にマークを付けます。
c_val 要素にファイルのチェックサムを提供します。ANC_SUNW_MEMBER の最初のインスタンスの前に ANC_SUNW_CHECKSUM が存在する場合は、補助セクションの読み取り元となるオブジェクトのチェックサムが提供されます。ANC_SUNW_MEMBER タグのあとに存在する場合は、そのメンバーのチェックサムが提供されます。
オブジェクト名を指定します。a_ptr 要素は、ファイル名を提供する、ヌル文字で終わる文字列の文字列テーブルオフセットを含みます。
補助セクションでは、現在のオブジェクトを識別する ANC_SUNW_MEMBER の最初のインスタンスの前に、常に ANC_SUNW_CHECKSUM が含まれている必要があります。そのあとに、オブジェクトの完全なセットを構成する各オブジェクトの ANC_SUNW_MEMBER が存在すべきです。個々の ANC_SUNW_MEMBER のあとには、そのオブジェクトの ANC_SUNW_CHECKSUM が存在すべきです。したがって、一般的な補助セクションは次のような構造になっています。
|
したがって、オブジェクトは最初の ANC_SUNW_CHECKSUM をそのあとに続く各チェックサムと比較し、一致を見つけることによって自身を識別できます。