ABIってなに?

2012/03/04開発環境import

ABIとは

Application Binary Interfaceの略称です。
何のことかと云われると、高級言語(組み込みだと主にCになるでしょう)向けの、
データ配置ルールや関数引数と返値のレジスタ渡しルールを定めたモノです。
これが異なると、オブジェクトリンク時に適切に処理ができません。

object file提供のソフトを結合するケースや、ABIに併せてバイナリデータを
流し込んでくるようなインタフェースを設計した場合に、アタリが出ます。
全てのソースファイルを自分(自社)でbuildするソフト屋ならば、アタリは少ないでしょうが、
基本的に複数名での開発や、LinuxなどのOSを使う場合に動的リンクするライブラリのABIも
揃っていないと、実行時にシヌこととなるでしょう。

このあたり、エミュレータ作ってたり、開発環境の準備をするヒトなんかは
しっかりと把握しておかないとダメですね。昨今はCPUも種類が増えていますし、
バイナリレベルで下位互換を保ってはいても、拡張機能を使うライブラリと
リンクするときなども注意が必要です。

・・・恥ずかしながら、某Java Engineの結合の話が来るまで自分も知らなかったです。
昔は情報源が乏しかったのと、コンパイラなんて使うモノの挙動を見ればいいやと思っていたのですね。
しっかりと仕様書があるので、これを神様として、コンパイラの妥当性すらも
検証していくべきであると考えるようになりましたとさ。。。

ARM

ARM社のオンライン情報サイトが有用です。
コンパイラの参照資料として、以下があげられていました。後半にABIの付いたモノが、
今回ご紹介するものだと思います(未確認)
  • BSABI
  • BPABI
  • EHABI
  • CLIBABI
  • AADWARF
  • CPPABI
  • AAPCS
  • RTABI
  • AAELF
  • ABI Addenda


PowerPC

IBMやfreescale社が ABI仕様書を出しています。
ARMとは異なり、Instruction Setがアーキテクチャにより増減している模様。
今まさにはまっているところなので、後日まとめたいと思います。