37e71a7eec481089fcc1eada0a32be1519666147
[musl] / arch / mipsn32 / syscall_arch.h
1 #define __SYSCALL_LL_E(x) (x)
2 #define __SYSCALL_LL_O(x) (x)
3
4 __attribute__((visibility("hidden")))
5 long (__syscall)(long, ...);
6
7 #define SYSCALL_RLIM_INFINITY (-1UL/2)
8
9 #if _MIPSEL || __MIPSEL || __MIPSEL__
10 #define __stat_fix(st) ((st),(void)0)
11 #else
12 #include <sys/stat.h>
13 static inline void __stat_fix(long p)
14 {
15         struct stat *st = (struct stat *)p;
16         st->st_dev >>= 32;
17         st->st_rdev >>= 32;
18 }
19 #endif
20
21 static inline long __syscall0(long n)
22 {
23         register long r7 __asm__("$7");
24         register long r2 __asm__("$2");
25         __asm__ __volatile__ (
26                 "addu $2,$0,%2 ; syscall"
27                 : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7)
28                 : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
29                   "$14", "$15", "$24", "$25", "hi", "lo", "memory");
30         return r7 ? -r2 : r2;
31 }
32
33 static inline long __syscall1(long n, long a)
34 {
35         register long r4 __asm__("$4") = a;
36         register long r7 __asm__("$7");
37         register long r2 __asm__("$2");
38         __asm__ __volatile__ (
39                 "addu $2,$0,%2 ; syscall"
40                 : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
41                   "r"(r4)
42                 : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
43                   "$14", "$15", "$24", "$25", "hi", "lo", "memory");
44         return r7 ? -r2 : r2;
45 }
46
47 static inline long __syscall2(long n, long a, long b)
48 {
49         register long r4 __asm__("$4") = a;
50         register long r5 __asm__("$5") = b;
51         register long r7 __asm__("$7");
52         register long r2 __asm__("$2");
53         __asm__ __volatile__ (
54                 "addu $2,$0,%2 ; syscall"
55                 : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
56                   "r"(r4), "r"(r5)
57                 : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
58                   "$14", "$15", "$24", "$25", "hi", "lo", "memory");
59         if (r7) return -r2;
60         long ret = r2;
61         if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
62         return ret;
63 }
64
65 static inline long __syscall3(long n, long a, long b, long c)
66 {
67         register long r4 __asm__("$4") = a;
68         register long r5 __asm__("$5") = b;
69         register long r6 __asm__("$6") = c;
70         register long r7 __asm__("$7");
71         register long r2 __asm__("$2");
72         __asm__ __volatile__ (
73                 "addu $2,$0,%2 ; syscall"
74                 : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
75                   "r"(r4), "r"(r5), "r"(r6)
76                 : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
77                   "$14", "$15", "$24", "$25", "hi", "lo", "memory");
78         if (r7) return -r2;
79         long ret = r2;
80         if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
81         return ret;
82 }
83
84 static inline long __syscall4(long n, long a, long b, long c, long d)
85 {
86         register long r4 __asm__("$4") = a;
87         register long r5 __asm__("$5") = b;
88         register long r6 __asm__("$6") = c;
89         register long r7 __asm__("$7") = d;
90         register long r2 __asm__("$2");
91         __asm__ __volatile__ (
92                 "addu $2,$0,%2 ; syscall"
93                 : "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
94                   "r"(r4), "r"(r5), "r"(r6)
95                 : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
96                   "$14", "$15", "$24", "$25", "hi", "lo", "memory");
97         if (r7) return -r2;
98         long ret = r2;
99         if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
100         if (n == SYS_fstatat) __stat_fix(c);
101         return ret;
102 }
103
104 static inline long __syscall5(long n, long a, long b, long c, long d, long e)
105 {
106         long r2 = (__syscall)(n, a, b, c, d, e);
107         if (r2 > -4096UL) return r2;
108         if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
109         if (n == SYS_fstatat) __stat_fix(c);
110         return r2;
111 }
112
113 static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
114 {
115         long r2 = (__syscall)(n, a, b, c, d, e, f);
116         if (r2 > -4096UL) return r2;
117         if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
118         if (n == SYS_fstatat) __stat_fix(c);
119         return r2;
120 }
121
122 #define VDSO_USEFUL
123 #define VDSO_CGT_SYM "__vdso_clock_gettime"
124 #define VDSO_CGT_VER "LINUX_2.6"