8.16 入力セクション記述の構文

入力セクションの記述では、親実行領域にロードされる入力セクションを指定します。

バッカスナウア記法(BNF)による入力セクションの記述の構文は、次のとおりです。

input_section_description ::=
  module_select_pattern          [ "(" input_section_selector ( "," input_section_selector )* ")" ]  input_section_selector ::=          ("+" input_section_attr | input_section_pattern | input_symbol_pattern | section_properties)

各項目には以下の意味があります。

module_select_pattern

入力セクションは、 module_select_pattern が以下のいずれかと一致する場合、モジュールセレクタパターンと一致します。

  • そのセクションを含んでいるオブジェクトファイルの名前。

  • ライブラリメンバの名前(先頭のパス名を除く)。

  • セクションが抽出されるライブラリのフルネーム(パス名を含む)。名前にスペースが含まれている場合は、検索を容易にするためにワイルド文字を使用して下さい。たとえば、 *libname.lib を使用して C:\lib dir\libname.lib と照合します。

リテラルテキストで作成されるパターン。ワイルドカード文字 * はゼロ個以上の文字と一致し、? は任意の 1 文字と一致します。

ホスト上でファイル名の大文字と小文字が区別される場合でも、この一致では大文字と小文字は区別されません。

すべてのオブジェクトと一致させる場合は、*.o を使用します。すべてのオブジェクトファイルおよびライブラリと一致させる場合は、* を使用します。

"file one.o" のように引用符で囲んだファイル名を使用できます。

スキャッタファイル内で、* セレクタを 2 つ使用することはできません。ただし、変更した 2 つのセレクタ(たとえば *A*B)を使用できます。また、 .ANY セレクタと * モジュールセレクタを一緒に使用することもできます。 * モジュールセレクタは .ANY より優先されます。* セレクタを含んでいるファイルの部分が削除されると、.ANY セレクタが有効になります。

input_section_attr

入力セクションの属性とのマッチングが行われる属性セレクタです。各 input_section_attr の前に + を指定します。

入力セクションの名前とマッチングが行われるパターンを指定するには、その名前の先頭に + を付ける必要があります。+ の直前のコンマは省略できます。

このセレクタでは大文字と小文字が区別されません。以下のセレクタが認識されます。

  • RO-CODE

  • RO-DATA

  • RORO-CODERO-DATA の両方が選択されます)

  • RW-DATA

  • RW-CODE

  • RWRW-CODERW-DATA の両方が選択されます)

  • XO

  • ZI

  • ENTRYENTRY ポイントを含んでいるセクション)

以下の同義語が認識されます。

  • RO-CODE の代わりに CODE

  • RO-DATA の代わりに CONST

  • RO の代わりに TEXT

  • RW の代わりに DATA

  • ZI の代わりに BSS

以下の疑似属性が認識されます。

  • FIRST

  • LAST

配置順序が重要な場合には、FIRST および LAST を使用し、実行領域内の最初と最後のセクションをマークします。例えば、特定の入力セクションを領域の最初に配置する必要がある場合や、チェックサムを含んでいる入力セクションを最後に配置する必要がある場合などが該当します。

実行領域の属性は、FIRST または LAST の 1 つだけ存在でき、単一の input_section_attr に続く必要があります。以下に例を示します。

*(section, +FIRST)

これが正しいパターンです。

*(+FIRST, section)

このパターンは誤りで、エラーメッセージが生成されます。

input_section_pattern

大文字と小文字の区別なく、入力セクションの名前とのマッチングが行われるパターンです。リテラルテキストで構成されます。ワイルドカード文字 * はゼロ個以上の文字と一致し、? は任意の 1 文字と一致します。

引用符で囲んだ入力セクション名を使用できます。

複数の input_section_pattern を使用する場合、曖昧エラーを避けるため、他の実行領域とパターンが重複しないようにします。

input_symbol_pattern

入力セクションによって定義されているグローバルシンボルの名前を使用して、そのセクションを選択します。このオプションを使用すると、部分的にリンクされたオブジェクトから、同名のセクションを個別に選択できます。

:gdef:接頭文字でグローバルシンボルパターンとセクションパターンを区別します。たとえば、:gdef:mysym を使用して、 mysym を定義するセクションを選択します。以下に、 グローバルシンボル mysym1 を定義するセクションと、グローバルシンボル mysym2 を含んでいるセクションが ExecReg1 に存在するスキャッタファイルの例を示します。

LoadRegion 0x8000 {     ExecReg1 +0     {         *(:gdef:mysym1)         *(:gdef:mysym2)     }                         ; スキャッタロード記述の残り }

引用符で囲んだグローバルシンボルパターンを使用できます。:gdef:接頭文字は引用符の内側にも外側にもできます。

複数の input_symbol_pattern を使用する場合、曖昧エラーを避けるため、他の実行領域とパターンが重複しないようにします。

入力セクションの記述子の順序は重要ではありません。

section_properties

セクションプロパティとして指定できるのは、+FIRST+LAST、および OVERALIGN value です。

OVERALIGN の値は、2 の累乗で 4 以上である必要があります。

  • module_select_pattern と、少なくとも 1 つの input_section_attr または input_section_pattern の両方に一致する入力セクションのみが実行領域にインクルードされます。

    (+ input_section_attr) (input_section_pattern) を省略した場合、デフォルトは +RO です。

  • コンパイラによって生成される入力セクション名、または ARM ライブラリコードによって使用される入力セクション名には依存しないで下さい。これらの名前は、異なるコンパイラオプションが使用される場合など、コンパイルごとに変わる可能性があります。また、コンパイラによって使用されるセクション命名規則は、リリース間で異なる場合があります。

  • BNF の定義では、読みやすくするために改行とスペースが挿入されています。改行とスペースはスキャッタロード記述では必須ではなく、スキャッタファイル内に存在している場合は無視されます。

モジュール選択パターンの例

たとえば、 module_select_pattern は以下のように指定できます。

入力セクションセレクタパターンの例

たとえば、 input_section_selector は以下のように指定できます。

関連する概念
8.15 入力セクションの記述
8.18 リンカによって生成されたコンテンツによって .ANY セクションがオーバーフローしたときの動作
7.13 .ANY モジュールセレクタによる未割り当てセクションの配置
7.14 .ANY セクションの配置アルゴリズムの使用例
7.15 領域の割り当て、セレクタ、および優先度の動作を示す next_fit アルゴリズムの例
7.16 .ANY セクションのソートアルゴリズムの使用例
7.33 実行領域と入力セクションのオーバーアライメント
非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.