3.6.1 ベニアとは

ベニアは、分岐命令の中間ターゲットとなることで、分岐範囲を拡張します。

分岐命令 BL は PC 相対で、分岐範囲に制限があります。BL 命令の範囲は、ARM 命令に対して 32MB です。Thumb-2 テクノロジをサポートしているプロセッサの範囲は、16MB です。Thumb-2 テクノロジをサポートしていないプロセッサの範囲は、4MB です。
分岐先が BL 命令の分岐範囲外にある場合、armlink はベニアを生成する必要があります。ベニアによって、分岐先アドレスが PC に設定されます。これにより、ベニアは 4GB のアドレス空間内のどこへでも分岐できるようになります。ベニアが ARM と Thumb コードの間に挿入される場合、ベニアは命令セットの状態変化も処理します。
リンカでは、必要に応じて、以下のタイプのベニアを生成できます。
  • インラインベニア。
  • 短分岐ベニア。
  • 長分岐ベニア。
armlink は、ベニアごとに Veneer$$Code という名前の 1 つの入力セクションを作成します。ベニアは、他に要件を満たすことができる既存のベニアが存在しない場合にのみ生成されます。2 つの入力セクションに同じ分岐先への長分岐が含まれている場合、生成されるベニアは 1 つだけで、そのベニアを両方の命令で共有します。このようにベニアが共有されるのは、両方のセクションから同じ分岐先に到達できる場合のみです。
ARMv4T を使用している場合、分岐によって ARM ステートと Thumb® ステートの切り替えが発生すると、armlink はベニアを生成します。ARMv5TE 以降でも、条件分岐を使用している場合は、インターワーキングベニアが生成されます。これは、条件付きの BL 命令が存在しないためです。ARMv5 以降の B 命令には、状態変更用のベニアも必要です。

実行専用(XO)セクションが存在する場合、XO 準拠ベニアコードは XO 領域に作成されます。
関連する概念
3.6.2 ベニアの共有
3.6.3 ベニアのタイプ
3.6.4 位置非依存から絶対ベニアへの生成
3.6.5 スキャッタロード時のベニアの再利用
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.