3.3.1 セクションのデフォルト配置

デフォルトで、リンカは入力セクションを特定の順番で実行領域内に配置します。

セクションは、次の順番に配置されます。
  1. 属性(以下の順序)
    1. 読み出し専用コード。
    2. 読み出し専用データ。
    3. 読み出し-書き込みコード。
    4. 読み出し-書き込みデータ。
    5. ゼロで初期化されたデータ。
  2. 入力セクションの名前(属性が同じ場合)。名前は大文字と小文字が区別され、ASCII 文字照合シーケンスを使用してアルファベット順で比較されます。
  3. タイブレーカー(属性とセクション名が同じ場合)。armlink がセクションを処理するデフォルトの順番です。FIRST または LAST 実行領域属性を使用して、これをオーバーライドできます。

このソート順序は、実行領域内のセクションセレクタの順序付けの影響は受けません。
したがって、ライブラリからインクルードされる、同じ属性と名前を持つ入力セクションの位置は、リンカがオブジェクトを処理する順序に依存します。多くのライブラリがコマンドラインに存在すると、この順序の予測が難しくなります。--tiebreaker=cmdline オプションは、セクションがコマンドラインに表示される順序に基づいた予測しやすい順番を使用します。
各入力セクションのベースアドレスは、リンカによって定義されるソート順序によって決定され、それを含む出力セクション内でも正しく整列されます。
リンカは、実行領域に存在する各属性に対して、以下の 1 つの出力セクションを生成します。
  • 実行領域に XO セクションのみが含まれる場合、1 つの 実行専用(XO)セクションを生成します。
  • 実行領域に読み出し専用コードまたはデータが含まれる場合、1 つの RO セクションを生成します。
  • 実行領域に読み出し-書き込みコードまたはデータが含まれる場合、1 つの RW セクションを生成します。
  • 実行領域にゼロで初期化されたデータが含まれる場合、1 つの ZI セクションを生成します。

XO 専用実行領域にデータを配置しようとすると、リンカはエラーを生成します。
同じ実行領域に RO コードが混在している場合、XO セクションは XO プロパティを失います。
メモリマネージメントハードウェアを搭載したシステムでは、実行時に XO および RO 出力セクションを保護できます。RO および XO セクションは、ROM または Flash に配置できます。
--sort=algorithm コマンドラインオプションを使用すると、他のソート順序を使用できます。アルゴリズムが選択されていない場合は、生成されるベニアの数を最小限に抑えるために、リンカによって algorithm が変更されることがあります。

以下のスキャッタファイルには、リンカによるセクションの配置方法を示しています。
LoadRegion 0x8000
{
    ExecRegion1 0x0000 0x4000
    {
        *(sections)
        *(moresections)
    }
    ExecRegion2 0x4000 0x2000
    {
        *(evenmoresections)
    }
}
ロード領域内の実行領域の順序がリンカによって変更されることはありません。
関連する概念
7.2.4 特定アドレスへの関数とデータの配置方法
7.3 スキャッタロードを使用して名前付きセクションを明示的に配置する方法の例
7.4 .ANY モジュールセレクタによる未割り当てセクションの配置
3.1 ARM ELF イメージの構造
3.6 リンカによって生成されるベニア
3.3.3 リンカによるセクションの境界調整
3.1.2 入力セクション、出力セクション、領域、およびプログラムセグメント
3.3.2 FIRST 属性と LAST 属性を使用したセクションの配置
3.5  Thumb コードを含んでいる実行領域のリンカによる再順序付け
関連する参考文書
8.5.2 入力セクション記述の構文
12.134 --sort=algorithm

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

リンカが、入力セクションを実行領域に配置できない場合があります。

リンカが入力セクションを実行領域に配置できない場合、エラーメッセージが生成されます。これは、想定されるモジュール選択パターンと入力セクションセレクタのうち一部が、現在のスキャッタファイルで許可されていないために起こります。
問題の解決法は、これらのセクションを正しく配置することの重要度によって異なります。
  • セクションを特定の場所に配置する必要がある場合は、特定のモジュールセレクタおよび入力セクションセレクタを必要に応じて含めるようにスキャッタファイルを変更します。
  • 未割り当てセクションの配置が重要でない場合は、1 つまたは複数の .ANY モジュールセレクタを、オプションの入力セクションセレクタと併せて使用します。
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.