github.com/afumu/libc@v0.0.6/musl/arch/s390x/syscall_arch.h (about) 1 #define __SYSCALL_LL_E(x) (x) 2 #define __SYSCALL_LL_O(x) (x) 3 4 #define __asm_syscall(ret, ...) do { \ 5 __asm__ __volatile__ ("svc 0\n" \ 6 : ret : __VA_ARGS__ : "memory"); \ 7 return r2; \ 8 } while (0) 9 10 static inline long __syscall0(long n) 11 { 12 register long r1 __asm__("r1") = n; 13 register long r2 __asm__("r2"); 14 __asm_syscall("=r"(r2), "r"(r1)); 15 } 16 17 static inline long __syscall1(long n, long a) 18 { 19 register long r1 __asm__("r1") = n; 20 register long r2 __asm__("r2") = a; 21 __asm_syscall("+r"(r2), "r"(r1)); 22 } 23 24 static inline long __syscall2(long n, long a, long b) 25 { 26 register long r1 __asm__("r1") = n; 27 register long r2 __asm__("r2") = a; 28 register long r3 __asm__("r3") = b; 29 __asm_syscall("+r"(r2), "r"(r1), "r"(r3)); 30 } 31 32 static inline long __syscall3(long n, long a, long b, long c) 33 { 34 register long r1 __asm__("r1") = n; 35 register long r2 __asm__("r2") = a; 36 register long r3 __asm__("r3") = b; 37 register long r4 __asm__("r4") = c; 38 __asm_syscall("+r"(r2), "r"(r1), "r"(r3), "r"(r4)); 39 } 40 41 static inline long __syscall4(long n, long a, long b, long c, long d) 42 { 43 register long r1 __asm__("r1") = n; 44 register long r2 __asm__("r2") = a; 45 register long r3 __asm__("r3") = b; 46 register long r4 __asm__("r4") = c; 47 register long r5 __asm__("r5") = d; 48 __asm_syscall("+r"(r2), "r"(r1), "r"(r3), "r"(r4), "r"(r5)); 49 } 50 51 static inline long __syscall5(long n, long a, long b, long c, long d, long e) 52 { 53 register long r1 __asm__("r1") = n; 54 register long r2 __asm__("r2") = a; 55 register long r3 __asm__("r3") = b; 56 register long r4 __asm__("r4") = c; 57 register long r5 __asm__("r5") = d; 58 register long r6 __asm__("r6") = e; 59 __asm_syscall("+r"(r2), "r"(r1), "r"(r3), "r"(r4), "r"(r5), "r"(r6)); 60 } 61 62 static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) 63 { 64 if (n == SYS_mmap) return __syscall1(n, (long)(long[]){a,b,c,d,e,f}); 65 66 register long r1 __asm__("r1") = n; 67 register long r2 __asm__("r2") = a; 68 register long r3 __asm__("r3") = b; 69 register long r4 __asm__("r4") = c; 70 register long r5 __asm__("r5") = d; 71 register long r6 __asm__("r6") = e; 72 register long r7 __asm__("r7") = f; 73 __asm_syscall("+r"(r2), "r"(r1), "r"(r3), "r"(r4), "r"(r5), "r"(r6), "r"(r7)); 74 } 75 76 #define SYSCALL_USE_SOCKETCALL