The 64 bit x86 C Calling Convention

重新看了一下x86-64 下面的c call convention. 这个可能对于debug core会有点帮助,看看参数是放在那些寄存器里面的。

caller saved reg有下面这些:

  1. rdi, rsi, rdx, rcx, r8, r9 里面保存参数(按顺序)
  2. r10, r11 如果使用也需要保存
  3. 返回值放在rax上
  4. 多余的参数放在stack里面,最后一个参数先压栈

callee saved reg有下面这些:

  1. rbx, rbp, r12, r13, r14, r15 如果使用需要保存
  2. push rbp; mov rbp, rsp; sub 12 rsp ; … pop rbp

这些都是基本的寄存器,对于xmm0(x87 fp好像和这个重合), ymm0这些扩展寄存器,就不太确定是怎么个约定了。

https://www.agner.org/optimize/calling_conventions.pdf