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