Skip to content

Go ABIにおけるレジスタの意味

以下の資料に準拠。

スタックポインタ。疑似レジスタ SP 相当。

最も下位のアドレスを記録してあり、関数呼び出しがあるたびに減算されていく。

ベースポインタ。現在のスタックフレーム底アドレスを保持する。SP よりローカル変数領域を含まない。

BP レジスタはリンクリストになっているので、

MOVQ (BP), BP

とすると関数呼び出し前の BP 値を取得できる。同じようにすればさらに上位の呼び出し元にも戻れる。具体的な探索例はGoアセンブリ上のスタック探索にある。

クロージャコンテキストポインタを保持するレジスタ。コンテキストの具体的な内容はGoのコンテキストレジスタに書いた。

インストラクションポインタ。次に実行する命令のメモリ位置を記録する。疑似レジスタ PC 相当。

スレッドローカルストレージを指すレジスタ。ドキュメントでは Thread pointer と表記されている。常にカレントゴルーチンの g 構造体を参照している。

Arm64呼び出し規約にも少し書いた。