7.4.6 領域の割り当て、セレクタ、および優先度の動作を示す next_fit アルゴリズムの例

ここでは、sections.oRO-CODE セクションを例に、next_fit の配置アルゴリズムを説明します。

入力セクションのプロパティと順序を以下の表に示します。

表 7-2 入力セクションのプロパティ(next_fit を使用したセクションの配置)

Name サイズ
sec1 0x14
sec2 0x14
sec3 0x10
sec4 0x4
sec5 0x4
sec6 0x4
この例で使用するスキャッタファイルは次のとおりです。
LR 0x100
{
  ER_1 0x100 0x20
  {
     .ANY1(+RO-CODE)
  }
  ER_2 0x200 0x20
  {
     .ANY2(+RO)
  }
  ER_3 0x300 0x20
  {
     .ANY3(+RO)
  }
}

この例では、--any_contingency を無効にしています。
next_fit が他のアルゴリズムと異なるのは、一杯であると見なされた領域が再度考慮されないという点です。この例からは、セレクタの優先順位と限定性の相互作用も確認できます。この点はすべてのアルゴリズムに共通です。
    Execution Region ER_1 (Base: 0x00000100, Size: 0x00000014, Max: 0x00000020, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x00000100   0x00000014   Code   RO            1    sec1                sections.o


    Execution Region ER_2 (Base: 0x00000200, Size: 0x0000001c, Max: 0x00000020, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x00000200   0x00000010   Code   RO            3    sec3                sections.o
    0x00000210   0x00000004   Code   RO            4    sec4                sections.o
    0x00000214   0x00000004   Code   RO            5    sec5                sections.o
    0x00000218   0x00000004   Code   RO            6    sec6                sections.o


    Execution Region ER_3 (Base: 0x00000300, Size: 0x00000014, Max: 0x00000020, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x00000300   0x00000014   Code   RO            2    sec2                sections.o
この例では、以下のようになります。
  • ER_1 には、最も限定的なセレクタが存在するため、リンカは、sec1ER_1 に配置します。これで、ER_1 に残っているスペースは 0x6 バイトです。
  • 次に、リンカは、最も限定的なセレクタを持っている ER_1sec2 を配置しようと試みますが、そこには十分なスペースが存在しません。したがって、ER_1 は一杯であるとマークされ、その後の配置手順では考慮されません。sec2 の配置先として、リンカは、ER_2 よりも優先順位の高い ER_3 を選択します。
  • 次に、リンカは、sec3ER_3 に配置しようと試みます。十分なスペースがないので、ER_3 は一杯であるとしてマークされます。リンカは、sec3ER_2 に配置します。
  • 次の処理対象は、sec4 です。これは 0x4 バイトのセクションであるため、ER_1ER_3 のどちらにでも収まります。しかし、どちらも既に一杯としてマークされているため、これらは考慮から外されます。リンカは、残っているすべてのセクションを ER_2 に配置します。
  • さらにもう 1 つ、 0x8 というサイズのセクション sec7 が存在し、sec6 の後に処理された場合、リンクは失敗します。既に ER_1ER_3 は一杯としてマークされているので、このアルゴリズムでは、これらの領域にセクションの配置が試みられることはありません。
関連する概念
7.4.3 .ANY セクションの優先順位
7.4.2 複数の .ANY セレクタの入力セクションの配置を制御するためのコマンドラインオプション
7.4.4 未割り当てセクションの配置に使用できる最大領域サイズの指定
7.4.5 .ANY セクションの配置アルゴリズムの使用例
7.14 スキャッタファイルの処理時の複数のマッチングをリンカが解決する方法
7.4.8 リンカによって生成されたコンテンツによって .ANY セクションがオーバーフローしたときの動作
関連する参考文書
12.125 --scatter=filename
12.4 --any_placement=algorithm
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.