lib: Add _sys_call_5 for Linux RISC-V64.
* include/linux/syscall.h (_sys_call5): Declare 5-argument syscall needed for SYS_renameat2, currently only used on RISC-V64. * lib/linux/riscv64-mes-gcc/syscall.c (__sys_call5, _sys_call5): Implement it.
This commit is contained in:
parent
f5d6a7b100
commit
e07d1052aa
|
@ -1,6 +1,7 @@
|
||||||
/* -*-comment-start: "//";comment-end:""-*-
|
/* -*-comment-start: "//";comment-end:""-*-
|
||||||
* GNU Mes --- Maxwell Equations of Software
|
* GNU Mes --- Maxwell Equations of Software
|
||||||
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
* Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||||
|
* Copyright © 2021 W. J. van der Laan <laanwj@protonmail.com>
|
||||||
*
|
*
|
||||||
* This file is part of GNU Mes.
|
* This file is part of GNU Mes.
|
||||||
*
|
*
|
||||||
|
@ -26,6 +27,7 @@ long _sys_call1 (long sys_call, long one);
|
||||||
long _sys_call2 (long sys_call, long one, long two);
|
long _sys_call2 (long sys_call, long one, long two);
|
||||||
long _sys_call3 (long sys_call, long one, long two, long three);
|
long _sys_call3 (long sys_call, long one, long two, long three);
|
||||||
long _sys_call4 (long sys_call, long one, long two, long three, long four);
|
long _sys_call4 (long sys_call, long one, long two, long three, long four);
|
||||||
|
long _sys_call5 (long sys_call, long one, long two, long three, long four, long five);
|
||||||
long _sys_call6 (long sys_call, long one, long two, long three, long four, long five, long six);
|
long _sys_call6 (long sys_call, long one, long two, long three, long four, long five, long six);
|
||||||
|
|
||||||
#endif //__MES_SYSCALL_H
|
#endif //__MES_SYSCALL_H
|
||||||
|
|
|
@ -93,6 +93,23 @@ __sys_call4 (long sys_call, long one, long two, long three, long four)
|
||||||
);
|
);
|
||||||
return __a0;
|
return __a0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long
|
||||||
|
__sys_call5 (long sys_call, long one, long two, long three, long four, long five)
|
||||||
|
{
|
||||||
|
register long __a7 asm ("a7") = sys_call;
|
||||||
|
register long __a0 asm ("a0") = one;
|
||||||
|
register long __a1 asm ("a1") = two;
|
||||||
|
register long __a2 asm ("a2") = three;
|
||||||
|
register long __a3 asm ("a3") = four;
|
||||||
|
register long __a4 asm ("a4") = five;
|
||||||
|
asm volatile (
|
||||||
|
"ecall\n\t"
|
||||||
|
: "+r" (__a0)
|
||||||
|
: "r" (__a7), "r" (__a1), "r" (__a2), "r" (__a3), "r" (__a4)
|
||||||
|
);
|
||||||
|
return __a0;
|
||||||
|
}
|
||||||
// *INDENT-ON*
|
// *INDENT-ON*
|
||||||
|
|
||||||
long
|
long
|
||||||
|
@ -164,3 +181,17 @@ _sys_call4 (long sys_call, long one, long two, long three, long four)
|
||||||
errno = 0;
|
errno = 0;
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long
|
||||||
|
_sys_call5 (long sys_call, long one, long two, long three, long four, long five)
|
||||||
|
{
|
||||||
|
long r = __sys_call5 (sys_call, one, two, three, four, five);
|
||||||
|
if (r < 0)
|
||||||
|
{
|
||||||
|
errno = -r;
|
||||||
|
r = -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
errno = 0;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue