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

バッカスナウア記法(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

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

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

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

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

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

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

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

以下のモジュールセレクタパターンは、実行領域内の入力セクションの配置順序を記述します。

未割り当てセクションの .ANY モジュールセレクタ

特殊なモジュールセレクタパターン .ANY を使用すると、入力セクションの親モジュールを考慮することなく、入力セクションを実行領域に割り当てることができます。 特定の位置に配する必要がない入力セクションで実行領域を埋めるには、.ANY を使用します。

変更したセレクタ

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

Note

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

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

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

input_section_attr

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

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

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

  • RO-CODE

  • RO-DATA

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

  • RW-DATA

  • RW-CODE

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

  • ZI

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

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

  • RO-CODE の代わりに CODE

  • RO-DATA の代わりに CONST

  • RO の代わりに TEXT

  • RW の代わりに DATA

  • ZI の代わりに BSS

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

  • FIRST

  • LAST

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

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

*(section, +FIRST)

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

*(+FIRST, section)

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

input_section_pattern

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

Note

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

input_symbol_pattern

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

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

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

Note

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

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

section_properties

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

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

Note

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

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

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

  • * は、任意のモジュールまたはライブラリと一致します。

  • *.o は任意のオブジェクトモジュールと一致します。

  • math.omath.o モジュールと一致します。

  • *armlib* は、ARM が提供するすべての C ライブラリと一致します。

  • *math.lib は、math.lib で終わる任意のライブラリパスと一致します (例:C:\apps\lib\math\satmath.lib)。

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

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

  • +RO は、すべての RO コードおよびすべての RO データとマッチングが行われる入力セクション属性です。

  • +RW,+ZI は、すべての RW コード、RW データ、および ZI データとマッチングが行われる入力セクション属性です。

  • BLOCK_42 は、BLOCK_42 という名前のセクションとマッチングが行われる入力セクションパターンです。 例えば +RO-CODE,+RW のように、異なる属性が指定された同じ BLOCK_42 名を持つ ELF セクションが存在してもかまいません。

Show/hide関連項目

Copyright © 2010-2012 ARM. All rights reserved.ARM DUI 0493GJ
Non-ConfidentialID051612