Chinaunix首页 | 论坛 | 博客
  • 博客访问: 140780
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 307
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-15 18:48
文章分类

全部博文(41)

文章存档

2015年(5)

2014年(23)

2013年(13)

我的朋友

分类: 嵌入式

2013-08-27 18:27:16

                                                          arm AAPCS(程序调用标准)

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)的规则是可见的


阅读(1649) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~