首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在slow_work_pending上,arm架构的最新内核代码有问题吗?

在slow_work_pending上,arm架构的最新内核代码有问题吗?
EN

Stack Overflow用户
提问于 2019-12-20 12:57:28
回答 1查看 172关注 0票数 0

目前,我正在为ARM架构使用嵌入式Linux内核。作为bootlin提供的最新内核源代码,我在arch/arm/内核/entry-Common.S中看到了这些代码。

代码语言:javascript
复制
slow_work_pending:
    mov r0, sp    @'regs'
    mov r2, why    @'syscall'
    bl do_work_pending

syscall参数do_work_pending()的假设是r1吗?

在启动内核时,我尝试通过打印该参数来调试这个参数。当时why寄存器应该是0,但是printk说syscall是-173b500。

这些代码是错误的还是故意编码的?

我认为在内核启动时,why应该是0,因为它不是真正的syscall,但是用printk打印它会给出奇怪的负数。我对why的理解错了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-20 17:55:23

考虑到最近的上游源是如何具有相同的代码的(尽管文件名已经更改为用一个_替换-),那么除非它是一个非常罕见的代码路径,否则它可能是没有错的。很可能你误解了这里发生的事情。

但让我们看看细节

代码语言:javascript
复制
slow_work_pending:
    mov r0, sp    @'regs'
    mov r2, why    @'syscall'
    bl do_work_pending

是否可以将do_work_pending()的syscall参数设为r1?

考虑到signal.c中函数的原型

代码语言:javascript
复制
asmlinkage int
do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)

答案似乎是“否”-- syscall是第三个参数,因此应该在r2中,因为r1包含thread_flags --在您研究的围绕slow_work_pending的代码之前,大概已经这样做了。

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

https://stackoverflow.com/questions/59425671

复制
相关文章

相似问题

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