1 #define __SYSCALL_LL_E(x) \
2 ((union { long long ll; long l[2]; }){ .ll = x }).l[0], \
3 ((union { long long ll; long l[2]; }){ .ll = x }).l[1]
4 #define __SYSCALL_LL_O(x) __SYSCALL_LL_E((x))
6 #define __asm_syscall(...) \
7 __asm__ __volatile__ ("ecall\n\t" \
8 : "=r"(a0) : __VA_ARGS__ : "memory"); \
11 static inline long __syscall0(long n)
13 register long a7
__asm__("a7") = n
;
14 register long a0
__asm__("a0");
15 __asm_syscall("r"(a7
))
18 static inline long __syscall1(long n
, long a
)
20 register long a7
__asm__("a7") = n
;
21 register long a0
__asm__("a0") = a
;
22 __asm_syscall("r"(a7
), "0"(a0
))
25 static inline long __syscall2(long n
, long a
, long b
)
27 register long a7
__asm__("a7") = n
;
28 register long a0
__asm__("a0") = a
;
29 register long a1
__asm__("a1") = b
;
30 __asm_syscall("r"(a7
), "0"(a0
), "r"(a1
))
33 static inline long __syscall3(long n
, long a
, long b
, long c
)
35 register long a7
__asm__("a7") = n
;
36 register long a0
__asm__("a0") = a
;
37 register long a1
__asm__("a1") = b
;
38 register long a2
__asm__("a2") = c
;
39 __asm_syscall("r"(a7
), "0"(a0
), "r"(a1
), "r"(a2
))
42 static inline long __syscall4(long n
, long a
, long b
, long c
, long d
)
44 register long a7
__asm__("a7") = n
;
45 register long a0
__asm__("a0") = a
;
46 register long a1
__asm__("a1") = b
;
47 register long a2
__asm__("a2") = c
;
48 register long a3
__asm__("a3") = d
;
49 __asm_syscall("r"(a7
), "0"(a0
), "r"(a1
), "r"(a2
), "r"(a3
))
52 static inline long __syscall5(long n
, long a
, long b
, long c
, long d
, long e
)
54 register long a7
__asm__("a7") = n
;
55 register long a0
__asm__("a0") = a
;
56 register long a1
__asm__("a1") = b
;
57 register long a2
__asm__("a2") = c
;
58 register long a3
__asm__("a3") = d
;
59 register long a4
__asm__("a4") = e
;
60 __asm_syscall("r"(a7
), "0"(a0
), "r"(a1
), "r"(a2
), "r"(a3
), "r"(a4
))
63 static inline long __syscall6(long n
, long a
, long b
, long c
, long d
, long e
, long f
)
65 register long a7
__asm__("a7") = n
;
66 register long a0
__asm__("a0") = a
;
67 register long a1
__asm__("a1") = b
;
68 register long a2
__asm__("a2") = c
;
69 register long a3
__asm__("a3") = d
;
70 register long a4
__asm__("a4") = e
;
71 register long a5
__asm__("a5") = f
;
72 __asm_syscall("r"(a7
), "0"(a0
), "r"(a1
), "r"(a2
), "r"(a3
), "r"(a4
), "r"(a5
))
76 /* We don't have a clock_gettime function.
77 #define VDSO_CGT_SYM "__vdso_clock_gettime"
78 #define VDSO_CGT_VER "LINUX_2.6" */