首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内核中的ARM寄存器r9

内核中的ARM寄存器r9
EN

Stack Overflow用户
提问于 2011-10-25 01:15:13
回答 2查看 1.3K关注 0票数 6

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

代码语言:javascript
复制
"The role of register r9 is platform specific."

代码语言:javascript
复制
"A virtual platform [...] may designate r9 as an additional callee-saved
 variable register, v6."

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-26 16:34:50

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

代码语言:javascript
复制
${CROSS_COMPILE}objdump -d vmlinux.o | grep 'sb|r9'

检查(同时使用r9sb名称,因为这取决于您的objdump到底是什么输出)。

如果你在前言/结尾代码(如push {..., r9, ...}stmfd sp!, {..., r9, ...}或其相应的pop/ldmfd指令)中使用过它,那么它就是被调用方保存的。否则,就是另一个抓取注册表。结果可能取决于您的工具链、内核配置选项或ARM目标。

也就是说,如果你编译了一个Thumb-2内核,它将不会被调用保存。这是因为Thumb-2 push/pop只在较低的reg集合上运行( lr/pc以互补的方式,push lrpop pc配对)。

票数 1
EN

Stack Overflow用户

发布于 2011-10-25 03:13:06

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

但不能百分之百确定...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7879278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档