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)的規則是可見的