Go ABIにおけるレジスタの意味
以下の資料に準拠。
スタックポインタ。疑似レジスタ SP 相当。
最も下位のアドレスを記録してあり、関数呼び出しがあるたびに減算されていく。
ベースポインタ。現在のスタックフレーム底アドレスを保持する。SP よりローカル変数領域を含まない。
BP レジスタはリンクリストになっているので、
MOVQ (BP), BPとすると関数呼び出し前の BP 値を取得できる。同じようにすればさらに上位の呼び出し元にも戻れる。具体的な探索例はGoアセンブリ上のスタック探索にある。
クロージャコンテキストポインタを保持するレジスタ。コンテキストの具体的な内容はGoのコンテキストレジスタに書いた。
インストラクションポインタ。次に実行する命令のメモリ位置を記録する。疑似レジスタ PC 相当。
R14(TLS)
Section titled “R14(TLS)”スレッドローカルストレージを指すレジスタ。ドキュメントでは Thread pointer と表記されている。常にカレントゴルーチンの g 構造体を参照している。
Arm64呼び出し規約にも少し書いた。