【发布时间】:2020-05-05 02:43:21
【问题描述】:
在 RISC-V 伪内核 (pk) 或 Linux 下运行的程序中,系统调用的调用约定是什么?
查看 riscv-gnu-toolchain 生成的代码,规则似乎是:
- 系统调用号传入
a7 - 系统调用参数在
a0中传递给a5 - 未使用的参数设置为
0 - 返回值在
a0中返回
是这个吗?
真的有必要将未使用的参数清零吗?
注册a6呢?这可以用于另一个 sycall 参数吗?
调用exit() 系统调用的示例:
li a0, 1 # argument that is used by the syscall
li a1, 0 # unused arguments
li a2, 0
li a3, 0
li a4, 0
li a5, 0
li a7, 93 # exit syscall number
【问题讨论】:
标签: system-calls calling-convention riscv