ベニアの概要

ベニアは、リンカによって生成され、プログラムに挿入される小さなコードセクションです。 BL 命令は PC 相対で、分岐範囲に制限があります。 そのため、分岐先が BL 命令の分岐範囲外にある場合、armlink はベニアを生成する必要があります。

BL 命令の範囲は、ARM の場合は 32MB、32 ビット Thumb の場合は 16MB、16 ビット Thumb の場合は 4MB です。 ベニアは、分岐命令の中間ターゲットとなるこで、分岐範囲を拡張します。 ベニアによって、分岐先アドレスが PC に設定されます。 これにより、ベニアは 4 GB のアドレス空間内のどこへでも分岐できるようになります。 ARM と Thumb の混合環境では、ベニアはプロセッサ状態の変更も処理します。

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

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

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

Show/hide関連項目

Copyright © 2010-2012 ARM. All rights reserved.ARM DUI 0474GJ
Non-ConfidentialID051612