コンパイラの内部に関してそこまで詳しいわけではないのですが、資料を集めてみました。質問の答えに直接結びつかないものもありますが列挙します。
-
ABI Policy and Guidelines
- libstdc++ がどの ABI に従っているかの資料です。これによると、 Itnanium ABI を利用していると書かれています。( x86_64 なのにItnaniumなのが面白いですね)
-
Itanium C++ ABI
- Itanium ABI の資料です。
- こちらを見ますと、 "In general, this document is meant to serve as a generic specification which can be used by C++ implementations on a variety of platforms. It does this by layering on top of a platform's base C ABI." とあるので、単純な関数呼び出し規約などはこの資料では定義されていないようです。
-
LSB Specifications
- Linux Standard Base の資料です。 ABI 以外にも色々ありますが、 C ABI に関してもこちらから辿ることができます。
- AMD64 の資料をたどって関数呼び出しの項目を見てみると、 "System V Application Binary Interface" が参照されています。まさかの System V. ABI はアーキテクチャの歴史が詰まっている
-
System V Application Binary Interface
AMD64 Architecture Processor Supplement Draft Version 0.95
- という訳で本命の System V ABI の資料です。
- "3.2 Function Calling Sequence" のあたりを読むと良さそうですね。 "3.2.3 Parameter Passing" の部分でまさにレジスタの話などが書かれています。
- それにしても、 Draft Version なんですね……