2

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

RESTORE_SOME从头文件中的宏来看arch/mips/include/asm/stackframe.h,看起来 r2-r7、r25、r28 和 r31 被恢复了,当然调用约定会自动保存被调用者保存的寄存器,即使在内核空间中(任何将使用它们的内核空间函数)会在破坏它们之前自行保存它们)。它是否正确?

当然,至少有几个(r2 和 r7)的值会随着系统调用的结果而被破坏。

4

3 回答 3

2

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

于 2012-09-09T06:20:04.467 回答
2

“按照调用约定,系统调用保留了 o32 定义为幸存函数调用的那些寄存器的值。” (参见 MIPS 运行,第 379 页)

于 2012-09-11T11:21:37.920 回答
2

有关Linux/MIPS 系统调用中寄存器使用的描述(除了内核源本身之外,我知道的唯一一个),请参见此链接。

于 2012-09-11T12:00:02.827 回答