OSDN Git Service

02b73c5a834859dd78895cc45a65b9c4da06bc02
[uclinux-h8/uClibc.git] / libc / sysdeps / linux / alpha / bits / syscalls.h
1 #ifndef _BITS_SYSCALLS_H
2 #define _BITS_SYSCALLS_H
3 #ifndef _SYSCALL_H
4 # error "Never use <bits/syscalls.h> directly; include <sys/syscall.h> instead."
5 #endif
6
7 #ifndef __ASSEMBLER__
8
9 #include <errno.h>
10
11 #define SYS_ify(syscall_name)  (__NR_##syscall_name)
12
13 #define _syscall_return(type)                                           \
14         return (_sc_err ? __set_errno(_sc_ret), _sc_ret = -1L : 0), (type) _sc_ret
15
16 #define _syscall_clobbers                                               \
17         "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8",                 \
18         "$22", "$23", "$24", "$25", "$27", "$28"                        \
19
20 #define _syscall0(type, name)                                           \
21 type name(void)                                                         \
22 {                                                                       \
23         long _sc_ret, _sc_err;                                          \
24         {                                                               \
25                 register long _sc_0 __asm__("$0");                      \
26                 register long _sc_19 __asm__("$19");                    \
27                                                                         \
28                 _sc_0 = __NR_##name;                                    \
29                 __asm__("callsys # %0 %1 %2"                            \
30                         : "=r"(_sc_0), "=r"(_sc_19)                     \
31                         : "0"(_sc_0)                                    \
32                         : _syscall_clobbers);                           \
33                 _sc_ret = _sc_0, _sc_err = _sc_19;                      \
34         }                                                               \
35         _syscall_return(type);                                          \
36 }
37
38 #define _syscall1(type,name,type1,arg1)                                 \
39 type name(type1 arg1)                                                   \
40 {                                                                       \
41         long _sc_ret, _sc_err;                                          \
42         {                                                               \
43                 register long _sc_0 __asm__("$0");                      \
44                 register long _sc_16 __asm__("$16");                    \
45                 register long _sc_19 __asm__("$19");                    \
46                                                                         \
47                 _sc_0 = __NR_##name;                                    \
48                 _sc_16 = (long) (arg1);                                 \
49                 __asm__("callsys # %0 %1 %2 %3"                         \
50                         : "=r"(_sc_0), "=r"(_sc_19)                     \
51                         : "0"(_sc_0), "r"(_sc_16)                       \
52                         : _syscall_clobbers);                           \
53                 _sc_ret = _sc_0, _sc_err = _sc_19;                      \
54         }                                                               \
55         _syscall_return(type);                                          \
56 }
57
58 #define _syscall2(type,name,type1,arg1,type2,arg2)                      \
59 type name(type1 arg1,type2 arg2)                                        \
60 {                                                                       \
61         long _sc_ret, _sc_err;                                          \
62         {                                                               \
63                 register long _sc_0 __asm__("$0");                      \
64                 register long _sc_16 __asm__("$16");                    \
65                 register long _sc_17 __asm__("$17");                    \
66                 register long _sc_19 __asm__("$19");                    \
67                                                                         \
68                 _sc_0 = __NR_##name;                                    \
69                 _sc_16 = (long) (arg1);                                 \
70                 _sc_17 = (long) (arg2);                                 \
71                 __asm__("callsys # %0 %1 %2 %3 %4"                      \
72                         : "=r"(_sc_0), "=r"(_sc_19)                     \
73                         : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17)          \
74                         : _syscall_clobbers);                           \
75                 _sc_ret = _sc_0, _sc_err = _sc_19;                      \
76         }                                                               \
77         _syscall_return(type);                                          \
78 }
79
80 #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3)           \
81 type name(type1 arg1,type2 arg2,type3 arg3)                             \
82 {                                                                       \
83         long _sc_ret, _sc_err;                                          \
84         {                                                               \
85                 register long _sc_0 __asm__("$0");                      \
86                 register long _sc_16 __asm__("$16");                    \
87                 register long _sc_17 __asm__("$17");                    \
88                 register long _sc_18 __asm__("$18");                    \
89                 register long _sc_19 __asm__("$19");                    \
90                                                                         \
91                 _sc_0 = __NR_##name;                                    \
92                 _sc_16 = (long) (arg1);                                 \
93                 _sc_17 = (long) (arg2);                                 \
94                 _sc_18 = (long) (arg3);                                 \
95                 __asm__("callsys # %0 %1 %2 %3 %4 %5"                   \
96                         : "=r"(_sc_0), "=r"(_sc_19)                     \
97                         : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17),         \
98                           "r"(_sc_18)                                   \
99                         : _syscall_clobbers);                           \
100                 _sc_ret = _sc_0, _sc_err = _sc_19;                      \
101         }                                                               \
102         _syscall_return(type);                                          \
103 }
104
105 #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
106 type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4)               \
107 {                                                                        \
108         long _sc_ret, _sc_err;                                          \
109         {                                                               \
110                 register long _sc_0 __asm__("$0");                      \
111                 register long _sc_16 __asm__("$16");                    \
112                 register long _sc_17 __asm__("$17");                    \
113                 register long _sc_18 __asm__("$18");                    \
114                 register long _sc_19 __asm__("$19");                    \
115                                                                         \
116                 _sc_0 = __NR_##name;                                    \
117                 _sc_16 = (long) (arg1);                                 \
118                 _sc_17 = (long) (arg2);                                 \
119                 _sc_18 = (long) (arg3);                                 \
120                 _sc_19 = (long) (arg4);                                 \
121                 __asm__("callsys # %0 %1 %2 %3 %4 %5 %6"                \
122                         : "=r"(_sc_0), "=r"(_sc_19)                     \
123                         : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17),         \
124                           "r"(_sc_18), "1"(_sc_19)                      \
125                         : _syscall_clobbers);                           \
126                 _sc_ret = _sc_0, _sc_err = _sc_19;                      \
127         }                                                               \
128         _syscall_return(type);                                          \
129
130
131 #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
132           type5,arg5)                                                    \
133 type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5)      \
134 {                                                                       \
135         long _sc_ret, _sc_err;                                          \
136         {                                                               \
137                 register long _sc_0 __asm__("$0");                      \
138                 register long _sc_16 __asm__("$16");                    \
139                 register long _sc_17 __asm__("$17");                    \
140                 register long _sc_18 __asm__("$18");                    \
141                 register long _sc_19 __asm__("$19");                    \
142                 register long _sc_20 __asm__("$20");                    \
143                                                                         \
144                 _sc_0 = __NR_##name;                                    \
145                 _sc_16 = (long) (arg1);                                 \
146                 _sc_17 = (long) (arg2);                                 \
147                 _sc_18 = (long) (arg3);                                 \
148                 _sc_19 = (long) (arg4);                                 \
149                 _sc_20 = (long) (arg5);                                 \
150                 __asm__("callsys # %0 %1 %2 %3 %4 %5 %6 %7"             \
151                         : "=r"(_sc_0), "=r"(_sc_19)                     \
152                         : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17),         \
153                           "r"(_sc_18), "1"(_sc_19), "r"(_sc_20)         \
154                         : _syscall_clobbers);                           \
155                 _sc_ret = _sc_0, _sc_err = _sc_19;                      \
156         }                                                               \
157         _syscall_return(type);                                          \
158 }
159
160 #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
161           type5,arg5,type6,arg6)                                         \
162 type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5, type6 arg6)\
163 {                                                                       \
164         long _sc_ret, _sc_err;                                          \
165         {                                                               \
166                 register long _sc_0 __asm__("$0");                      \
167                 register long _sc_16 __asm__("$16");                    \
168                 register long _sc_17 __asm__("$17");                    \
169                 register long _sc_18 __asm__("$18");                    \
170                 register long _sc_19 __asm__("$19");                    \
171                 register long _sc_20 __asm__("$20");                    \
172                 register long _sc_21 __asm__("$21");                    \
173                                                                         \
174                 _sc_0 = __NR_##name;                                    \
175                 _sc_16 = (long) (arg1);                                 \
176                 _sc_17 = (long) (arg2);                                 \
177                 _sc_18 = (long) (arg3);                                 \
178                 _sc_19 = (long) (arg4);                                 \
179                 _sc_20 = (long) (arg5);                                 \
180                 _sc_21 = (long) (arg6);                                 \
181                 __asm__("callsys # %0 %1 %2 %3 %4 %5 %6 %7 %8"          \
182                         : "=r"(_sc_0), "=r"(_sc_19)                     \
183                         : "0"(_sc_0), "r"(_sc_16), "r"(_sc_17),         \
184                           "r"(_sc_18), "1"(_sc_19), "r"(_sc_20), "r"(_sc_21) \
185                         : _syscall_clobbers);                           \
186                 _sc_ret = _sc_0, _sc_err = _sc_19;                      \
187         }                                                               \
188         _syscall_return(type);                                          \
189 }
190
191 #endif /* __ASSEMBLER__ */
192 #endif /* _BITS_SYSCALLS_H */