7.13 .ANY モジュールセレクタによる未割り当てセクションの配置

リンカは、特定の実行領域に対して入力セクションの配置を試みます。解決できない入力セクションが存在し、そうしたセクションの配置が重要でない場合は、スキャッタファイルで .ANY モジュールセレクタを使用できます。

ほとんどの場合、1 つの .ANY セレクタを使用しても、* モジュールセレクタを使用しても、同じ結果が得られます。ただし、* とは異なり、.ANY は複数の実行領域に指定できます。

Placement rules when using multiple .ANY selectors

When more than one .ANY selector is present in a scatter file, the linker sorts sections in descending size order. It then takes the unassigned section with the largest size and assigns the section to the most specific .ANY execution region that has enough free space. For example, .ANY(.text) is judged to be more specific than .ANY(+RO).

If several execution regions are equally specific, then the section is assigned to the execution region with the most available remaining space.

For example:

  • If you have two equally specific execution regions where one has a size limit of 0x2000 and the other has no limit, then all the sections are assigned to the second unbounded .ANY region.

  • If you have two equally specific execution regions where one has a size limit of 0x2000 and the other has a size limit of 0x3000, then the first sections to be placed are assigned to the second .ANY region of size limit 0x3000 until the remaining size of the second .ANY is reduced to 0x2000. From this point, sections are assigned alternately between both .ANY execution regions.

You can specify a maximum amount of space to use for unassigned sections with the exection region attribute ANY_SIZE.

.ANYnum セレクタ( num は、ゼロまたはそれより大きい正の整数)で、複数の .ANY セクションの優先順位を指定します。

最も大きい整数を持ったセレクタに、最も高い優先順位が設定されます。

以下に、.ANYnum の使用例を示します。

lr1 0x8000 1024 {     er1 +0 512     {         .ANY1(+RO) ; er3 と均等に分散     }     er2 +0 256     {         .ANY2(+RO) ; 最も優先順位が高いため、最初に処理される     }     er3 +0 256     {         .ANY1(+RO) ; er1 と均等に分散     } }

以下のコマンドラインオプションが利用できます。

  • --any_placement=algorithm algorithm には、first_fitworst_fitbest_fitnext_fit のいずれかを指定します。

  • --any_sort_order=order order には cmdline または descending_size を指定します。

領域を順に埋めていくには、first_fit を使用します。

領域をその上限まで埋めるには、best_fit を使用します。

領域を均等に埋めるには、worst_fit を使用します。同じサイズの領域およびセクションの場合、worst_fit は、領域を循環的に埋めていきます。

より確定的なパターンで埋めていく必要がある場合は、next_fit を使用します。

first_fitbest_fit で、領域の上限まで埋めていくと、領域が一杯になってしまう可能性があります。これは、リンカによって生成されるコンテンツ(パディング、ベニアなど)は、セクションが .ANY セレクタに割り当てられるまで判明しないためです。その場合は、次のエラーが表示されます。

エラー:L6220E:実行領域 regionname のサイズ(size バイト)が制限(limit バイト)を超えています。

--any_contingency は、領域が埋め尽くされるのを防ぐためのオプションです。リンカによって生成されるコンテンツのために、領域の全体のうち一部のサイズが確保されます。この非常用(contingency)のエリアは、他に空きのある領域がない場合にしか使用されません。この動作が最も起きやすい first_fit および best_fit のアルゴリズムでは、このオプションがデフォルトで有効になっています。

実行領域属性 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.14 .ANY セクションの配置アルゴリズムの使用例
7.15 領域の割り当て、セレクタ、および優先度の動作を示す next_fit アルゴリズムの例
7.16 .ANY セクションのソートアルゴリズムの使用例
8.17 スキャッタファイルの処理時の複数のマッチングをリンカが解決する方法
8.18 リンカによって生成されたコンテンツによって .ANY セクションがオーバーフローしたときの動作
8.17 スキャッタファイルの処理時の複数のマッチングをリンカが解決する方法
関連する参考文書
12.5 --any_sort_order=order
12.95 --map、--no_map
12.128 --section_index_display=type
12.155 --tiebreaker=option
12.4 --any_placement=algorithm
12.3 --any_contingency
12.3 --any_contingency
12.4 --any_placement=algorithm
12.71 --info=topic[,topic,…]
8.16 入力セクション記述の構文
非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.