]>
Commit | Line | Data |
---|---|---|
320054e8 DG |
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 | } |