Linux-MIPS系统调用保存的寄存器?

时间:2012-09-09 04:20:27

标签: c linux assembly mips system-calls

在Linux / MIPS上, syscalls (不是函数调用,通过syscall指令实际到内核空间的往返)保存了哪些寄存器?

RESTORE_SOME标题中的arch/mips/include/asm/stackframe.h宏判断,它看起来像r2-r7,r25,r28和r31被恢复,当然,被调用者保存的寄存器会被调用自动保存甚至在内核空间中的约定(将要使用它们的任何内核空间函数将在破坏它们之前保存它们自己)。这是对的吗?

当然,至少有一对(r2和r7)的值会被系统调用的结果所破坏。

3 个答案:

答案 0 :(得分:2)

我想MIPS ABI约定应该在系统调用之前准确定义哪些寄存器包含系统调用号和参数,以及在系统调用之后包含结果(包括错误代码)的寄存器。通常系统调用不使用堆栈,只注册。

答案 1 :(得分:2)

“为了与调用约定保持一致,系统调用保留o32定义为幸存函数调用的那些寄存器的值。” (See MIPS Run,第379页)

答案 2 :(得分:2)

请参阅this link以获取Linux / MIPS系统调用中寄存器使用情况的描述(我唯一知道的除了内核源本身之外)。