1570af302Sopenharmony_ci#define __SYSCALL_LL_E(x) \ 2570af302Sopenharmony_ci((union { long long ll; long l[2]; }){ .ll = x }).l[0], \ 3570af302Sopenharmony_ci((union { long long ll; long l[2]; }){ .ll = x }).l[1] 4570af302Sopenharmony_ci#define __SYSCALL_LL_O(x) 0, __SYSCALL_LL_E((x)) 5570af302Sopenharmony_ci 6570af302Sopenharmony_ci#define SYSCALL_RLIM_INFINITY (-1UL/2) 7570af302Sopenharmony_ci 8570af302Sopenharmony_ci#if __mips_isa_rev >= 6 9570af302Sopenharmony_ci#define SYSCALL_CLOBBERLIST \ 10570af302Sopenharmony_ci "$1", "$3", "$11", "$12", "$13", \ 11570af302Sopenharmony_ci "$14", "$15", "$24", "$25", "memory" 12570af302Sopenharmony_ci#else 13570af302Sopenharmony_ci#define SYSCALL_CLOBBERLIST \ 14570af302Sopenharmony_ci "$1", "$3", "$11", "$12", "$13", \ 15570af302Sopenharmony_ci "$14", "$15", "$24", "$25", "hi", "lo", "memory" 16570af302Sopenharmony_ci#endif 17570af302Sopenharmony_ci 18570af302Sopenharmony_cistatic inline long __syscall0(long n) 19570af302Sopenharmony_ci{ 20570af302Sopenharmony_ci register long r7 __asm__("$7"); 21570af302Sopenharmony_ci register long r2 __asm__("$2"); 22570af302Sopenharmony_ci __asm__ __volatile__ ( 23570af302Sopenharmony_ci "addu $2,$0,%2 ; syscall" 24570af302Sopenharmony_ci : "=&r"(r2), "=r"(r7) 25570af302Sopenharmony_ci : "ir"(n), "0"(r2) 26570af302Sopenharmony_ci : SYSCALL_CLOBBERLIST, "$8", "$9", "$10"); 27570af302Sopenharmony_ci return r7 && r2>0 ? -r2 : r2; 28570af302Sopenharmony_ci} 29570af302Sopenharmony_ci 30570af302Sopenharmony_cistatic inline long __syscall1(long n, long a) 31570af302Sopenharmony_ci{ 32570af302Sopenharmony_ci register long r4 __asm__("$4") = a; 33570af302Sopenharmony_ci register long r7 __asm__("$7"); 34570af302Sopenharmony_ci register long r2 __asm__("$2"); 35570af302Sopenharmony_ci __asm__ __volatile__ ( 36570af302Sopenharmony_ci "addu $2,$0,%2 ; syscall" 37570af302Sopenharmony_ci : "=&r"(r2), "=r"(r7) 38570af302Sopenharmony_ci : "ir"(n), "0"(r2), "r"(r4) 39570af302Sopenharmony_ci : SYSCALL_CLOBBERLIST, "$8", "$9", "$10"); 40570af302Sopenharmony_ci return r7 && r2>0 ? -r2 : r2; 41570af302Sopenharmony_ci} 42570af302Sopenharmony_ci 43570af302Sopenharmony_cistatic inline long __syscall2(long n, long a, long b) 44570af302Sopenharmony_ci{ 45570af302Sopenharmony_ci register long r4 __asm__("$4") = a; 46570af302Sopenharmony_ci register long r5 __asm__("$5") = b; 47570af302Sopenharmony_ci register long r7 __asm__("$7"); 48570af302Sopenharmony_ci register long r2 __asm__("$2"); 49570af302Sopenharmony_ci __asm__ __volatile__ ( 50570af302Sopenharmony_ci "addu $2,$0,%2 ; syscall" 51570af302Sopenharmony_ci : "=&r"(r2), "=r"(r7) 52570af302Sopenharmony_ci : "ir"(n), "0"(r2), "r"(r4), "r"(r5) 53570af302Sopenharmony_ci : SYSCALL_CLOBBERLIST, "$8", "$9", "$10"); 54570af302Sopenharmony_ci return r7 && r2>0 ? -r2 : r2; 55570af302Sopenharmony_ci} 56570af302Sopenharmony_ci 57570af302Sopenharmony_cistatic inline long __syscall3(long n, long a, long b, long c) 58570af302Sopenharmony_ci{ 59570af302Sopenharmony_ci register long r4 __asm__("$4") = a; 60570af302Sopenharmony_ci register long r5 __asm__("$5") = b; 61570af302Sopenharmony_ci register long r6 __asm__("$6") = c; 62570af302Sopenharmony_ci register long r7 __asm__("$7"); 63570af302Sopenharmony_ci register long r2 __asm__("$2"); 64570af302Sopenharmony_ci __asm__ __volatile__ ( 65570af302Sopenharmony_ci "addu $2,$0,%2 ; syscall" 66570af302Sopenharmony_ci : "=&r"(r2), "=r"(r7) 67570af302Sopenharmony_ci : "ir"(n), "0"(r2), "r"(r4), "r"(r5), "r"(r6) 68570af302Sopenharmony_ci : SYSCALL_CLOBBERLIST, "$8", "$9", "$10"); 69570af302Sopenharmony_ci return r7 && r2>0 ? -r2 : r2; 70570af302Sopenharmony_ci} 71570af302Sopenharmony_ci 72570af302Sopenharmony_cistatic inline long __syscall4(long n, long a, long b, long c, long d) 73570af302Sopenharmony_ci{ 74570af302Sopenharmony_ci register long r4 __asm__("$4") = a; 75570af302Sopenharmony_ci register long r5 __asm__("$5") = b; 76570af302Sopenharmony_ci register long r6 __asm__("$6") = c; 77570af302Sopenharmony_ci register long r7 __asm__("$7") = d; 78570af302Sopenharmony_ci register long r2 __asm__("$2"); 79570af302Sopenharmony_ci __asm__ __volatile__ ( 80570af302Sopenharmony_ci "addu $2,$0,%2 ; syscall" 81570af302Sopenharmony_ci : "=&r"(r2), "+r"(r7) 82570af302Sopenharmony_ci : "ir"(n), "0"(r2), "r"(r4), "r"(r5), "r"(r6) 83570af302Sopenharmony_ci : SYSCALL_CLOBBERLIST, "$8", "$9", "$10"); 84570af302Sopenharmony_ci return r7 && r2>0 ? -r2 : r2; 85570af302Sopenharmony_ci} 86570af302Sopenharmony_ci 87570af302Sopenharmony_cistatic inline long __syscall5(long n, long a, long b, long c, long d, long e) 88570af302Sopenharmony_ci{ 89570af302Sopenharmony_ci register long r4 __asm__("$4") = a; 90570af302Sopenharmony_ci register long r5 __asm__("$5") = b; 91570af302Sopenharmony_ci register long r6 __asm__("$6") = c; 92570af302Sopenharmony_ci register long r7 __asm__("$7") = d; 93570af302Sopenharmony_ci register long r8 __asm__("$8") = e; 94570af302Sopenharmony_ci register long r2 __asm__("$2"); 95570af302Sopenharmony_ci __asm__ __volatile__ ( 96570af302Sopenharmony_ci "subu $sp,$sp,32 ; sw $8,16($sp) ; " 97570af302Sopenharmony_ci "addu $2,$0,%3 ; syscall ;" 98570af302Sopenharmony_ci "addu $sp,$sp,32" 99570af302Sopenharmony_ci : "=&r"(r2), "+r"(r7), "+r"(r8) 100570af302Sopenharmony_ci : "ir"(n), "0"(r2), "r"(r4), "r"(r5), "r"(r6) 101570af302Sopenharmony_ci : SYSCALL_CLOBBERLIST, "$9", "$10"); 102570af302Sopenharmony_ci return r7 && r2>0 ? -r2 : r2; 103570af302Sopenharmony_ci} 104570af302Sopenharmony_ci 105570af302Sopenharmony_cistatic inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) 106570af302Sopenharmony_ci{ 107570af302Sopenharmony_ci register long r4 __asm__("$4") = a; 108570af302Sopenharmony_ci register long r5 __asm__("$5") = b; 109570af302Sopenharmony_ci register long r6 __asm__("$6") = c; 110570af302Sopenharmony_ci register long r7 __asm__("$7") = d; 111570af302Sopenharmony_ci register long r8 __asm__("$8") = e; 112570af302Sopenharmony_ci register long r9 __asm__("$9") = f; 113570af302Sopenharmony_ci register long r2 __asm__("$2"); 114570af302Sopenharmony_ci __asm__ __volatile__ ( 115570af302Sopenharmony_ci "subu $sp,$sp,32 ; sw $8,16($sp) ; sw $9,20($sp) ; " 116570af302Sopenharmony_ci "addu $2,$0,%4 ; syscall ;" 117570af302Sopenharmony_ci "addu $sp,$sp,32" 118570af302Sopenharmony_ci : "=&r"(r2), "+r"(r7), "+r"(r8), "+r"(r9) 119570af302Sopenharmony_ci : "ir"(n), "0"(r2), "r"(r4), "r"(r5), "r"(r6) 120570af302Sopenharmony_ci : SYSCALL_CLOBBERLIST, "$10"); 121570af302Sopenharmony_ci return r7 && r2>0 ? -r2 : r2; 122570af302Sopenharmony_ci} 123570af302Sopenharmony_ci 124570af302Sopenharmony_cistatic inline long __syscall7(long n, long a, long b, long c, long d, long e, long f, long g) 125570af302Sopenharmony_ci{ 126570af302Sopenharmony_ci register long r4 __asm__("$4") = a; 127570af302Sopenharmony_ci register long r5 __asm__("$5") = b; 128570af302Sopenharmony_ci register long r6 __asm__("$6") = c; 129570af302Sopenharmony_ci register long r7 __asm__("$7") = d; 130570af302Sopenharmony_ci register long r8 __asm__("$8") = e; 131570af302Sopenharmony_ci register long r9 __asm__("$9") = f; 132570af302Sopenharmony_ci register long r10 __asm__("$10") = g; 133570af302Sopenharmony_ci register long r2 __asm__("$2"); 134570af302Sopenharmony_ci __asm__ __volatile__ ( 135570af302Sopenharmony_ci "subu $sp,$sp,32 ; sw $8,16($sp) ; sw $9,20($sp) ; sw $10,24($sp) ; " 136570af302Sopenharmony_ci "addu $2,$0,%5 ; syscall ;" 137570af302Sopenharmony_ci "addu $sp,$sp,32" 138570af302Sopenharmony_ci : "=&r"(r2), "+r"(r7), "+r"(r8), "+r"(r9), "+r"(r10) 139570af302Sopenharmony_ci : "ir"(n), "0"(r2), "r"(r4), "r"(r5), "r"(r6) 140570af302Sopenharmony_ci : SYSCALL_CLOBBERLIST); 141570af302Sopenharmony_ci return r7 && r2>0 ? -r2 : r2; 142570af302Sopenharmony_ci} 143570af302Sopenharmony_ci 144570af302Sopenharmony_ci#define VDSO_USEFUL 145570af302Sopenharmony_ci#define VDSO_CGT32_SYM "__vdso_clock_gettime" 146570af302Sopenharmony_ci#define VDSO_CGT32_VER "LINUX_2.6" 147570af302Sopenharmony_ci#define VDSO_CGT_SYM "__vdso_clock_gettime64" 148570af302Sopenharmony_ci#define VDSO_CGT_VER "LINUX_2.6" 149570af302Sopenharmony_ci 150570af302Sopenharmony_ci#define SO_SNDTIMEO_OLD 0x1005 151570af302Sopenharmony_ci#define SO_RCVTIMEO_OLD 0x1006 152570af302Sopenharmony_ci 153570af302Sopenharmony_ci#undef SYS_socketcall 154