linux/include/asm-v850/unistd.h
<<
>>
Prefs
   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#if !defined(__builtin_expect) && __GNUC__ == 2 && __GNUC_MINOR__ < 96
 245#define __builtin_expect(x, expected_value) (x)
 246#endif
 247
 248#define __syscall_return(type, res)                                           \
 249  do {                                                                        \
 250          /* user-visible error numbers are in the range -1 - -124:           \
 251             see <asm-v850/errno.h> */                                        \
 252          if (__builtin_expect ((unsigned long)(res) >= (unsigned long)(-125), 0)) { \
 253                  errno = -(res);                                             \
 254                  res = -1;                                                   \
 255          }                                                                   \
 256          return (type) (res);                                                \
 257  } while (0)
 258
 259
 260#define _syscall0(type, name)                                                 \
 261type name (void)                                                              \
 262{                                                                             \
 263  register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name;       \
 264  register unsigned long __ret __asm__ (SYSCALL_RET);                         \
 265  __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP                            \
 266                        : "=r" (__ret), "=r" (__syscall)                      \
 267                        : "1" (__syscall)                                     \
 268                        : SYSCALL_SHORT_CLOBBERS);                            \
 269  __syscall_return (type, __ret);                                             \
 270}
 271
 272#define _syscall1(type, name, atype, a)                                       \
 273type name (atype a)                                                           \
 274{                                                                             \
 275  register atype __a __asm__ (SYSCALL_ARG0) = a;                              \
 276  register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name;       \
 277  register unsigned long __ret __asm__ (SYSCALL_RET);                         \
 278  __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP                            \
 279                        : "=r" (__ret), "=r" (__syscall)                      \
 280                        : "1" (__syscall), "r" (__a)                          \
 281                        : SYSCALL_SHORT_CLOBBERS);                            \
 282  __syscall_return (type, __ret);                                             \
 283}
 284
 285#define _syscall2(type, name, atype, a, btype, b)                             \
 286type name (atype a, btype b)                                                  \
 287{                                                                             \
 288  register atype __a __asm__ (SYSCALL_ARG0) = a;                              \
 289  register btype __b __asm__ (SYSCALL_ARG1) = b;                              \
 290  register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name;       \
 291  register unsigned long __ret __asm__ (SYSCALL_RET);                         \
 292  __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP                            \
 293                        : "=r" (__ret), "=r" (__syscall)                      \
 294                        : "1" (__syscall), "r" (__a), "r" (__b)               \
 295                        : SYSCALL_SHORT_CLOBBERS);                            \
 296  __syscall_return (type, __ret);                                             \
 297}
 298
 299#define _syscall3(type, name, atype, a, btype, b, ctype, c)                   \
 300type name (atype a, btype b, ctype c)                                         \
 301{                                                                             \
 302  register atype __a __asm__ (SYSCALL_ARG0) = a;                              \
 303  register btype __b __asm__ (SYSCALL_ARG1) = b;                              \
 304  register ctype __c __asm__ (SYSCALL_ARG2) = c;                              \
 305  register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name;       \
 306  register unsigned long __ret __asm__ (SYSCALL_RET);                         \
 307  __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP                            \
 308                        : "=r" (__ret), "=r" (__syscall)                      \
 309                        : "1" (__syscall), "r" (__a), "r" (__b), "r" (__c)    \
 310                        : SYSCALL_SHORT_CLOBBERS);                            \
 311  __syscall_return (type, __ret);                                             \
 312}
 313
 314#define _syscall4(type, name, atype, a, btype, b, ctype, c, dtype, d)         \
 315type name (atype a, btype b, ctype c, dtype d)                                \
 316{                                                                             \
 317  register atype __a __asm__ (SYSCALL_ARG0) = a;                              \
 318  register btype __b __asm__ (SYSCALL_ARG1) = b;                              \
 319  register ctype __c __asm__ (SYSCALL_ARG2) = c;                              \
 320  register dtype __d __asm__ (SYSCALL_ARG3) = d;                              \
 321  register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name;       \
 322  register unsigned long __ret __asm__ (SYSCALL_RET);                         \
 323  __asm__ __volatile__ ("trap " SYSCALL_SHORT_TRAP                            \
 324                        : "=r" (__ret), "=r" (__syscall)                      \
 325                        : "1" (__syscall),                                    \
 326                        "r" (__a), "r" (__b), "r" (__c), "r" (__d)            \
 327                        : SYSCALL_SHORT_CLOBBERS);                            \
 328  __syscall_return (type, __ret);                                             \
 329}
 330
 331#define _syscall5(type, name, atype, a, btype, b, ctype, c, dtype, d, etype,e)\
 332type name (atype a, btype b, ctype c, dtype d, etype e)                       \
 333{                                                                             \
 334  register atype __a __asm__ (SYSCALL_ARG0) = a;                              \
 335  register btype __b __asm__ (SYSCALL_ARG1) = b;                              \
 336  register ctype __c __asm__ (SYSCALL_ARG2) = c;                              \
 337  register dtype __d __asm__ (SYSCALL_ARG3) = d;                              \
 338  register etype __e __asm__ (SYSCALL_ARG4) = e;                              \
 339  register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name;       \
 340  register unsigned long __ret __asm__ (SYSCALL_RET);                         \
 341  __asm__ __volatile__ ("trap " SYSCALL_LONG_TRAP                             \
 342                        : "=r" (__ret), "=r" (__syscall), "=r" (__e)          \
 343                        : "1" (__syscall),                                    \
 344                        "r" (__a), "r" (__b), "r" (__c), "r" (__d), "2" (__e) \
 345                        : SYSCALL_CLOBBERS);                                  \
 346  __syscall_return (type, __ret);                                             \
 347}
 348
 349#if __GNUC__ < 3
 350/* In older versions of gcc, `asm' statements with more than 10
 351   input/output arguments produce a fatal error.  To work around this
 352   problem, we use two versions, one for gcc-3.x and one for earlier
 353   versions of gcc (the `earlier gcc' version doesn't work with gcc-3.x
 354   because gcc-3.x doesn't allow clobbers to also be input arguments).  */
 355#define __SYSCALL6_TRAP(syscall, ret, a, b, c, d, e, f)                       \
 356  __asm__ __volatile__ ("trap " SYSCALL_LONG_TRAP                             \
 357                        : "=r" (ret), "=r" (syscall)                          \
 358                        : "1" (syscall),                                      \
 359                        "r" (a), "r" (b), "r" (c), "r" (d),                   \
 360                        "r" (e), "r" (f)                                      \
 361                        : SYSCALL_CLOBBERS, SYSCALL_ARG4, SYSCALL_ARG5);
 362#else /* __GNUC__ >= 3 */
 363#define __SYSCALL6_TRAP(syscall, ret, a, b, c, d, e, f)                       \
 364  __asm__ __volatile__ ("trap " SYSCALL_LONG_TRAP                             \
 365                        : "=r" (ret), "=r" (syscall),                         \
 366                        "=r" (e), "=r" (f)                                    \
 367                        : "1" (syscall),                                      \
 368                        "r" (a), "r" (b), "r" (c), "r" (d),                   \
 369                        "2" (e), "3" (f)                                      \
 370                        : SYSCALL_CLOBBERS);
 371#endif
 372
 373#define _syscall6(type, name, atype, a, btype, b, ctype, c, dtype, d, etype, e, ftype, f) \
 374type name (atype a, btype b, ctype c, dtype d, etype e, ftype f)              \
 375{                                                                             \
 376  register atype __a __asm__ (SYSCALL_ARG0) = a;                              \
 377  register btype __b __asm__ (SYSCALL_ARG1) = b;                              \
 378  register ctype __c __asm__ (SYSCALL_ARG2) = c;                              \
 379  register dtype __d __asm__ (SYSCALL_ARG3) = d;                              \
 380  register etype __e __asm__ (SYSCALL_ARG4) = e;                              \
 381  register etype __f __asm__ (SYSCALL_ARG5) = f;                              \
 382  register unsigned long __syscall __asm__ (SYSCALL_NUM) = __NR_##name;       \
 383  register unsigned long __ret __asm__ (SYSCALL_RET);                         \
 384  __SYSCALL6_TRAP(__syscall, __ret, __a, __b, __c, __d, __e, __f);            \
 385  __syscall_return (type, __ret);                                             \
 386}
 387                
 388
 389#ifdef __KERNEL__
 390#define __ARCH_WANT_IPC_PARSE_VERSION
 391#define __ARCH_WANT_OLD_READDIR
 392#define __ARCH_WANT_STAT64
 393#define __ARCH_WANT_SYS_ALARM
 394#define __ARCH_WANT_SYS_GETHOSTNAME
 395#define __ARCH_WANT_SYS_PAUSE
 396#define __ARCH_WANT_SYS_SGETMASK
 397#define __ARCH_WANT_SYS_SIGNAL
 398#define __ARCH_WANT_SYS_TIME
 399#define __ARCH_WANT_SYS_UTIME
 400#define __ARCH_WANT_SYS_WAITPID
 401#define __ARCH_WANT_SYS_SOCKETCALL
 402#define __ARCH_WANT_SYS_FADVISE64
 403#define __ARCH_WANT_SYS_GETPGRP
 404#define __ARCH_WANT_SYS_LLSEEK
 405#define __ARCH_WANT_SYS_NICE
 406#define __ARCH_WANT_SYS_OLDUMOUNT
 407#define __ARCH_WANT_SYS_SIGPENDING
 408#define __ARCH_WANT_SYS_SIGPROCMASK
 409#define __ARCH_WANT_SYS_RT_SIGACTION
 410#endif
 411
 412#ifdef __KERNEL_SYSCALLS__
 413
 414#include <linux/compiler.h>
 415#include <linux/types.h>
 416
 417/*
 418 * we need this inline - forking from kernel space will result
 419 * in NO COPY ON WRITE (!!!), until an execve is executed. This
 420 * is no problem, but for the stack. This is handled by not letting
 421 * main() use the stack at all after fork(). Thus, no function
 422 * calls - which means inline code for fork too, as otherwise we
 423 * would use the stack upon exit from 'fork()'.
 424 *
 425 * Actually only pause and fork are needed inline, so that there
 426 * won't be any messing with the stack from main(), but we define
 427 * some others too.
 428 */
 429#define __NR__exit __NR_exit
 430extern inline _syscall0(pid_t,setsid)
 431extern inline _syscall3(int,write,int,fd,const char *,buf,off_t,count)
 432extern inline _syscall3(int,read,int,fd,char *,buf,off_t,count)
 433extern inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count)
 434extern inline _syscall1(int,dup,int,fd)
 435extern inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
 436extern inline _syscall3(int,open,const char *,file,int,flag,int,mode)
 437extern inline _syscall1(int,close,int,fd)
 438extern inline _syscall1(int,_exit,int,exitcode)
 439extern inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
 440
 441extern inline pid_t wait(int * wait_stat)
 442{
 443        return waitpid (-1, wait_stat, 0);
 444}
 445
 446unsigned long sys_mmap(unsigned long addr, size_t len,
 447                        unsigned long prot, unsigned long flags,
 448                        unsigned long fd, off_t offset);
 449unsigned long sys_mmap2(unsigned long addr, size_t len,
 450                        unsigned long prot, unsigned long flags,
 451                        unsigned long fd, unsigned long pgoff);
 452struct pt_regs;
 453int sys_execve (char *name, char **argv, char **envp, struct pt_regs *regs);
 454int sys_pipe (int *fildes);
 455int sys_ptrace(long request, long pid, long addr, long data);
 456struct sigaction;
 457asmlinkage long sys_rt_sigaction(int sig,
 458                                const struct sigaction __user *act,
 459                                struct sigaction __user *oact,
 460                                size_t sigsetsize);
 461
 462#endif
 463
 464/*
 465 * "Conditional" syscalls
 466 */
 467#define cond_syscall(name)                                                    \
 468  asm (".weak\t" C_SYMBOL_STRING(name) ";"                                    \
 469       ".set\t" C_SYMBOL_STRING(name) "," C_SYMBOL_STRING(sys_ni_syscall));
 470#if 0
 471/* This doesn't work if there's a function prototype for NAME visible,
 472   because the argument types probably won't match.  */
 473#define cond_syscall(name)  \
 474  void name (void) __attribute__ ((weak, alias ("sys_ni_syscall")));
 475#endif
 476
 477#endif /* __V850_UNISTD_H__ */
 478
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.