スキャッタファイルの処理時の複数のマッチングをリンカが解決する方法

入力セクションは固有(ユニーク)である必要があります。 複数の一致がある場合、リンカは最も明示的な module_select_patterninput_section_selector の組み合わせに基づいて、領域に入力セクションを割り当てようとします。 ただし、固有(ユニーク)の一致が検出されない場合は、そのスキッタロードの記述の処理が中止されます。

リンカによる複数の入力セクションの合致方法を指定するには、以下の変数を使用します。

例えば、入力セクション A が実行領域 R1 の m1,s1 と一致し、さらに実行領域 R2 の m2,s2 とも一致する場合は、以下のように処理されます。

module_select_patterninput_section_selector の最も明示的な組み合わせを決定するために armlink で使用されるシーケンスは以下のとおりです。

  1. モジュールセレクタパターンの場合:

    テキスト文字列 m1 がパターン m2 と一致し、テキスト文字列 m2 がパターン m1 と一致しない場合、m1m2 よりも明示的です。

  2. 入力セクションセレクタの場合:

    • s1s2 が両方ともセクション名と一致するパターンである場合には、モジュールセレクタパターンと同じ定義が使用されます。

    • s1s2 の一方が入力セクション名と一致し、他方が入力セクション属性と一致する場合、s1s2 は順序がなく、その記述にエラーがあると診断されます。

    • s1s2 の両方が入力セクション属性に一致する場合、s1s2 よりも明示的かどうかは、以下の関係によって決定されます。

      • ENTRYRO-CODERO-DATARW-CODERW-DATA のどれよりも明示的である。

      • RO-CODERO よりも明示的である。

      • RO-DATARO よりも明示的である。

      • RW-CODERW よりも明示的である。

      • RW-DATARW よりも明示的である。

      • セクション属性間には上記以外の(s1s2 よりも明示的である)関係がない。

  3. module_select_pattern, input_section_selector の組み合わせの場合、以下のいずれかが当てはまる場合にのみ、m1,s1m2,s2 より明示的です。

    1. s1 がリテラルの入力セクション名(つまり、パターン文字が含まれていない名前)であり、s2+ENTRY 以外の入力セクション属性と一致する。

    2. m1m2 よりも明示的である。

    3. s1s2 よりも明示的である。

    条件 a が条件 bc より優先され、条件 b が 条件 c より優先されるように、条件がテストされます。

このマッチング方式による影響は以下のとおりです。

.ANY モジュールセレクタは、スキャッタロード記述からは解決できないセクションを割り当てるために利用できます。

次の例は、複数の実行領域とパターンのマッチングを示しています。

Example 8. 複数の実行領域とパターンのマッチング

LR_1 0x040000            
{                            
    ER_ROM 0x040000              ; 開始実行領域アドレスは
    {	                            ; ロードアドレスと同じである  
        application.o (+ENTRY)   ; オブジェクトからのエントリポイントを含むセクションは
    }	                            ; ここに配置する
    ER_RAM1 0x048000      
    {
        application.o (+RO-CODE) ; オブジェクトの他の RO コードはここに配置する
    }
    ER_RAM2 0x050000     
    {
        application.o (+RO-DATA) ; RO データはここに配置する
    }
    ER_RAM3 0x060000 
    {
        application.o (+RW)      ; RW コードおよびデータはここに配置する
    }
    ER_RAM4 +0                   ; ER_R3 に続けて記述する
    {
        *.o (+RO, +RW, +ZI)      ; application.o 以外をここに配置する
    }
}

Show/hide関連項目

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