ARM在Linux内核中注册r9

时间:2011-10-24 17:15:13

标签: linux-kernel arm cpu-registers abi

“ARM架构程序调用标准”(AAPCS / EABI)声明(5.1.1)

"The role of register r9 is platform specific."

"A virtual platform [...] may designate r9 as an additional callee-saved
 variable register, v6."

问题是:Linux内核是否将r9用于特殊用途?或者它是否用作普通的非易失性寄存器?

2 个答案:

答案 0 :(得分:1)

找出内核如何使用它的一种简单方法是简单地构建一个内核(CROSS_COMPILE=... ARCH=arm make vmlinux),然后反汇编整个内容,

${CROSS_COMPILE}objdump -d vmlinux.o | grep 'sb|r9'

检查(使用r9sb两个名称,因为它取决于你的objdump究竟是什么输出)。

如果您发现它在prologue / epilogue代码中使用(在push {..., r9, ...}stmfd sp!, {..., r9, ...}或其对应的pop / ldmfd等说明中),那么它就会被保存。否则,只是另一个划痕。结果可能取决于您的工具链,内核配置选项或ARM目标。

也就是说,如果编译Thumb-2内核,它将被callee保存。这是因为Thumb-2 push / pop仅以较低的注册集(和lr / pc以互补方式运作,push lr与{{pop pc配对1}})。

答案 1 :(得分:0)

我认为寄存器定义存储在include / asm-arm / ptrace.h

虽然不确定100%......