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