7.14 .ANY セクションの配置アルゴリズムの使用例

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

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

表 7-1 入力セクションのプロパティ(.ANY セクションの配置)

Name サイズ
sec1 0x4
sec2 0x4
sec3 0x4
sec4 0x4
sec5 0x4
sec6 0x4

この例で使用するスキャッタファイルは次のとおりです。

LR 0x100 {   ER_1 0x100 0x10   {      .ANY   }   ER_2 0x200 0x10   {      .ANY   } }

例では、--any_contingency を無効にしています。

first_fit、next_fit、best_fit の例

この例では、同じサイズの複数のセクションを、同じセレクタで 2 つの領域に割り当てる状況を考えます。セレクタは等しく限定的で、 .ANY(+R0) に相当します。優先順位は設定されていません。

    Execution Region ER_1 (Base:0x00000100, Size:0x00000010, Max:0x00000010, ABSOLUTE)     Base Addr    Size         Type   Attr      Idx    E Section Name        Object     0x00000100   0x00000004   Code   RO            1    sec1                sections.o     0x00000104   0x00000004   Code   RO            2    sec2                sections.o     0x00000108   0x00000004   Code   RO            3    sec3                sections.o     0x0000010c   0x00000004   Code   RO            4    sec4                sections.o     Execution Region ER_2 (Base:0x00000200, Size:0x00000008, Max:0x00000010, ABSOLUTE)     Base Addr    Size         Type   Attr      Idx    E Section Name        Object     0x00000200   0x00000004   Code   RO            5    sec5                sections.o     0x00000204   0x00000004   Code   RO            6    sec6                sections.o

この例では、以下のようになります。

worst_fit の例

この例は、worst_fit アルゴリズムを使用した場合のイメージのメモリマップを示しています。

    Execution Region ER_1 (Base:0x00000100, Size:0x0000000c, Max:0x00000010, ABSOLUTE)     Base Addr    Size         Type   Attr      Idx    E Section Name        Object     0x00000100   0x00000004   Code   RO            1    sec1                sections.o     0x00000104   0x00000004   Code   RO            3    sec3                sections.o     0x00000108   0x00000004   Code   RO            5    sec5                sections.o     Execution Region ER_2 (Base:0x00000200, Size:0x0000000c, Max:0x00000010, ABSOLUTE)     Base Addr    Size         Type   Attr      Idx    E Section Name        Object     0x00000200   0x00000004   Code   RO            2    sec2                sections.o     0x00000204   0x00000004   Code   RO            4    sec4                sections.o     0x00000208   0x00000004   Code   RO            6    sec6                sections.o

リンカはまず、sec1ER_1 に割り当てます。この時点で、優先順位も限定性も等しい 2 つの領域が存在します。リンカは、空きスペースに最も余裕のある領域(この例では ER_2)に sec2 を割り当てます。今度は、2 つの領域の空きスペースが等しくなりました。このとき、リンカは、スキャッタファイル内で先に出現する領域(ER_1)に sec3 を割り当てます。

worst_fit の動作は、現バージョンのリンカのデフォルトの動作であり、以前のバージョンのリンカで唯一利用できるアルゴリズムです。

関連する概念
7.13 .ANY モジュールセレクタによる未割り当てセクションの配置
7.15 領域の割り当て、セレクタ、および優先度の動作を示す next_fit アルゴリズムの例
関連する参考文書
12.126 --scatter=filename
12.4 --any_placement=algorithm
非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.