GoにおけるABI仕様
2025時点で、GoのABIは ABI0 と ABIInternal の2種類存在する。
従来からあったスタックベースABIの名称。
ABIInternal
Section titled “ABIInternal”Go 1.17以降、ABIInternal といってレジスタベースのABIが導入された。これは名前の通り変更される可能性があるのでユーザーがアセンブリを手書きするときには利用できない。
ABI Wrapper
Section titled “ABI Wrapper”Go ABIにおけるスタックのレイアウトで調べたが、ABI0 と ABIInternal はスタックフレームのレイアウトが異なる。そこで境界を跨いだ関数呼び出しを行うときに、ABI Wrapper という処理が挿入されている。
実際のコードはこの辺り。