アプリケーションバイナリインタフェース(ABI, 英: Application Binary Interface)とは、アプリケーション(ユーザ)プログラムとシステム(オペレーティングシステムやライブラリ)との間の、バイナリレベルのインタフェースである。また、アプリケーション相互間や、それらの部品(プラグイン等)とのバイナリインタフェースもある。
ABIはアプリケーションプログラミングインタフェース (API) とは異なる。APIはソースコードとライブラリ間のインタフェースを定義したものであり、同じAPIをサポートしたシステム間では同じソースコードをコンパイルして利用できる。一方、ABIはオブジェクトコードレベルのインタフェースであり、互換ABIをサポートするシステム間では同じ実行ファイルを変更無しで動作させることができる。 ABIには、以下のような定義が含まれる。 Intel Binary Compatibility Standard (iBCS) のような完全なABIでは[1]、オペレーティングシステム (OS) が何であれ必要な共有ライブラリが存在するなどの前提条件が満たされていれば、そのABIをサポートしたシステム間でプログラム(実行ファイル)を全く修正せずに動作させることができる。 他のABIとして例えばC++の名前修飾[2]や例外の伝播[3]や呼出規約があるが、あくまでも同じプラットフォーム上のコンパイラ間のABIであり、プラットフォーム間の互換性までは要求されない。 EABI (Embedded Application Binary Interface) とは、組み込みシステムのソフトウェアについてのファイルフォーマット、データ型、レジスタ使用法、スタックフレームの構成、関数の引数渡し方法などについての規約を意味する。 あるEABIをサポートするコンパイラで生成したオブジェクトコードは、同じEABIをサポートする別のコンパイラで生成したコードと互換性があり、コンパイラが異なっていても同じEABIに対応していればライブラリやオブジェクトコード間でリンク可能である。アセンブリ言語でコードを書く場合でもEABIに準拠するように書けば、他のコードとのリンクが保証される。 EABIと汎用OS向けABIとの主な違いは、アプリケーションのコードでも特権命令の使用が許されている点、ダイナミックリンクが要求されない点(完全に不可能とされている場合もある)、メモリを節約するためスタックフレームをなるべくコンパクトに構成している点が挙げられる[4]。 EABIが広く使われているCPUアーキテクチャとしては、PowerPC[5]、ARM[6]、MIPS[7]がある。 EABIの選択は性能に影響することがある[8][9]。 Unix系OSでは、同じハードウェアプラットフォーム上で非互換な複数のOSが動作する。 例えばRISCチップにおいては以下のような例がある。
概要
CPU - 命令セット、エンディアンなど。
データ - データ型、大きさ、配置(アラインメント)など。
呼出規約 - 関数の引数がどのように渡され、リターン値がどのように渡されるかを定義したもの。
システムコール - システムコール番号と具体的なシステムコールの仕組み。
実行ファイルやライブラリの詳細なフォーマット(UNIXならば、COFFやELFなど)。
EABI
ABI共通化の試みとその成果
POWER系 : AIX 5L / Solaris10g / Linux等
Size:13 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef