7.4.4 未割り当てセクションの配置に使用できる最大領域サイズの指定

armlink が未割り当てセクションで満たすことができる領域内で最大サイズを指定できます。

実行領域属性 ANY_SIZE max_size を使用して、 armlink が未割り当てセクションで満たすことができる領域の最大サイズを指定します。
このキーワードを使用する場合は、以下の制限事項に注意して下さい。
  • max_size は、領域サイズ以下である必要があります。
  • .ANY セレクタなしで ANY_SIZE を領域上で使用できますが、これは armlink によって無視されます。
ANY_SIZE が存在する場合、armlink は以下のようになります。
  • 所定の .ANY サイズをオーバーライドしません。つまり、優先順位を下げずに、後でより多くのセクションをフィットさせようとします。
  • コンティンジェンシーを再計算しません。
  • コンティンジェンシースペースにセクションを割り当てません。
ANY_SIZE では、--any_contingency の指定は必要ありません。ただし、--any_contingency が指定されても ANY_SIZE は指定されない場合、armlink はコンティンジェンシーを調整しようとします。目的は以下のとおりです。
  • .ANY 領域をオーバーフローしない。
  • セクションをコンティンジェンシー予約済みスペースに配置することを拒否しない。
コマンドラインで --any_contingency を指定しても、ANY_SIZE を指定した領域では無視されます。ANY_SIZE が指定されていない領域では、通常どおり使用されます。

以下に、ANY_SIZE の使用例を示します。
LOAD_REGION 0x0 0x3000
{
    ER_1 0x0 ANY_SIZE 0xF00 0x1000
    {
        .ANY
    }
    ER_2 0x0 ANY_SIZE 0xFB0 0x1000
    {
        .ANY
    }
    ER_3 0x0 ANY_SIZE 0x1000 0x1000
    {
        .ANY
    }
}
この例では、以下のようになります。
  • ER_1 には、リンカ生成コンテンツのために予約された 0x100 があります。
  • ER_2 には、リンカ生成コンテンツのために予約された 0x50 があります。これは、--any_contingency の自動コンティンジェンシーとほとんど同じです。
  • ER_3 には、予約済みスペースはありません。したがって、領域は 100% 満たされ、ベニア用のコンティンジェンシーは残りません。ANY_SIZE パラメーターを省略すると、領域の 98% が満たされ、2% はベニア用コンティンジェンシーとなります。
関連する概念
7.4.5 .ANY セクションの配置アルゴリズムの使用例
7.4.6 領域の割り当て、セレクタ、および優先度の動作を示す next_fit アルゴリズムの例
7.4.7 .ANY セクションのソートアルゴリズムの使用例
7.4.8 リンカによって生成されたコンテンツによって .ANY セクションがオーバーフローしたときの動作
関連する参考文書
12.5 --any_sort_order=order
12.94 --map、--no_map
12.127 --section_index_display=type
12.154 --tiebreaker=option
12.3 --any_contingency
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.