■ コラム(2章のp.43に挿入)「ABIで定義されているもの」 ---------------------------------------------------------------- ABIはOSに対するシステム・コール呼び出しの他,関数呼び出し時の 引数の積みかた・戻り値の返しかた,構造体のフィールド配置などを 定義してあります.RISC系CPUでは一般に明示的なスタック・ポインタを 持ちませんから,どのレジスタをスタック・ポインタとして利用するかも, ABIによって決められています. このためABIに準拠していれば,異なるコンパイラでコンパイルされた オブジェクト・ファイルをリンクして動作させることができます. またC言語で書かれた関数をアセンブラから呼び出したり,その逆を行ったり する場合には,アセンブラ側をABIに準拠して書けばいいことになります. ABIはCPUベンダなどが定義します.ABIはCPUごとに定義されるものですが, いくつかのバージョンがある場合があります.たとえば通常のABIとは別に, 組み込み向けにメモリ効率を意識したABIを定義したりする場合があります (組み込み(Embedded)向けということで,EABIなどと呼ばれることが多いようです). 利用するABIはコンパイル時にオプションで切替えられますが, 異なるABIでコンパイルされたオブジェクト・ファイルどうしはリンクさせても 正常に動作しないため,注意が必要です. ----------------------------------------------------------------