AEABIへの準拠
ArmArm用IARビルドツールは、Arm Limitedが提唱するEmbedded Application Binary Interface for Arm (AEABI)をサポートしています。このインタフェースは、Intel IA64 ABIインタフェースに基づいています。AEABIに準拠すると、他のベンダにより提供されるツールで生成されていても、モジュールを他の任意のAEABI準拠モジュールとリンクできるというメリットがあります。
Arm用IARビルドツールは、AEABIの以下のパートをサポートしています。
32ビットのArmアーキテクチャのプロシージャ呼び出し標準 | |
32ビットのArmアーキテクチャのC++ ABI | |
32ビットのArmアーキテクチャのELF | |
32ビットのArmアーキテクチャのDWARF | |
32ビットのArmアーキテクチャのランタイムABI | |
32ビットのArmアーキテクチャのCライブラリABI | |
64ビットのArmアーキテクチャのプロシージャ呼び出し標準 | |
64ビットのArmアーキテクチャのベクタ関数アプリケーションバイナリインターフェース仕様 | |
64ビットのArmアーキテクチャのELF | |
64ビットのArmアーキテクチャのDWARF | |
64ビットのArmアーキテクチャのC++ ABI |
IARビルドツールは、明示的なオペレーティングシステムがないROMベースシステムのみをサポートします。
注:
AEABIはC89専用です。
AEABIは、C++ライブラリとの互換性を指定しません。
enumおよびwchar_tのいずれのサイズも、AEABIでは一定ではありません。64ビットArmにはランタイムABIまたはC ABIはありません。64 ビットモードのコンパイラオプション
--aeabiには影響はありません。
AEABI準拠が有効な場合は、特定のプリプロセッサ定数は実際の定数変数になります。
IAR ILINKリンカを使用してAEABI準拠モジュールをリンクする
IAR ILINKリンカを使用してアプリケーションを構築する場合、以下のタイプのモジュールを組み合わせることができます。
IARビルドツールを使用して生成されたモジュール(AEABI準拠モジュールとAEABI準拠でないモジュールの両方)
別のベンダのビルドツールを使用して生成されたAEABI準拠モジュール
注記
別のベンダのコンパイラで生成されたモジュールをリンクするには、そのベンダの追加サポートライブラリが必要になることがあります。
IAR ILINKリンカは、オブジェクトファイルに含まれる属性に基づき、使用する適切な標準C/C++ライブラリが自動的に選択されます。インポートされるオブジェクトファイルには、これらのすべての属性が含まれないことがあります。そのため、このような場合、以下の1つ以上の項目を検証して、ILINKによる標準ライブラリの選択をサポートする必要があります。
少なくても1つのIAR C/C++コンパイラfor Armでのモジュールビルドを含めます。
‑‑cpuリンカオプションで指定する使用するCPU。完全なI/O が必要な場合、「フル」のライブラリ設定の標準ライブラリとのリンクの保証。
潜在的な非互換性は以下を含みますが、これらがすべてではありません。
enumのサイズwchar_tのサイズ呼び出し規約
使用された定数セット
AEABI-準拠のモジュールをリンクする際には、ILINK を使用したリンクとアプリケーションのリンクの章の情報も考慮してください。
サードパーティ製リンカを使用してAEABI準拠のモジュールをリンクする
IAR C/C++コンパイラを使用してモジュールを生成し、このモジュールを別のベンダのリンカを使用してリンクする場合、このモジュールはAEABI準拠モジュールでなければなりません(AEABI準拠をコンパイラで有効にするを参照)。
また、このモジュールが任意のIAR固有コンパイラ拡張を使用する場合、これらの機能が他のベンダのツールによりサポートされている必要があります。特に以下のことに注意してください。
下の拡張のサポートを検証する必要があります:
#pragma pack、__no_init、__rootおよび__ramfunc以下の拡張は使用しても問題ありません。
#pragma location/@、__arm、__thumb、__svc、__irq、__fiq、および__nested
AEABI準拠をコンパイラで有効にする
AEABI準拠をコンパイラで有効にするには、‑‑aeabiオプションを設定します。この場合、--guard_callsオプションも使用する必要があります。
注意
IDEで、[プロジェクト]>[オプション]>[C/C++コンパイラ]>[追加オプション]ページを使用して、‑‑aeabiオプションおよび‑‑guard_callsオプションを指定します。
危険
コマンドラインで、オプション‑‑aeabiと‑‑guard_callsを使用して、コンパイラでのAEABIサポートを有効にします。
また、特定のシステムヘッダファイルでAEABIのサポートを有効にするには、システムヘッダを含める前にプロセッサシンボル_AEABI_PORTABILITY_LEVELを非ゼロに定義し、シンボルAEABI_PORTABLEがヘッダファイルの追加後に非ゼロに設定されるようにする必要があります。
#define _AEABI_PORTABILITY_LEVEL 1 #undef _AEABI_PORTABLE #include <header.h> #ifndef _AEABI_PORTABLE #error "header.h not AEABI compatible" #endif