`
dawuafang
  • 浏览: 1107088 次
文章分类
社区版块
存档分类
最新评论

FP寄存器及frame pointer介绍

 
阅读更多
理论上来说,ARM的15个通用寄存器是通用的,但实际上并非如此,特别是在过程调用的过程中。
PCS(Procedure Call Standard for Arm architecture)就定义了过程调用中,寄存器的特殊用途。

Role in the procedure call standard
R15 PC The Program Counter.
R14 LR The Link Register.
R13 SP The Stack Pointer.
R12 IP The Intra-Procedure-call scratch register. (可简单的认为暂存SP,没啥用)

实际上,还有一个R11是optional的,被称为FP,即frame pointer。

1,stack frame
stack我们都知道,每一个进程都有自己的栈。考虑进程执行时发生函数调用的场景,母函数和子函数使用的是同一个栈,在通常的情况下,我们并不需要区分母函数和子函数分别使用了栈的哪个部分。但是,当我们需要在执行过程中对函数调用进行backtrace的时候,这一信息就很重要了。
简单的说,stack frame就是一个函数所使用的stack的一部分,所有函数的stack frame串起来就组成了一个完整的栈。stack frame的两个边界分别由FP和SP来限定。

2,backtrace
在程序执行过程中(通常是发生了某种意外情况而需要进行调试),通过SP和FP所限定的stack frame,就可以得到母函数的SP和FP,从而得到母函数的stack frame(PC,LR,SP,FP会在函数调用的第一时间压栈),以此追溯,即可得到所有函数的调用顺序。
3,gcc关于stack frame的优化选项
看起来FP只是在backtrace的时候有用,所以如果我们没有backstrace的需求,我们是否可以不使用FP。

转自:http://blog.chinaunix.net/uid-25871104-id-2938389.html
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics