ABI
#Linux_System_Programming
APIはソースレベルインタフェースを定義するのに対し、ABIは、複数のソフトウェア断片がやりとりするための、
特定のアーキテクチャにおける
バイナリインタフェース
を定義する。
保証するものはバイナリ互換性
何を規定するか
関数呼び出しの方法
バイト順序
レジスタの使用方法
システムコールの呼び出し方法
リンクの方法
ライブラリの振る舞い
バイナリオブジェクトのフォーマット
ABIはマシンとOSで決まる
ABIの統一はなされていない。マシン特有の概念(レジスタやアセンブリ命令)に依存するので、ABIがマシンの名前(Alphaやx86-64)で呼ばれることも多い。
結局、ABIはマシン(x86-64など)とオペレーティングシステム(Linuxなど)の組み合わせの関数となっている。
ABIの知識がいつ必要か
普通は必要ない
なぜか?toolchain コンパイラやリンカ内にその知識が隠されているから
最適化が必要な時は必要
toolchain自体を作るときはもちろん必要
ABIはカーネルとtoolchainによって定義され実装されている