Skip to content

GoにおけるABI仕様

2025時点で、GoのABIは ABI0ABIInternal の2種類存在する。

従来からあったスタックベースABIの名称。

Go 1.17以降、ABIInternal といってレジスタベースのABIが導入された。これは名前の通り変更される可能性があるのでユーザーがアセンブリを手書きするときには利用できない。

Go ABIにおけるスタックのレイアウトで調べたが、ABI0ABIInternal はスタックフレームのレイアウトが異なる。そこで境界を跨いだ関数呼び出しを行うときに、ABI Wrapper という処理が挿入されている。

実際のコードはこの辺り。