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