ABI : Application Binary Interface 应用程序二进制接口
EABI : Embedded ABI 嵌入式ABI
PCS : Procedure Call Standard 程序调用标准
AAPCS : PCS for ARM Architecture ARM体系结构程序调用标准
APCS : ARM Procedure Call Standard ARM程序调用标准(已经废弃)
TPCS : Thumb Procedure Call Standard Thumb程序调用标准(已经废弃)
ATPCS : ARM-Thumb Procedure Call Standard
PIC, PID : Position-independent code, position-independent data 位置独立代码和数据
Activation(call-frame) stack : 程序调用记录栈
Activation record(call frame) : 用于程序保存寄存器和本地变量的内存(通常在栈上申请)
Variadic routine : 模板函数, 由调用程序决定它的参数个数和类型,而不是被调用函数.
Scratch register( temporary register) : 草稿寄存器, 用来保存计算的中间值(通常在程序中未命名且有限的生命周期).
Variable register : 变量寄存器, 用来保存变量的值, 通常用于程序的本地变量.
Program State : 程序状态, 程序的内存状态,包括寄存器的值
=========================================================
1. 在被调用程序(called)开始执行之前, 调用者(caller)负责创建一个程序状态 (一般是SP设置,以及参数传递)
2. 被调用程序保存调用者(caller)传递过来的程序状态
3. 被调用程序正确修改它的程序状态
一些相关的变种, 例如可以使用R9寄存器来检查执行环境.
AAPCS标准指出四个小节:
* 数据的布局
* 栈的布局 和 程序间公共接口的调用
* 处理器扩展的变化, 或者说执行环境限制地址模型
* C和C++语言数据类型的绑定
AAPCS 要求:
* 任何时间, 栈限制和基础栈对齐是可见的(stack limits and basic stack alignment are observed)
* 任何程序调用静态链接跳转时, 使用IP(r12)的规则是可见的