inline 5- and 6-argument syscalls on arm
authorRich Felker <dalias@aerifal.cx>
Sun, 23 Nov 2014 02:06:40 +0000 (21:06 -0500)
committerRich Felker <dalias@aerifal.cx>
Sun, 23 Nov 2014 02:06:40 +0000 (21:06 -0500)
arch/arm/syscall_arch.h

index 845f2e4..c1c9466 100644 (file)
@@ -54,10 +54,23 @@ static inline long __syscall4(long n, long a, long b, long c, long d)
 
 static inline long __syscall5(long n, long a, long b, long c, long d, long e)
 {
-       return (__syscall)(n, a, b, c, d, e);
+       register long r7 __asm__("r7") = n;
+       register long r0 __asm__("r0") = a;
+       register long r1 __asm__("r1") = b;
+       register long r2 __asm__("r2") = c;
+       register long r3 __asm__("r3") = d;
+       register long r4 __asm__("r4") = e;
+       __asm_syscall("r"(r7), "0"(r0), "r"(r1), "r"(r2), "r"(r3), "r"(r4));
 }
 
 static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
 {
-       return (__syscall)(n, a, b, c, d, e, f);
+       register long r7 __asm__("r7") = n;
+       register long r0 __asm__("r0") = a;
+       register long r1 __asm__("r1") = b;
+       register long r2 __asm__("r2") = c;
+       register long r3 __asm__("r3") = d;
+       register long r4 __asm__("r4") = e;
+       register long r5 __asm__("r5") = f;
+       __asm_syscall("r"(r7), "0"(r0), "r"(r1), "r"(r2), "r"(r3), "r"(r4), "r"(r5));
 }