Каково соглашение о вызовах для системного вызова в программе, работающей под псевдоядром RIS C -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