リンカーとライブラリ

対応付け指示

対応付け指示は、入力セクションをどのように出力セグメントに対応付けするかをリンカーに伝えます。基本的には、対応付け先のセグメントの名前を指定し、名前を指定したセグメントに対応付けするためにセクションの属性をどうすべきかを指定します。特定のセグメントに対応付けするためにセクションが持っていなければならないセクション属性値 (section_attribute_values) は、そのセグメントの「エントランス基準」と呼ばれます。a.out の指定したセグメントにセクションを置くには、セクションはセグメントのエントランス基準に正確に合致していなければなりません。

対応付け指示には以下のような構文があります。


segment_name : {section_attribute_value}* [: {file_name}+];

セグメント名 (segment_name) に対して、任意の数のセクション属性値 (section_attribute_values) を任意の順序で指定し、それぞれは空白文字で区切ります (セクション属性ごとに 1 つの値だけ指定できます)。ファイル名 (file_name) を指定して、特定の .o ファイルからセクションを持ってこなければならないというように指定することもできます。セクション属性とその有効値は表 8-2 に示すとおりです。

表 8-2 セクション属性

セクション属性 

値 

section_name

任意の有効なセクション名 

section_type

$PROGBITS

$SYMTAB

$STRTAB

$REL

$RELA

$NOTE

$NOBITS

section_flags

?[[!]A][[!]W][[!]X]

対応付け指示を入力する場合、以下の点に注意してください。


S1 : $PROGBITS; 
S1 : $NOBITS;

1 つのセグメントに対して複数の対応付け命令行を指示することは、複数のセクション属性値を指定するための唯一の方法です。


S1 : $PROGBITS; 
S2 : $PROGBITS;

この場合、$PROGBITS セクションは、セグメント S1 に対応付けられます。

セグメント内セクションの順序

以下のような表記を使うことにより、セグメント内にセクションを配置する順序を指定できます。


segment_name | section_name1;
segment_name | section_name2;
segment_name | section_name3;

上記の形式で指定されたセクションは、すべての名前なしセクションの前に、mapfile に列挙されている順序で配置されます。