"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用于某些特殊目的?或者它被用作普通的非易失性寄存器?
发布于 2011-10-26 16:34:50
了解内核如何使用它的一种简单方法是简单地构建一个内核(CROSS_COMPILE=... ARCH=arm make vmlinux),然后反汇编整个内核,
${CROSS_COMPILE}objdump -d vmlinux.o | grep 'sb|r9'检查(同时使用r9和sb名称,因为这取决于您的objdump到底是什么输出)。
如果你在前言/结尾代码(如push {..., r9, ...}、stmfd sp!, {..., r9, ...}或其相应的pop/ldmfd指令)中使用过它,那么它就是被调用方保存的。否则,就是另一个抓取注册表。结果可能取决于您的工具链、内核配置选项或ARM目标。
也就是说,如果你编译了一个Thumb-2内核,它将不会被调用保存。这是因为Thumb-2 push/pop只在较低的reg集合上运行( lr/pc以互补的方式,push lr与pop pc配对)。
发布于 2011-10-25 03:13:06
我认为寄存器定义存储在include/asm-arm/ptrace.h中
但不能百分之百确定...
https://stackoverflow.com/questions/7879278
复制相似问题