[PATCH] remove gcc-2 checks
[linux-2.6.git] / include / asm-v850 / unistd.h
1 /*
2  * include/asm-v850/unistd.h -- System call numbers and invocation mechanism
3  *
4  *  Copyright (C) 2001,02,03,04  NEC Electronics Corporation
5  *  Copyright (C) 2001,02,03,04  Miles Bader <miles@gnu.org>
6  *
7  * This file is subject to the terms and conditions of the GNU General
8  * Public License.  See the file COPYING in the main directory of this
9  * archive for more details.
10  *
11  * Written by Miles Bader <miles@gnu.org>
12  */
13
14 #ifndef __V850_UNISTD_H__
15 #define __V850_UNISTD_H__
16
17 #include <asm/clinkage.h>
18
19 #define __NR_restart_syscall      0
20 #define __NR_exit                 1
21 #define __NR_fork                 2
22 #define __NR_read                 3
23 #define __NR_write                4
24 #define __NR_open                 5
25 #define __NR_close                6
26 #define __NR_waitpid              7
27 #define __NR_creat                8
28 #define __NR_link                 9
29 #define __NR_unlink              10
30 #define __NR_execve              11
31 #define __NR_chdir               12
32 #define __NR_time                13
33 #define __NR_mknod               14
34 #define __NR_chmod               15
35 #define __NR_chown               16
36 #define __NR_break               17
37 #define __NR_lseek               19
38 #define __NR_getpid              20
39 #define __NR_mount               21
40 #define __NR_umount              22
41 #define __NR_setuid              23
42 #define __NR_getuid              24
43 #define __NR_stime               25
44 #define __NR_ptrace              26
45 #define __NR_alarm               27
46 #define __NR_pause               29
47 #define __NR_utime               30
48 #define __NR_stty                31
49 #define __NR_gtty                32
50 #define __NR_access              33
51 #define __NR_nice                34
52 #define __NR_ftime               35
53 #define __NR_sync                36
54 #define __NR_kill                37
55 #define __NR_rename              38
56 #define __NR_mkdir               39
57 #define __NR_rmdir               40
58 #define __NR_dup                 41
59 #define __NR_pipe                42
60 #define __NR_times               43
61 #define __NR_prof                44
62 #define __NR_brk                 45
63 #define __NR_setgid              46
64 #define __NR_getgid              47
65 #define __NR_signal              48
66 #define __NR_geteuid             49
67 #define __NR_getegid             50
68 #define __NR_acct                51
69 #define __NR_umount2             52
70 #define __NR_lock                53
71 #define __NR_ioctl               54
72 #define __NR_fcntl               55
73 #define __NR_setpgid             57
74 #define __NR_umask               60
75 #define __NR_chroot              61
76 #define __NR_ustat               62
77 #define __NR_dup2                63
78 #define __NR_getppid             64
79 #define __NR_getpgrp             65
80 #define __NR_setsid              66
81 #define __NR_sigaction           67
82 #define __NR_sgetmask            68
83 #define __NR_ssetmask            69
84 #define __NR_setreuid            70
85 #define __NR_setregid            71
86 #define __NR_sigsuspend          72
87 #define __NR_sigpending          73
88 #define __NR_sethostname         74
89 #define __NR_setrlimit           75
90 #define __NR_ugetrlimit          76
91 #define __NR_getrusage           77
92 #define __NR_gettimeofday        78
93 #define __NR_settimeofday        79
94 #define __NR_getgroups           80
95 #define __NR_setgroups           81
96 #define __NR_select              82
97 #define __NR_symlink             83
98 #define __NR_readlink            85
99 #define __NR_uselib              86
100 #define __NR_swapon              87
101 #define __NR_reboot              88
102 #define __NR_readdir             89
103 #define __NR_mmap                90
104 #define __NR_munmap              91
105 #define __NR_truncate            92
106 #define __NR_ftruncate           93
107 #define __NR_fchmod              94
108 #define __NR_fchown              95
109 #define __NR_getpriority         96
110 #define __NR_setpriority         97
111 #define __NR_profil              98
112 #define __NR_statfs              99
113 #define __NR_fstatfs            100
114 #define __NR_socketcall         102
115 #define __NR_syslog             103
116 #define __NR_setitimer          104
117 #define __NR_getitimer          105
118 #define __NR_stat               106
119 #define __NR_lstat              107
120 #define __NR_fstat              108
121 #define __NR_vhangup            111
122 #define __NR_wait4              114
123 #define __NR_swapoff            115
124 #define __NR_sysinfo            116
125 #define __NR_ipc                117
126 #define __NR_fsync              118
127 #define __NR_sigreturn          119
128 #define __NR_clone              120
129 #define __NR_setdomainname      121
130 #define __NR_uname              122
131 #define __NR_cacheflush         123
132 #define __NR_adjtimex           124
133 #define __NR_mprotect           125
134 #define __NR_sigprocmask        126
135 #define __NR_create_module      127
136 #define __NR_init_module        128
137 #define __NR_delete_module      129
138 #define __NR_get_kernel_syms    130
139 #define __NR_quotactl           131
140 #define __NR_getpgid            132
141 #define __NR_fchdir             133
142 #define __NR_bdflush            134
143 #define __NR_sysfs              135
144 #define __NR_personality        136
145 #define __NR_afs_syscall        137 /* Syscall for Andrew File System */
146 #define __NR_setfsuid           138
147 #define __NR_setfsgid           139
148 #define __NR__llseek            140
149 #define __NR_getdents           141
150 #define __NR_flock              143
151 #define __NR_msync              144
152 #define __NR_readv              145
153 #define __NR_writev             146
154 #define __NR_getsid             147
155 #define __NR_fdatasync          148
156 #define __NR__sysctl            149
157 #define __NR_mlock              150
158 #define __NR_munlock            151
159 #define __NR_mlockall           152
160 #define __NR_munlockall         153
161 #define __NR_sched_setparam             154
162 #define __NR_sched_getparam             155
163 #define __NR_sched_setscheduler         156
164 #define __NR_sched_getscheduler         157
165 #define __NR_sched_yield                158
166 #define __NR_sched_get_priority_max     159
167 #define __NR_sched_get_priority_min     160
168 #define __NR_sched_rr_get_interval      161
169 #define __NR_nanosleep          162
170 #define __NR_mremap             163
171 #define __NR_setresuid          164
172 #define __NR_getresuid          165
173 #define __NR_query_module       167
174 #define __NR_poll               168
175 #define __NR_nfsservctl         169
176 #define __NR_setresgid          170
177 #define __NR_getresgid          171
178 #define __NR_prctl              172
179 #define __NR_rt_sigreturn       173
180 #define __NR_rt_sigaction       174
181 #define __NR_rt_sigprocmask     175
182 #define __NR_rt_sigpending      176
183 #define __NR_rt_sigtimedwait    177
184 #define __NR_rt_sigqueueinfo    178
185 #define __NR_rt_sigsuspend      179
186 #define __NR_pread              180
187 #define __NR_pwrite             181
188 #define __NR_lchown             182
189 #define __NR_getcwd             183
190 #define __NR_capget             184
191 #define __NR_capset             185
192 #define __NR_sigaltstack        186
193 #define __NR_sendfile           187
194 #define __NR_getpmsg            188     /* some people actually want streams */
195 #define __NR_putpmsg            189     /* some people actually want streams */
196 #define __NR_vfork              190
197 #define __NR_mmap2              192
198 #define __NR_truncate64         193
199 #define __NR_ftruncate64        194
200 #define __NR_stat64             195
201 #define __NR_lstat64            196
202 #define __NR_fstat64            197
203 #define __NR_fcntl64            198
204 #define __NR_getdents64         199
205 #define __NR_pivot_root         200
206 #define __NR_gettid             201
207 #define __NR_tkill              202
208
209
210 /* Syscall protocol:
211    Syscall number in r12, args in r6-r9, r13-r14
212    Return value in r10
213    Trap 0 for `short' syscalls, where all the args can fit in function
214    call argument registers, and trap 1 when there are additional args in
215    r13-r14.  */
216
217 #define SYSCALL_NUM     "r12"
218 #define SYSCALL_ARG0    "r6"
219 #define SYSCALL_ARG1    "r7"
220 #define SYSCALL_ARG2    "r8"
221 #define SYSCALL_ARG3    "r9"
222 #define SYSCALL_ARG4    "r13"
223 #define SYSCALL_ARG5    "r14"
224 #define SYSCALL_RET     "r10"
225
226 #define SYSCALL_SHORT_TRAP      "0"
227 #define SYSCALL_LONG_TRAP       "1"
228
229 /* Registers clobbered by any syscall.  This _doesn't_ include the syscall
230    number (r12) or the `extended arg' registers (r13, r14), even though
231    they are actually clobbered too (this is because gcc's `asm' statement
232    doesn't allow a clobber to be used as an input or output).  */
233 #define SYSCALL_CLOBBERS        "r1", "r5", "r11", "r15", "r16", \
234                                 "r17", "r18", "r19"
235
236 /* Registers clobbered by a `short' syscall.  This includes all clobbers
237    except the syscall number (r12).  */
238 #define SYSCALL_SHORT_CLOBBERS  SYSCALL_CLOBBERS, "r13", "r14"
239
240
241 /* User programs sometimes end up including this header file
242    (indirectly, via uClibc header files), so I'm a bit nervous just
243    including <linux/compiler.h>.  */
244
245 #define __syscall_return(type, res)                                           \
246   do {                                                                        \
247           /* user-visible error numbers are in the range -1 - -124:           \
248              see <asm-v850/errno.h> */                                        \
249           if (__builtin_expect ((unsigned long)(res) >= (unsigned long)(-125), 0)) { \
250                   errno = -(res);                                             \
251                   res = -1;                                                   \
252           }                                                                   \
253           return (type) (res);                                                \
254   } while (0)
255
256
257 #define _syscall0(type, name)                                                 \
258 type name (void)                                                              \
259 {                                                                             \
260   register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name;       \
261   register unsigned long __ret __asm__ (SYSCALL_RET);                         \
262   __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP                            \
263                         : "=r" (__ret), "=r" (__syscall)                      \
264                         : "1" (__syscall)                                     \
265                         : SYSCALL_SHORT_CLOBBERS);                            \
266   __syscall_return (type, __ret);                                             \
267 }
268
269 #define _syscall1(type, name, atype, a)                                       \
270 type name (atype a)                                                           \
271 {                                                                             \
272   register atype __a __asm__ (SYSCALL_ARG0) = a;                              \
273   register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name;       \
274   register unsigned long __ret __asm__ (SYSCALL_RET);                         \
275   __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP                            \
276                         : "=r" (__ret), "=r" (__syscall)                      \
277                         : "1" (__syscall), "r" (__a)                          \
278                         : SYSCALL_SHORT_CLOBBERS);                            \
279   __syscall_return (type, __ret);                                             \
280 }
281
282 #define _syscall2(type, name, atype, a, btype, b)                             \
283 type name (atype a, btype b)                                                  \
284 {                                                                             \
285   register atype __a __asm__ (SYSCALL_ARG0) = a;                              \
286   register btype __b __asm__ (SYSCALL_ARG1) = b;                              \
287   register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name;       \
288   register unsigned long __ret __asm__ (SYSCALL_RET);                         \
289   __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP                            \
290                         : "=r" (__ret), "=r" (__syscall)                      \
291                         : "1" (__syscall), "r" (__a), "r" (__b)               \
292                         : SYSCALL_SHORT_CLOBBERS);                            \
293   __syscall_return (type, __ret);                                             \
294 }
295
296 #define _syscall3(type, name, atype, a, btype, b, ctype, c)                   \
297 type name (atype a, btype b, ctype c)                                         \
298 {                                                                             \
299   register atype __a __asm__ (SYSCALL_ARG0) = a;                              \
300   register btype __b __asm__ (SYSCALL_ARG1) = b;                              \
301   register ctype __c __asm__ (SYSCALL_ARG2) = c;                              \
302   register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name;       \
303   register unsigned long __ret __asm__ (SYSCALL_RET);                         \
304   __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP                            \
305                         : "=r" (__ret), "=r" (__syscall)                      \
306                         : "1" (__syscall), "r" (__a), "r" (__b), "r" (__c)    \
307                         : SYSCALL_SHORT_CLOBBERS);                            \
308   __syscall_return (type, __ret);                                             \
309 }
310
311 #define _syscall4(type, name, atype, a, btype, b, ctype, c, dtype, d)         \
312 type name (atype a, btype b, ctype c, dtype d)                                \
313 {                                                                             \
314   register atype __a __asm__ (SYSCALL_ARG0) = a;                              \
315   register btype __b __asm__ (SYSCALL_ARG1) = b;                              \
316   register ctype __c __asm__ (SYSCALL_ARG2) = c;                              \
317   register dtype __d __asm__ (SYSCALL_ARG3) = d;                              \
318   register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name;       \
319   register unsigned long __ret __asm__ (SYSCALL_RET);                         \
320   __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP                            \
321                         : "=r" (__ret), "=r" (__syscall)                      \
322                         : "1" (__syscall),                                    \
323                         "r" (__a), "r" (__b), "r" (__c), "r" (__d)            \
324                         : SYSCALL_SHORT_CLOBBERS);                            \
325   __syscall_return (type, __ret);                                             \
326 }
327
328 #define _syscall5(type, name, atype, a, btype, b, ctype, c, dtype, d, etype,e)\
329 type name (atype a, btype b, ctype c, dtype d, etype e)                       \
330 {                                                                             \
331   register atype __a __asm__ (SYSCALL_ARG0) = a;                              \
332   register btype __b __asm__ (SYSCALL_ARG1) = b;                              \
333   register ctype __c __asm__ (SYSCALL_ARG2) = c;                              \
334   register dtype __d __asm__ (SYSCALL_ARG3) = d;                              \
335   register etype __e __asm__ (SYSCALL_ARG4) = e;                              \
336   register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name;       \
337   register unsigned long __ret __asm__ (SYSCALL_RET);                         \
338   __asm__ __volatile__ ("trap " SYSCALL_LONG_TRAP                             \
339                         : "=r" (__ret), "=r" (__syscall), "=r" (__e)          \
340                         : "1" (__syscall),                                    \
341                         "r" (__a), "r" (__b), "r" (__c), "r" (__d), "2" (__e) \
342                         : SYSCALL_CLOBBERS);                                  \
343   __syscall_return (type, __ret);                                             \
344 }
345
346 #define __SYSCALL6_TRAP(syscall, ret, a, b, c, d, e, f)                       \
347   __asm__ __volatile__ ("trap " SYSCALL_LONG_TRAP                             \
348                         : "=r" (ret), "=r" (syscall),                         \
349                         "=r" (e), "=r" (f)                                    \
350                         : "1" (syscall),                                      \
351                         "r" (a), "r" (b), "r" (c), "r" (d),                   \
352                         "2" (e), "3" (f)                                      \
353                         : SYSCALL_CLOBBERS);
354
355 #define _syscall6(type, name, atype, a, btype, b, ctype, c, dtype, d, etype, e, ftype, f) \
356 type name (atype a, btype b, ctype c, dtype d, etype e, ftype f)              \
357 {                                                                             \
358   register atype __a __asm__ (SYSCALL_ARG0) = a;                              \
359   register btype __b __asm__ (SYSCALL_ARG1) = b;                              \
360   register ctype __c __asm__ (SYSCALL_ARG2) = c;                              \
361   register dtype __d __asm__ (SYSCALL_ARG3) = d;                              \
362   register etype __e __asm__ (SYSCALL_ARG4) = e;                              \
363   register etype __f __asm__ (SYSCALL_ARG5) = f;                              \
364   register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name;       \
365   register unsigned long __ret __asm__ (SYSCALL_RET);                         \
366   __SYSCALL6_TRAP(__syscall, __ret, __a, __b, __c, __d, __e, __f);            \
367   __syscall_return (type, __ret);                                             \
368 }
369                 
370
371 #ifdef __KERNEL__
372 #define __ARCH_WANT_IPC_PARSE_VERSION
373 #define __ARCH_WANT_OLD_READDIR
374 #define __ARCH_WANT_STAT64
375 #define __ARCH_WANT_SYS_ALARM
376 #define __ARCH_WANT_SYS_GETHOSTNAME
377 #define __ARCH_WANT_SYS_PAUSE
378 #define __ARCH_WANT_SYS_SGETMASK
379 #define __ARCH_WANT_SYS_SIGNAL
380 #define __ARCH_WANT_SYS_TIME
381 #define __ARCH_WANT_SYS_UTIME
382 #define __ARCH_WANT_SYS_WAITPID
383 #define __ARCH_WANT_SYS_SOCKETCALL
384 #define __ARCH_WANT_SYS_FADVISE64
385 #define __ARCH_WANT_SYS_GETPGRP
386 #define __ARCH_WANT_SYS_LLSEEK
387 #define __ARCH_WANT_SYS_NICE
388 #define __ARCH_WANT_SYS_OLDUMOUNT
389 #define __ARCH_WANT_SYS_SIGPENDING
390 #define __ARCH_WANT_SYS_SIGPROCMASK
391 #define __ARCH_WANT_SYS_RT_SIGACTION
392 #endif
393
394 #ifdef __KERNEL_SYSCALLS__
395
396 #include <linux/compiler.h>
397 #include <linux/types.h>
398
399 /*
400  * we need this inline - forking from kernel space will result
401  * in NO COPY ON WRITE (!!!), until an execve is executed. This
402  * is no problem, but for the stack. This is handled by not letting
403  * main() use the stack at all after fork(). Thus, no function
404  * calls - which means inline code for fork too, as otherwise we
405  * would use the stack upon exit from 'fork()'.
406  *
407  * Actually only pause and fork are needed inline, so that there
408  * won't be any messing with the stack from main(), but we define
409  * some others too.
410  */
411 #define __NR__exit __NR_exit
412 extern inline _syscall0(pid_t,setsid)
413 extern inline _syscall3(int,write,int,fd,const char *,buf,off_t,count)
414 extern inline _syscall3(int,read,int,fd,char *,buf,off_t,count)
415 extern inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count)
416 extern inline _syscall1(int,dup,int,fd)
417 extern inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
418 extern inline _syscall3(int,open,const char *,file,int,flag,int,mode)
419 extern inline _syscall1(int,close,int,fd)
420 extern inline _syscall1(int,_exit,int,exitcode)
421 extern inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
422
423 extern inline pid_t wait(int * wait_stat)
424 {
425         return waitpid (-1, wait_stat, 0);
426 }
427
428 unsigned long sys_mmap(unsigned long addr, size_t len,
429                         unsigned long prot, unsigned long flags,
430                         unsigned long fd, off_t offset);
431 unsigned long sys_mmap2(unsigned long addr, size_t len,
432                         unsigned long prot, unsigned long flags,
433                         unsigned long fd, unsigned long pgoff);
434 struct pt_regs;
435 int sys_execve (char *name, char **argv, char **envp, struct pt_regs *regs);
436 int sys_pipe (int *fildes);
437 struct sigaction;
438 asmlinkage long sys_rt_sigaction(int sig,
439                                 const struct sigaction __user *act,
440                                 struct sigaction __user *oact,
441                                 size_t sigsetsize);
442
443 #endif
444
445 /*
446  * "Conditional" syscalls
447  */
448 #define cond_syscall(name)                                                    \
449   asm (".weak\t" C_SYMBOL_STRING(name) ";"                                    \
450        ".set\t" C_SYMBOL_STRING(name) "," C_SYMBOL_STRING(sys_ni_syscall))
451 #if 0
452 /* This doesn't work if there's a function prototype for NAME visible,
453    because the argument types probably won't match.  */
454 #define cond_syscall(name)  \
455   void name (void) __attribute__ ((weak, alias ("sys_ni_syscall")));
456 #endif
457
458 #endif /* __V850_UNISTD_H__ */