3.16 ベニアの概要

ベニアは、リンカによって生成され、プログラムに挿入される小さなコードセクションです。

BL 命令は PC 相対で、分岐範囲に制限があります。そのため、分岐先が BL 命令の分岐範囲外にある場合、armlink はベニアを生成する必要があります。

ARM 命令では、BL 命令の範囲は 32MB です。Thumb-2 テクノロジをサポートするプロセッサの範囲は 16MB です。Thumb-2 テクノロジをサポートしないプロセッサの範囲は 4MB です。

ベニアは、分岐命令の中間ターゲットとなることで、分岐範囲を拡張します。ベニアによって、分岐先アドレスが PC に設定されます。これにより、ベニアは 4GB のアドレス空間内のどこへでも分岐できるようになります。ARM と Thumb コードの間にベニアが挿入されていると、ベニアは命令セットの状態切り替えも処理します。

リンカでは、必要に応じて、以下のタイプのベニアを生成できます。

  • インラインベニア。

  • 短分岐ベニア。

  • 長分岐ベニア。

armlink は、ベニアごとに Veneer$$Code という名前の 1 つの入力セクションを作成します。ベニアは、他に要件を満たすことができる既存のベニアが存在しない場合にのみ生成されます。2 つの入力セクションに同じ分岐先への長分岐が含まれている場合、生成されるベニアは 1 つだけで、そのベニアを両方の命令で共有します。このようにベニアが共有されるのは、両方のセクションから同じ分岐先に到達できる場合のみです。

ARMv4T を使用している場合、分岐によって ARM 状態と Thumb® 状態の切り替えが発生すると、armlink はベニアを生成します。ARMv5TE 以降でも、条件分岐を使用している場合は、インターワーキングベニアが生成されます。これは、条件付きの BL 命令が存在しないためです。ARMv5 以降の B 命令には、状態変更用のベニアも必要です。

実行専用(XO)セクションが存在する場合は、XO 準拠のベニアコードのみが XO 領域で作成されます。

関連する概念
3.17 ベニアの共有
3.18 ベニアのタイプ
3.19 位置非依存から絶対ベニアへの生成
3.20 スキャッタロード時のベニアの再利用
非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.