4.1.5. リンカによって生成されるベニア

ベニアは、分岐で以下が必要となる場合に、リンカによって自動的に挿入される小さなコードセグメントです。

ベニアは、次にターゲットアドレスに分岐する、元の分岐のターゲットになります。

リンカでは、以前の呼び出しで生成されたベニアを、その後の同じ関数の呼び出しで再利用できます。ただし、どちらのセクションからもそれらの呼び出しに到達できる必要があります。

ベニアとのインターワークの詳細については、以下を参照して下さい。

ベニアの型

ベニアの型を以下に示します。

long

任意の状態の切り替えを含めることができます。

short

状態の切り替えのみを実行します。

inline

状態の切り替えのみを実行しますが、ベニアが挿入される関数の先頭に追加されます。

Veneer$$Code セクション

リンカでは、ベニアごとに Veneer$$Code という入力セクションを作成します。*(Veneer$$Code) を使用すると、スキャッタローディング記述ファイルにベニアコードを配置できます。ただし安全でない場合、リンカはベニアコードを配置しません。

実行領域のアドレス範囲やサイズ制限により、ベニア入力セクションを領域に割り当てることができない場合があります。指定した領域にベニアを追加できない場合は、ベニアを生成した、再配置された入力セクションを含む実行領域にそのベニアが追加されます。

詳細については、RealView Compilation Tools v3.0 Linker and Utilities Guideを参照して下さい。

使用するベニア数の削減

以下のことに注意すると、使用するベニアの数を最小限に抑えることができます。

  • 呼び出された側の関数が呼び出し元の範囲内に収まるようにメモリマップを構築します。

  • 範囲内の関数を繰り返し呼び出すことによってベニアを共有するようにします。

  • 状態の切り替えを最小限に抑えます。

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0203GJ
Non-Confidential