リンカによるセクションの配置

デフォルトでは、イメージを生成するとき、リンカは以下の順序で入力セクションを配置します。

  1. 属性(以下の順序)

    1. 読み出し専用コード

    2. 読み出し専用データ

    3. 読み出し-書き込みコード

    4. 読み出し-書き込みデータ

    5. ゼロで初期化されたデータ

  2. 入力セクションの名前(属性が同じ場合)。 名前は大文字と小文字が区別され、ASCII 文字照合シーケンスを使用してアルファベット順で比較されます。

  3. 入力ファイル内における各セクションの相対位置(FIRST または LAST によってオーバーライドされている場合を除き、属性とセクション名が同じ場合)

イメージ部分は、数を最小限に抑えた連続領域にまとめられます。

Note

このソート順序は、スキャッタファイル内またはオブジェクトファイル名での順序付けの影響は受けません。

したがって、ライブラリからインクルードされる、同じ属性と名前を持つ入力セクションの位置は予測不能です。 厳密な位置設定を行う必要がある場合には、スキャッタファイルで個別のモジュールを明示的に指定して、armlink コマンドの入力ファイルリストにそのモジュールを組み込みます。

各入力セクションのベースアドレスは、リンカによって定義されるソート順序によって決定され、それを含む出力セクション内でも正しく整列さます。

デフォルトでは、リンカによって作成されるイメージは、RO 出力セクションと RW 出力セクション(オプションで ZI 出力セクション)から構成さます。 メモリマネージメントハードウェアを搭載したシステムでは、実行時に RO 出力セクションを保護できます。 また、RO セクションはターゲットの ROM に配置することも可能です。

--sort=algorithm コマンドラインオプションを使用すると、他のソート順序を使用できます。 アルゴリズムが選択されていない場合は、生成されるベニアの数を小限に抑えるために、リンカによって algorithm が変更されることがあります。

Show/hide未割り当てセクションの処理

リンカが、入力セクションを実行領域に配置できない場合があります。 この場合は、リンカによってエラーメッセージが生成されます。 これは想定されるモジュール選択パターンと入力セクションセレクタのうち一部が、現在のスキャッタファイルで許可されていないために起こります。 問題の解決法は、これらのセクションを正しく配置することの重要度によって異なります。

  • セクションを特定の場所に配置する必要がある場合は、特定のモジュールセレクタおよび入力セクションセレクタを必要に応じて含めるようにスャッタファイルを変更します。

  • 未割り当てセクションの配置が重要でない場合は、1 つまたは複数の .ANY モジュールセレクタを、オプションの入力セクションセレクタと併せて使用します。

リンカは、入力オブジェクト内の各 ELF セクションの入力セクションを作成する際、グローバルカウンタをインクリメントします。 このカウンタ値は、対応するセクションに作成インデックスとして格納されます。 同一のプロパティを持った未割り当てセクションを配置する際は、この作インデックスが使用されます。

Show/hide

以下のスキャッタファイルには、リンカによるセクションの配置方法を示しています。

LoadRegion 0x8000
{
    ExecRegion1 0x0000 0x4000
    {
        *(sections)
        *(moresections)
    }
    ExecRegion2 0x4000 0x2000
    {
        *(evenmoresections)
    }
}

ロード領域内の実行領域の順序がリンカによって変更されることはありません。

Show/hide関連項目

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