bug-mes
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 09/16] lib: Add _sys_call_5 for Linux RV64.


From: W. J. van der Laan
Subject: [PATCH 09/16] lib: Add _sys_call_5 for Linux RV64.
Date: Sat, 24 Apr 2021 14:25:25 +0000

* include/linux/syscall.h: Add 5-argument syscall needed for
SYS_renameat2, currently only used on RV64.
* lib/linux/riscv64-mes-gcc/syscall.c: Same.
---
 include/linux/syscall.h             |  1 +
 lib/linux/riscv64-mes-gcc/syscall.c | 31 +++++++++++++++++++++++++++++
 2 files changed, 32 insertions(+)

diff --git a/include/linux/syscall.h b/include/linux/syscall.h
index 
0af5fd70180c608eb73cd4367e638d9bd7a1cd5e..5dc149239e4cb03712e7ba343fd29f9be410a7a2
 100644
--- a/include/linux/syscall.h
+++ b/include/linux/syscall.h
@@ -26,6 +26,7 @@ long _sys_call1 (long sys_call, long one);
 long _sys_call2 (long sys_call, long one, long two);
 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_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);

 #endif //__MES_SYSCALL_H
diff --git a/lib/linux/riscv64-mes-gcc/syscall.c 
b/lib/linux/riscv64-mes-gcc/syscall.c
index 
b9006a495492718b137f00a1465b3d6026659de3..45d679c9ceeb3751d7bc2f3e408eb89984222b96
 100644
--- a/lib/linux/riscv64-mes-gcc/syscall.c
+++ b/lib/linux/riscv64-mes-gcc/syscall.c
@@ -93,6 +93,23 @@ __sys_call4 (long sys_call, long one, long two, long three, 
long four)
        );
   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*

 long
@@ -164,3 +181,17 @@ _sys_call4 (long sys_call, long one, long two, long three, 
long four)
     errno = 0;
   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;
+}
--
2.27.0





reply via email to

[Prev in Thread] Current Thread [Next in Thread]