[Midnightbsd-cvs] src: i386/linux: sync with freebsd 7
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sat Dec 6 10:28:31 EST 2008
Log Message:
-----------
sync with freebsd 7
Modified Files:
--------------
src/sys/i386/linux:
imgact_linux.c (r1.1.1.1 -> r1.2)
linux.h (r1.1.1.1 -> r1.2)
linux_dummy.c (r1.1.1.1 -> r1.2)
linux_machdep.c (r1.1.1.1 -> r1.2)
linux_proto.h (r1.1.1.1 -> r1.2)
linux_ptrace.c (r1.2 -> r1.3)
linux_syscall.h (r1.1.1.1 -> r1.2)
linux_sysent.c (r1.1.1.1 -> r1.2)
linux_sysvec.c (r1.1.1.2 -> r1.2)
syscalls.conf (r1.1.1.1 -> r1.2)
syscalls.master (r1.1.1.1 -> r1.2)
Added Files:
-----------
src/sys/i386/linux:
linux_support.s (r1.1)
-------------- next part --------------
Index: syscalls.master
===================================================================
RCS file: /home/cvs/src/sys/i386/linux/syscalls.master,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -L sys/i386/linux/syscalls.master -L sys/i386/linux/syscalls.master -u -r1.1.1.1 -r1.2
--- sys/i386/linux/syscalls.master
+++ sys/i386/linux/syscalls.master
@@ -1,17 +1,17 @@
- $FreeBSD: src/sys/i386/linux/syscalls.master,v 1.61.2.1 2005/07/20 17:42:15 jhb Exp $
+ $FreeBSD: src/sys/i386/linux/syscalls.master,v 1.89 2007/09/18 19:50:33 dwmalone Exp $
; @(#)syscalls.master 8.1 (Berkeley) 7/19/93
; System call name/number master file (or rather, slave, from LINUX).
; Processed to create linux_sysent.c, linux_proto.h and linux_syscall.h.
-; Columns: number type nargs name alt{name,tag,rtyp}/comments
+; Columns: number audit type nargs name alt{name,tag,rtyp}/comments
; number system call number, must be in order
; audit the audit event associated with the system call
; A value of AUE_NULL means no auditing, but it also means that
; there is no audit event for the call at this time. For the
; case where the event exists, but we don't want auditing, the
; event should be #defined to AUE_NULL in audit_kevents.h.
-; type one of STD, OBSOL, UNIMPL, COMPAT
+; type one of STD, OBSOL, UNIMPL
; name psuedo-prototype of syscall routine
; If one of the following alts is different, then all appear:
; altname name of system call if different
@@ -20,13 +20,10 @@
; for UNIMPL/OBSOL, name continues with comments
; types:
-; AUE_NULL STD always included
-; COMPAT included on COMPAT #ifdef
-; LIBCOMPAT included on COMPAT #ifdef, and placed in syscall.h
+; STD always included
; OBSOL obsolete, not included in system, only specifies name
-; AUE_NULL UNIMPL not implemented, placeholder only
+; UNIMPL not implemented, placeholder only
-#include "opt_compat.h"
#include <sys/param.h>
#include <sys/sysent.h>
#include <sys/sysproto.h>
@@ -40,392 +37,457 @@
; #ifdef's, etc. may be included, and are copied to the output files.
0 AUE_NULL UNIMPL setup
-1 AUE_NULL MNOPROTO { void sys_exit(int rval); } exit \
+1 AUE_EXIT NOPROTO { void sys_exit(int rval); } exit \
sys_exit_args void
-2 AUE_NULL MSTD { int linux_fork(void); }
-3 AUE_NULL MNOPROTO { int read(int fd, char *buf, \
+2 AUE_FORK STD { int linux_fork(void); }
+3 AUE_NULL NOPROTO { int read(int fd, char *buf, \
u_int nbyte); }
-4 AUE_NULL MNOPROTO { int write(int fd, char *buf, \
+4 AUE_NULL NOPROTO { int write(int fd, char *buf, \
u_int nbyte); }
-5 AUE_NULL MSTD { int linux_open(char *path, l_int flags, \
+5 AUE_OPEN_RWTC STD { int linux_open(char *path, l_int flags, \
l_int mode); }
-6 AUE_NULL MNOPROTO { int close(int fd); }
-7 AUE_NULL MSTD { int linux_waitpid(l_pid_t pid, \
+6 AUE_CLOSE NOPROTO { int close(int fd); }
+7 AUE_WAIT4 STD { int linux_waitpid(l_pid_t pid, \
l_int *status, l_int options); }
-8 AUE_NULL MSTD { int linux_creat(char *path, \
+8 AUE_CREAT STD { int linux_creat(char *path, \
l_int mode); }
-9 AUE_NULL MSTD { int linux_link(char *path, char *to); }
-10 AUE_NULL MSTD { int linux_unlink(char *path); }
-11 AUE_NULL MSTD { int linux_execve(char *path, char **argp, \
+9 AUE_LINK STD { int linux_link(char *path, char *to); }
+10 AUE_UNLINK STD { int linux_unlink(char *path); }
+11 AUE_EXECVE STD { int linux_execve(char *path, char **argp, \
char **envp); }
-12 AUE_NULL MSTD { int linux_chdir(char *path); }
-13 AUE_NULL MSTD { int linux_time(l_time_t *tm); }
-14 AUE_NULL MSTD { int linux_mknod(char *path, l_int mode, \
+12 AUE_CHDIR STD { int linux_chdir(char *path); }
+13 AUE_NULL STD { int linux_time(l_time_t *tm); }
+14 AUE_MKNOD STD { int linux_mknod(char *path, l_int mode, \
l_dev_t dev); }
-15 AUE_NULL MSTD { int linux_chmod(char *path, \
+15 AUE_CHMOD STD { int linux_chmod(char *path, \
l_mode_t mode); }
-16 AUE_NULL MSTD { int linux_lchown16(char *path, \
+16 AUE_LCHOWN STD { int linux_lchown16(char *path, \
l_uid16_t uid, l_gid16_t gid); }
17 AUE_NULL UNIMPL break
-18 AUE_NULL MSTD { int linux_stat(char *path, \
- struct ostat *up); }
-19 AUE_NULL MSTD { int linux_lseek(l_uint fdes, l_off_t off, \
+18 AUE_STAT STD { int linux_stat(char *path, \
+ struct linux_stat *up); }
+19 AUE_LSEEK STD { int linux_lseek(l_uint fdes, l_off_t off, \
l_int whence); }
-20 AUE_NULL MSTD { int linux_getpid(void); }
-21 AUE_NULL STD { int linux_mount(char *specialfile, \
+20 AUE_GETPID STD { int linux_getpid(void); }
+21 AUE_MOUNT STD { int linux_mount(char *specialfile, \
char *dir, char *filesystemtype, \
l_ulong rwflag, void *data); }
-22 AUE_NULL STD { int linux_oldumount(char *path); }
-23 AUE_NULL MSTD { int linux_setuid16(l_uid16_t uid); }
-24 AUE_NULL MSTD { int linux_getuid16(void); }
-25 AUE_NULL MSTD { int linux_stime(void); }
-26 AUE_NULL MSTD { int linux_ptrace(l_long req, l_long pid, \
+22 AUE_UMOUNT STD { int linux_oldumount(char *path); }
+23 AUE_SETUID STD { int linux_setuid16(l_uid16_t uid); }
+24 AUE_GETUID STD { int linux_getuid16(void); }
+25 AUE_SETTIMEOFDAY STD { int linux_stime(void); }
+26 AUE_PTRACE STD { int linux_ptrace(l_long req, l_long pid, \
l_long addr, l_long data); }
-27 AUE_NULL MSTD { int linux_alarm(l_uint secs); }
-28 AUE_NULL MSTD { int linux_fstat(l_uint fd, \
- struct ostat *up); }
-29 AUE_NULL MSTD { int linux_pause(void); }
-30 AUE_NULL MSTD { int linux_utime(char *fname, \
+27 AUE_NULL STD { int linux_alarm(l_uint secs); }
+28 AUE_FSTAT STD { int linux_fstat(l_uint fd, \
+ struct linux_stat *up); }
+29 AUE_NULL STD { int linux_pause(void); }
+30 AUE_UTIME STD { int linux_utime(char *fname, \
struct l_utimbuf *times); }
31 AUE_NULL UNIMPL stty
32 AUE_NULL UNIMPL gtty
-33 AUE_NULL MSTD { int linux_access(char *path, l_int flags); }
-34 AUE_NULL MSTD { int linux_nice(l_int inc); }
+33 AUE_ACCESS STD { int linux_access(char *path, l_int flags); }
+34 AUE_NICE STD { int linux_nice(l_int inc); }
35 AUE_NULL UNIMPL ftime
-36 AUE_NULL MNOPROTO { int sync(void); }
-37 AUE_NULL MSTD { int linux_kill(l_int pid, l_int signum); }
-38 AUE_NULL MSTD { int linux_rename(char *from, char *to); }
-39 AUE_NULL MSTD { int linux_mkdir(char *path, l_int mode); }
-40 AUE_NULL MSTD { int linux_rmdir(char *path); }
-41 AUE_NULL MNOPROTO { int dup(u_int fd); }
-42 AUE_NULL MSTD { int linux_pipe(l_ulong *pipefds); }
-43 AUE_NULL MSTD { int linux_times(struct l_times_argv *buf); }
+36 AUE_SYNC NOPROTO { int sync(void); }
+37 AUE_KILL STD { int linux_kill(l_int pid, l_int signum); }
+38 AUE_RENAME STD { int linux_rename(char *from, char *to); }
+39 AUE_MKDIR STD { int linux_mkdir(char *path, l_int mode); }
+40 AUE_RMDIR STD { int linux_rmdir(char *path); }
+41 AUE_DUP NOPROTO { int dup(u_int fd); }
+42 AUE_PIPE STD { int linux_pipe(l_ulong *pipefds); }
+43 AUE_NULL STD { int linux_times(struct l_times_argv *buf); }
44 AUE_NULL UNIMPL prof
45 AUE_NULL STD { int linux_brk(l_ulong dsend); }
-46 AUE_NULL MSTD { int linux_setgid16(l_gid16_t gid); }
-47 AUE_NULL MSTD { int linux_getgid16(void); }
-48 AUE_NULL MSTD { int linux_signal(l_int sig, \
+46 AUE_SETGID STD { int linux_setgid16(l_gid16_t gid); }
+47 AUE_GETGID STD { int linux_getgid16(void); }
+48 AUE_NULL STD { int linux_signal(l_int sig, \
l_handler_t handler); }
-49 AUE_NULL MSTD { int linux_geteuid16(void); }
-50 AUE_NULL MSTD { int linux_getegid16(void); }
-51 AUE_NULL MNOPROTO { int acct(char *path); }
-52 AUE_NULL STD { int linux_umount(char *path, l_int flags); }
+49 AUE_GETEUID STD { int linux_geteuid16(void); }
+50 AUE_GETEGID STD { int linux_getegid16(void); }
+51 AUE_ACCT NOPROTO { int acct(char *path); }
+52 AUE_UMOUNT STD { int linux_umount(char *path, l_int flags); }
53 AUE_NULL UNIMPL lock
-54 AUE_NULL STD { int linux_ioctl(l_uint fd, l_uint cmd, \
+54 AUE_IOCTL STD { int linux_ioctl(l_uint fd, l_uint cmd, \
l_ulong arg); }
-55 AUE_NULL MSTD { int linux_fcntl(l_uint fd, l_uint cmd, \
+55 AUE_FCNTL STD { int linux_fcntl(l_uint fd, l_uint cmd, \
l_ulong arg); }
56 AUE_NULL UNIMPL mpx
-57 AUE_NULL MNOPROTO { int setpgid(int pid, int pgid); }
+57 AUE_SETPGRP NOPROTO { int setpgid(int pid, int pgid); }
58 AUE_NULL UNIMPL ulimit
-59 AUE_NULL MSTD { int linux_olduname(void); }
-60 AUE_NULL MNOPROTO { int umask(int newmask); }
-61 AUE_NULL MNOPROTO { int chroot(char *path); }
-62 AUE_NULL MSTD { int linux_ustat(l_dev_t dev, \
+59 AUE_NULL STD { int linux_olduname(void); }
+60 AUE_UMASK NOPROTO { int umask(int newmask); }
+61 AUE_CHROOT NOPROTO { int chroot(char *path); }
+62 AUE_NULL STD { int linux_ustat(l_dev_t dev, \
struct l_ustat *ubuf); }
-63 AUE_NULL MNOPROTO { int dup2(u_int from, u_int to); }
-64 AUE_NULL MNOPROTO { int getppid(void); }
-65 AUE_NULL MNOPROTO { int getpgrp(void); }
-66 AUE_NULL MNOPROTO { int setsid(void); }
-67 AUE_NULL MSTD { int linux_sigaction(l_int sig, \
+63 AUE_DUP2 NOPROTO { int dup2(u_int from, u_int to); }
+64 AUE_GETPPID STD { int linux_getppid(void); }
+65 AUE_GETPGRP NOPROTO { int getpgrp(void); }
+66 AUE_SETSID NOPROTO { int setsid(void); }
+67 AUE_NULL STD { int linux_sigaction(l_int sig, \
l_osigaction_t *nsa, \
l_osigaction_t *osa); }
-68 AUE_NULL MSTD { int linux_sgetmask(void); }
-69 AUE_NULL MSTD { int linux_ssetmask(l_osigset_t mask); }
-70 AUE_NULL MSTD { int linux_setreuid16(l_uid16_t ruid, \
+68 AUE_NULL STD { int linux_sgetmask(void); }
+69 AUE_NULL STD { int linux_ssetmask(l_osigset_t mask); }
+70 AUE_SETREUID STD { int linux_setreuid16(l_uid16_t ruid, \
l_uid16_t euid); }
-71 AUE_NULL MSTD { int linux_setregid16(l_gid16_t rgid, \
+71 AUE_SETREGID STD { int linux_setregid16(l_gid16_t rgid, \
l_gid16_t egid); }
-72 AUE_NULL MSTD { int linux_sigsuspend(l_int hist0, \
+72 AUE_NULL STD { int linux_sigsuspend(l_int hist0, \
l_int hist1, l_osigset_t mask); }
-73 AUE_NULL MSTD { int linux_sigpending(l_osigset_t *mask); }
-74 AUE_NULL MNOPROTO { int osethostname(char *hostname, \
- u_int len); } osethostname \
- sethostname_args int
-75 AUE_NULL MSTD { int linux_setrlimit(l_uint resource, \
+73 AUE_NULL STD { int linux_sigpending(l_osigset_t *mask); }
+74 AUE_SYSCTL STD { int linux_sethostname(char *hostname, \
+ u_int len); }
+75 AUE_SETRLIMIT STD { int linux_setrlimit(l_uint resource, \
struct l_rlimit *rlim); }
-76 AUE_NULL MSTD { int linux_old_getrlimit(l_uint resource, \
+76 AUE_GETRLIMIT STD { int linux_old_getrlimit(l_uint resource, \
struct l_rlimit *rlim); }
-77 AUE_NULL MNOPROTO { int getrusage(int who, \
+77 AUE_GETRUSAGE NOPROTO { int getrusage(int who, \
struct rusage *rusage); }
-78 AUE_NULL MNOPROTO { int gettimeofday(struct timeval *tp, \
+78 AUE_NULL NOPROTO { int gettimeofday( \
+ struct timeval *tp, \
struct timezone *tzp); }
-79 AUE_NULL MNOPROTO { int settimeofday(struct timeval *tp, \
+79 AUE_SETTIMEOFDAY NOPROTO { int settimeofday( \
+ struct timeval *tp, \
struct timezone *tzp); }
-80 AUE_NULL MSTD { int linux_getgroups16(l_uint gidsetsize, \
+80 AUE_GETGROUPS STD { int linux_getgroups16(l_uint gidsetsize, \
l_gid16_t *gidset); }
-81 AUE_NULL MSTD { int linux_setgroups16(l_uint gidsetsize, \
+81 AUE_SETGROUPS STD { int linux_setgroups16(l_uint gidsetsize, \
l_gid16_t *gidset); }
-82 AUE_NULL MSTD { int linux_old_select( \
+82 AUE_SELECT STD { int linux_old_select( \
struct l_old_select_argv *ptr); }
-83 AUE_NULL MSTD { int linux_symlink(char *path, char *to); }
-84 AUE_NULL MNOPROTO { int ostat(char *path, struct ostat *up); }
-85 AUE_NULL MSTD { int linux_readlink(char *name, char *buf, \
+83 AUE_SYMLINK STD { int linux_symlink(char *path, char *to); }
+84 AUE_LSTAT STD { int linux_lstat(char *path, struct ostat *up); }
+85 AUE_READLINK STD { int linux_readlink(char *name, char *buf, \
l_int count); }
-86 AUE_NULL STD { int linux_uselib(char *library); }
-87 AUE_NULL MNOPROTO { int swapon(char *name); }
-88 AUE_NULL MSTD { int linux_reboot(l_int magic1, \
+86 AUE_USELIB STD { int linux_uselib(char *library); }
+87 AUE_SWAPON NOPROTO { int swapon(char *name); }
+88 AUE_REBOOT STD { int linux_reboot(l_int magic1, \
l_int magic2, l_uint cmd, void *arg); }
-89 AUE_NULL STD { int linux_readdir(l_uint fd, \
+89 AUE_GETDIRENTRIES STD { int linux_readdir(l_uint fd, \
struct l_dirent *dent, l_uint count); }
-90 AUE_NULL MSTD { int linux_mmap(struct l_mmap_argv *ptr); }
-91 AUE_NULL MNOPROTO { int munmap(caddr_t addr, int len); }
-92 AUE_NULL MSTD { int linux_truncate(char *path, \
+90 AUE_MMAP STD { int linux_mmap(struct l_mmap_argv *ptr); }
+91 AUE_MUNMAP NOPROTO { int munmap(caddr_t addr, int len); }
+92 AUE_TRUNCATE STD { int linux_truncate(char *path, \
l_ulong length); }
-93 AUE_NULL MNOPROTO { int oftruncate(int fd, long length); }
-94 AUE_NULL MNOPROTO { int fchmod(int fd, int mode); }
-95 AUE_NULL MNOPROTO { int fchown(int fd, int uid, int gid); }
-96 AUE_NULL MSTD { int linux_getpriority(int which, int who); }
-97 AUE_NULL MNOPROTO { int setpriority(int which, int who, \
+93 AUE_FTRUNCATE STD { int linux_ftruncate(int fd, long length); }
+94 AUE_FCHMOD NOPROTO { int fchmod(int fd, int mode); }
+95 AUE_FCHOWN NOPROTO { int fchown(int fd, int uid, int gid); }
+96 AUE_GETPRIORITY STD { int linux_getpriority(int which, int who); }
+97 AUE_SETPRIORITY NOPROTO { int setpriority(int which, int who, \
int prio); }
-98 AUE_NULL UNIMPL profil
-99 AUE_NULL MSTD { int linux_statfs(char *path, \
+98 AUE_PROFILE UNIMPL profil
+99 AUE_STATFS STD { int linux_statfs(char *path, \
struct l_statfs_buf *buf); }
-100 AUE_NULL MSTD { int linux_fstatfs(l_uint fd, \
+100 AUE_FSTATFS STD { int linux_fstatfs(l_uint fd, \
struct l_statfs_buf *buf); }
-101 AUE_NULL MSTD { int linux_ioperm(l_ulong start, \
+101 AUE_NULL STD { int linux_ioperm(l_ulong start, \
l_ulong length, l_int enable); }
-102 AUE_NULL MSTD { int linux_socketcall(l_int what, \
+102 AUE_NULL STD { int linux_socketcall(l_int what, \
l_ulong args); }
-103 AUE_NULL MSTD { int linux_syslog(l_int type, char *buf, \
+103 AUE_NULL STD { int linux_syslog(l_int type, char *buf, \
l_int len); }
-104 AUE_NULL MSTD { int linux_setitimer(l_int which, \
+104 AUE_SETITIMER STD { int linux_setitimer(l_int which, \
struct l_itimerval *itv, \
struct l_itimerval *oitv); }
-105 AUE_NULL MSTD { int linux_getitimer(l_int which, \
+105 AUE_GETITIMER STD { int linux_getitimer(l_int which, \
struct l_itimerval *itv); }
-106 AUE_NULL MSTD { int linux_newstat(char *path, \
+106 AUE_STAT STD { int linux_newstat(char *path, \
struct l_newstat *buf); }
-107 AUE_NULL MSTD { int linux_newlstat(char *path, \
+107 AUE_LSTAT STD { int linux_newlstat(char *path, \
struct l_newstat *buf); }
-108 AUE_NULL MSTD { int linux_newfstat(l_uint fd, \
+108 AUE_FSTAT STD { int linux_newfstat(l_uint fd, \
struct l_newstat *buf); }
-109 AUE_NULL MSTD { int linux_uname(void); }
-110 AUE_NULL MSTD { int linux_iopl(l_ulong level); }
-111 AUE_NULL MSTD { int linux_vhangup(void); }
+109 AUE_NULL STD { int linux_uname(void); }
+110 AUE_NULL STD { int linux_iopl(l_ulong level); }
+111 AUE_NULL STD { int linux_vhangup(void); }
112 AUE_NULL UNIMPL idle
-113 AUE_NULL MSTD { int linux_vm86old(void); }
-114 AUE_NULL MSTD { int linux_wait4(l_pid_t pid, \
+113 AUE_NULL STD { int linux_vm86old(void); }
+114 AUE_WAIT4 STD { int linux_wait4(l_pid_t pid, \
l_uint *status, l_int options, \
struct l_rusage *rusage); }
-115 AUE_NULL MSTD { int linux_swapoff(void); }
-116 AUE_NULL MSTD { int linux_sysinfo(struct l_sysinfo *info); }
+115 AUE_SWAPOFF STD { int linux_swapoff(void); }
+116 AUE_NULL STD { int linux_sysinfo(struct l_sysinfo *info); }
117 AUE_NULL STD { int linux_ipc(l_uint what, l_int arg1, \
l_int arg2, l_int arg3, void *ptr, \
l_long arg5); }
-118 AUE_NULL MNOPROTO { int fsync(int fd); }
-119 AUE_NULL MSTD { int linux_sigreturn( \
+118 AUE_FSYNC NOPROTO { int fsync(int fd); }
+119 AUE_SIGRETURN STD { int linux_sigreturn( \
struct l_sigframe *sfp); }
-120 AUE_NULL MSTD { int linux_clone(l_int flags, void *stack); }
-121 AUE_NULL MNOPROTO { int setdomainname(char *name, int len); }
-122 AUE_NULL MSTD { int linux_newuname( \
+; linux uses some strange calling convention here so we have to use the dummy arg
+120 AUE_RFORK STD { int linux_clone(l_int flags, void *stack, \
+ void *parent_tidptr, int dummy, void * child_tidptr); }
+121 AUE_SYSCTL NOPROTO { int setdomainname(char *name, \
+ int len); }
+122 AUE_NULL STD { int linux_newuname( \
struct l_new_utsname *buf); }
-123 AUE_NULL MSTD { int linux_modify_ldt(l_int func, \
+123 AUE_NULL STD { int linux_modify_ldt(l_int func, \
void *ptr, l_ulong bytecount); }
-124 AUE_NULL MSTD { int linux_adjtimex(void); }
-125 AUE_NULL MNOPROTO { int mprotect(caddr_t addr, int len, \
+124 AUE_ADJTIME STD { int linux_adjtimex(void); }
+125 AUE_MPROTECT STD { int linux_mprotect(caddr_t addr, int len, \
int prot); }
-126 AUE_NULL MSTD { int linux_sigprocmask(l_int how, \
+126 AUE_SIGPROCMASK STD { int linux_sigprocmask(l_int how, \
l_osigset_t *mask, l_osigset_t *omask); }
-127 AUE_NULL MSTD { int linux_create_module(void); }
-128 AUE_NULL MSTD { int linux_init_module(void); }
-129 AUE_NULL MSTD { int linux_delete_module(void); }
-130 AUE_NULL MSTD { int linux_get_kernel_syms(void); }
-131 AUE_NULL MSTD { int linux_quotactl(void); }
-132 AUE_NULL MNOPROTO { int getpgid(int pid); }
-133 AUE_NULL MNOPROTO { int fchdir(int fd); }
-134 AUE_NULL MSTD { int linux_bdflush(void); }
-135 AUE_NULL MSTD { int linux_sysfs(l_int option, \
+127 AUE_NULL STD { int linux_create_module(void); }
+128 AUE_NULL STD { int linux_init_module(void); }
+129 AUE_NULL STD { int linux_delete_module(void); }
+130 AUE_NULL STD { int linux_get_kernel_syms(void); }
+131 AUE_QUOTACTL STD { int linux_quotactl(void); }
+132 AUE_GETPGID NOPROTO { int getpgid(int pid); }
+133 AUE_FCHDIR NOPROTO { int fchdir(int fd); }
+134 AUE_BDFLUSH STD { int linux_bdflush(void); }
+135 AUE_NULL STD { int linux_sysfs(l_int option, \
l_ulong arg1, l_ulong arg2); }
-136 AUE_NULL MSTD { int linux_personality(l_ulong per); }
+136 AUE_PERSONALITY STD { int linux_personality(l_ulong per); }
137 AUE_NULL UNIMPL afs_syscall
-138 AUE_NULL MSTD { int linux_setfsuid16(l_uid16_t uid); }
-139 AUE_NULL MSTD { int linux_setfsgid16(l_gid16_t gid); }
-140 AUE_NULL MSTD { int linux_llseek(l_int fd, l_ulong ohigh, \
+138 AUE_SETFSUID STD { int linux_setfsuid16(l_uid16_t uid); }
+139 AUE_SETFSGID STD { int linux_setfsgid16(l_gid16_t gid); }
+140 AUE_LSEEK STD { int linux_llseek(l_int fd, l_ulong ohigh, \
l_ulong olow, l_loff_t *res, \
l_uint whence); }
-141 AUE_NULL STD { int linux_getdents(l_uint fd, void *dent, \
- l_uint count); }
-142 AUE_NULL MSTD { int linux_select(l_int nfds, \
+141 AUE_GETDIRENTRIES STD { int linux_getdents(l_uint fd, \
+ void *dent, l_uint count); }
+142 AUE_SELECT STD { int linux_select(l_int nfds, \
l_fd_set *readfds, l_fd_set *writefds, \
l_fd_set *exceptfds, \
struct l_timeval *timeout); }
-143 AUE_NULL MNOPROTO { int flock(int fd, int how); }
-144 AUE_NULL MSTD { int linux_msync(l_ulong addr, \
+143 AUE_FLOCK NOPROTO { int flock(int fd, int how); }
+144 AUE_MSYNC STD { int linux_msync(l_ulong addr, \
l_size_t len, l_int fl); }
-145 AUE_NULL MNOPROTO { int readv(int fd, struct iovec *iovp, \
+145 AUE_READV NOPROTO { int readv(int fd, struct iovec *iovp, \
u_int iovcnt); }
-146 AUE_NULL MNOPROTO { int writev(int fd, struct iovec *iovp, \
+146 AUE_WRITEV NOPROTO { int writev(int fd, struct iovec *iovp, \
u_int iovcnt); }
-147 AUE_NULL MSTD { int linux_getsid(l_pid_t pid); }
-148 AUE_NULL MSTD { int linux_fdatasync(l_uint fd); }
-149 AUE_NULL MSTD { int linux_sysctl( \
+147 AUE_GETSID STD { int linux_getsid(l_pid_t pid); }
+148 AUE_NULL STD { int linux_fdatasync(l_uint fd); }
+149 AUE_SYSCTL STD { int linux_sysctl( \
struct l___sysctl_args *args); }
-150 AUE_NULL MNOPROTO { int mlock(const void *addr, size_t len); }
-151 AUE_NULL MNOPROTO { int munlock(const void *addr, size_t len); }
-152 AUE_NULL MNOPROTO { int mlockall(int how); }
-153 AUE_NULL MNOPROTO { int munlockall(void); }
-154 AUE_NULL MNOPROTO { int sched_setparam(pid_t pid, \
+150 AUE_MLOCK NOPROTO { int mlock(const void *addr, size_t len); }
+151 AUE_MUNLOCK NOPROTO { int munlock(const void *addr, size_t len); }
+152 AUE_MLOCKALL NOPROTO { int mlockall(int how); }
+153 AUE_MUNLOCKALL NOPROTO { int munlockall(void); }
+154 AUE_SCHED_SETPARAM NOPROTO { int sched_setparam(pid_t pid, \
const struct sched_param *param); }
-155 AUE_NULL MNOPROTO { int sched_getparam(pid_t pid, \
+155 AUE_SCHED_GETPARAM NOPROTO { int sched_getparam(pid_t pid, \
struct sched_param *param); }
-156 AUE_NULL MSTD { int linux_sched_setscheduler(l_pid_t pid, \
- l_int policy, \
+156 AUE_SCHED_SETSCHEDULER STD { int linux_sched_setscheduler( \
+ l_pid_t pid, l_int policy, \
struct l_sched_param *param); }
-157 AUE_NULL MSTD { int linux_sched_getscheduler(l_pid_t pid); }
-158 AUE_NULL MNOPROTO { int sched_yield(void); }
-159 AUE_NULL MSTD { int linux_sched_get_priority_max( \
+157 AUE_SCHED_GETSCHEDULER STD { int linux_sched_getscheduler( \
+ l_pid_t pid); }
+158 AUE_NULL NOPROTO { int sched_yield(void); }
+159 AUE_SCHED_GET_PRIORITY_MAX STD { int linux_sched_get_priority_max( \
l_int policy); }
-160 AUE_NULL MSTD { int linux_sched_get_priority_min( \
+160 AUE_SCHED_GET_PRIORITY_MIN STD { int linux_sched_get_priority_min( \
l_int policy); }
-161 AUE_NULL MNOPROTO { int sched_rr_get_interval(l_pid_t pid, \
+161 AUE_SCHED_RR_GET_INTERVAL NOPROTO { int sched_rr_get_interval(l_pid_t pid, \
struct l_timespec *interval); }
-162 AUE_NULL MNOPROTO { int nanosleep( \
- const struct timespec *rqtp, \
- struct timespec *rmtp); }
-163 AUE_NULL MSTD { int linux_mremap(l_ulong addr, \
+162 AUE_NULL STD { int linux_nanosleep( \
+ const struct l_timespec *rqtp, \
+ struct l_timespec *rmtp); }
+163 AUE_NULL STD { int linux_mremap(l_ulong addr, \
l_ulong old_len, l_ulong new_len, \
l_ulong flags, l_ulong new_addr); }
-164 AUE_NULL MSTD { int linux_setresuid16(l_uid16_t ruid, \
+164 AUE_SETRESUID STD { int linux_setresuid16(l_uid16_t ruid, \
l_uid16_t euid, l_uid16_t suid); }
-165 AUE_NULL MSTD { int linux_getresuid16(l_uid16_t *ruid, \
+165 AUE_GETRESUID STD { int linux_getresuid16(l_uid16_t *ruid, \
l_uid16_t *euid, l_uid16_t *suid); }
-166 AUE_NULL MSTD { int linux_vm86(void); }
-167 AUE_NULL MSTD { int linux_query_module(void); }
-168 AUE_NULL MNOPROTO { int poll(struct pollfd*, \
+166 AUE_NULL STD { int linux_vm86(void); }
+167 AUE_NULL STD { int linux_query_module(void); }
+168 AUE_POLL NOPROTO { int poll(struct pollfd*, \
unsigned int nfds, long timeout); }
-169 AUE_NULL MSTD { int linux_nfsservctl(void); }
-170 AUE_NULL MSTD { int linux_setresgid16(l_gid16_t rgid, \
+169 AUE_NULL STD { int linux_nfsservctl(void); }
+170 AUE_SETRESGID STD { int linux_setresgid16(l_gid16_t rgid, \
l_gid16_t egid, l_gid16_t sgid); }
-171 AUE_NULL MSTD { int linux_getresgid16(l_gid16_t *rgid, \
+171 AUE_GETRESGID STD { int linux_getresgid16(l_gid16_t *rgid, \
l_gid16_t *egid, l_gid16_t *sgid); }
-172 AUE_NULL MSTD { int linux_prctl(void); }
-173 AUE_NULL MSTD { int linux_rt_sigreturn( \
+172 AUE_PRCTL STD { int linux_prctl(l_int option, l_int arg2, l_int arg3, \
+ l_int arg4, l_int arg5); }
+173 AUE_NULL STD { int linux_rt_sigreturn( \
struct l_ucontext *ucp); }
-174 AUE_NULL MSTD { int linux_rt_sigaction(l_int sig, \
+174 AUE_NULL STD { int linux_rt_sigaction(l_int sig, \
l_sigaction_t *act, l_sigaction_t *oact, \
l_size_t sigsetsize); }
-175 AUE_NULL MSTD { int linux_rt_sigprocmask(l_int how, \
+175 AUE_NULL STD { int linux_rt_sigprocmask(l_int how, \
l_sigset_t *mask, l_sigset_t *omask, \
l_size_t sigsetsize); }
-176 AUE_NULL MSTD { int linux_rt_sigpending(void); }
-177 AUE_NULL MSTD { int linux_rt_sigtimedwait(void); }
-178 AUE_NULL MSTD { int linux_rt_sigqueueinfo(void); }
-179 AUE_NULL MSTD { int linux_rt_sigsuspend( \
+176 AUE_NULL STD { int linux_rt_sigpending(l_sigset_t *set, \
+ l_size_t sigsetsize); }
+177 AUE_NULL STD { int linux_rt_sigtimedwait(l_sigset_t *mask, \
+ l_siginfo_t *ptr, \
+ struct l_timeval *timeout, \
+ l_size_t sigsetsize); }
+178 AUE_NULL STD { int linux_rt_sigqueueinfo(void); }
+179 AUE_NULL STD { int linux_rt_sigsuspend( \
l_sigset_t *newset, \
l_size_t sigsetsize); }
-180 AUE_NULL MSTD { int linux_pread(l_uint fd, char *buf, \
+180 AUE_PREAD STD { int linux_pread(l_uint fd, char *buf, \
l_size_t nbyte, l_loff_t offset); }
-181 AUE_NULL MSTD { int linux_pwrite(l_uint fd, char *buf, \
+181 AUE_PWRITE STD { int linux_pwrite(l_uint fd, char *buf, \
l_size_t nbyte, l_loff_t offset); }
-182 AUE_NULL MSTD { int linux_chown16(char *path, \
+182 AUE_CHOWN STD { int linux_chown16(char *path, \
l_uid16_t uid, l_gid16_t gid); }
-183 AUE_NULL MSTD { int linux_getcwd(char *buf, \
+183 AUE_GETCWD STD { int linux_getcwd(char *buf, \
l_ulong bufsize); }
-184 AUE_NULL MSTD { int linux_capget(void); }
-185 AUE_NULL MSTD { int linux_capset(void); }
-186 AUE_NULL MSTD { int linux_sigaltstack(l_stack_t *uss, \
+184 AUE_CAPGET STD { int linux_capget(void); }
+185 AUE_CAPSET STD { int linux_capset(void); }
+186 AUE_NULL STD { int linux_sigaltstack(l_stack_t *uss, \
l_stack_t *uoss); }
-187 AUE_NULL MSTD { int linux_sendfile(void); }
-188 AUE_NULL UNIMPL getpmsg
-189 AUE_NULL UNIMPL putpmsg
-190 AUE_NULL MSTD { int linux_vfork(void); }
-191 AUE_NULL MSTD { int linux_getrlimit(l_uint resource, \
+187 AUE_SENDFILE STD { int linux_sendfile(void); }
+188 AUE_GETPMSG UNIMPL getpmsg
+189 AUE_PUTPMSG UNIMPL putpmsg
+190 AUE_VFORK STD { int linux_vfork(void); }
+191 AUE_GETRLIMIT STD { int linux_getrlimit(l_uint resource, \
struct l_rlimit *rlim); }
-192 AUE_NULL MSTD { int linux_mmap2(l_ulong addr, l_ulong len, \
+192 AUE_MMAP STD { int linux_mmap2(l_ulong addr, l_ulong len, \
l_ulong prot, l_ulong flags, l_ulong fd, \
l_ulong pgoff); }
-193 AUE_NULL MSTD { int linux_truncate64(char *path, \
+193 AUE_TRUNCATE STD { int linux_truncate64(char *path, \
l_loff_t length); }
-194 AUE_NULL MSTD { int linux_ftruncate64(l_uint fd, \
+194 AUE_FTRUNCATE STD { int linux_ftruncate64(l_uint fd, \
l_loff_t length); }
-195 AUE_NULL MSTD { int linux_stat64(char *filename, \
+195 AUE_STAT STD { int linux_stat64(char *filename, \
struct l_stat64 *statbuf, l_long flags); }
-196 AUE_NULL MSTD { int linux_lstat64(char *filename, \
+196 AUE_LSTAT STD { int linux_lstat64(char *filename, \
struct l_stat64 *statbuf, l_long flags); }
-197 AUE_NULL MSTD { int linux_fstat64(l_ulong fd, \
+197 AUE_FSTAT STD { int linux_fstat64(l_ulong fd, \
struct l_stat64 *statbuf, l_long flags); }
-198 AUE_NULL MSTD { int linux_lchown(char *path, l_uid_t uid, \
+198 AUE_LCHOWN STD { int linux_lchown(char *path, l_uid_t uid, \
l_gid_t gid); }
-199 AUE_NULL MSTD { int linux_getuid(void); }
-200 AUE_NULL MSTD { int linux_getgid(void); }
-201 AUE_NULL MNOPROTO { int geteuid(void); }
-202 AUE_NULL MNOPROTO { int getegid(void); }
-203 AUE_NULL MNOPROTO { int setreuid(uid_t ruid, uid_t euid); }
-204 AUE_NULL MNOPROTO { int setregid(gid_t rgid, gid_t egid); }
-205 AUE_NULL MSTD { int linux_getgroups(l_int gidsetsize, \
+199 AUE_GETUID STD { int linux_getuid(void); }
+200 AUE_GETGID STD { int linux_getgid(void); }
+201 AUE_GETEUID NOPROTO { int geteuid(void); }
+202 AUE_GETEGID NOPROTO { int getegid(void); }
+203 AUE_SETREUID NOPROTO { int setreuid(uid_t ruid, uid_t euid); }
+204 AUE_SETREGID NOPROTO { int setregid(gid_t rgid, gid_t egid); }
+205 AUE_GETGROUPS STD { int linux_getgroups(l_int gidsetsize, \
l_gid_t *grouplist); }
-206 AUE_NULL MSTD { int linux_setgroups(l_int gidsetsize, \
+206 AUE_SETGROUPS STD { int linux_setgroups(l_int gidsetsize, \
l_gid_t *grouplist); }
-207 AUE_NULL NODEF fchown fchown fchown_args int
-208 AUE_NULL MNOPROTO { int setresuid(uid_t ruid, uid_t euid, \
+207 AUE_FCHOWN NODEF fchown fchown fchown_args int
+208 AUE_SETRESUID NOPROTO { int setresuid(uid_t ruid, uid_t euid, \
uid_t suid); }
-209 AUE_NULL MNOPROTO { int getresuid(uid_t *ruid, uid_t *euid, \
+209 AUE_GETRESUID NOPROTO { int getresuid(uid_t *ruid, uid_t *euid, \
uid_t *suid); }
-210 AUE_NULL MNOPROTO { int setresgid(gid_t rgid, gid_t egid, \
+210 AUE_SETRESGID NOPROTO { int setresgid(gid_t rgid, gid_t egid, \
gid_t sgid); }
-211 AUE_NULL MNOPROTO { int getresgid(gid_t *rgid, gid_t *egid, \
+211 AUE_GETRESGID NOPROTO { int getresgid(gid_t *rgid, gid_t *egid, \
gid_t *sgid); }
-212 AUE_NULL MSTD { int linux_chown(char *path, l_uid_t uid, \
+212 AUE_CHOWN STD { int linux_chown(char *path, l_uid_t uid, \
l_gid_t gid); }
-213 AUE_NULL MNOPROTO { int setuid(uid_t uid); }
-214 AUE_NULL MNOPROTO { int setgid(gid_t gid); }
-215 AUE_NULL MSTD { int linux_setfsuid(l_uid_t uid); }
-216 AUE_NULL MSTD { int linux_setfsgid(l_gid_t gid); }
-217 AUE_NULL MSTD { int linux_pivot_root(char *new_root, \
+213 AUE_SETUID NOPROTO { int setuid(uid_t uid); }
+214 AUE_SETGID NOPROTO { int setgid(gid_t gid); }
+215 AUE_SETFSUID STD { int linux_setfsuid(l_uid_t uid); }
+216 AUE_SETFSGID STD { int linux_setfsgid(l_gid_t gid); }
+217 AUE_PIVOT_ROOT STD { int linux_pivot_root(char *new_root, \
char *put_old); }
-218 AUE_NULL MSTD { int linux_mincore(l_ulong start, \
+218 AUE_MINCORE STD { int linux_mincore(l_ulong start, \
l_size_t len, u_char *vec); }
-219 AUE_NULL MNOPROTO { int madvise(void *addr, size_t len, \
+219 AUE_MADVISE NOPROTO { int madvise(void *addr, size_t len, \
int behav); }
-220 AUE_NULL STD { int linux_getdents64(l_uint fd, \
+220 AUE_GETDIRENTRIES STD { int linux_getdents64(l_uint fd, \
void *dirent, l_uint count); }
-221 AUE_NULL MSTD { int linux_fcntl64(l_uint fd, l_uint cmd, \
+221 AUE_FCNTL STD { int linux_fcntl64(l_uint fd, l_uint cmd, \
l_ulong arg); }
222 AUE_NULL UNIMPL
223 AUE_NULL UNIMPL
-224 AUE_NULL MSTD { long linux_gettid(void); }
+224 AUE_NULL STD { long linux_gettid(void); }
225 AUE_NULL UNIMPL linux_readahead
-226 AUE_NULL MSTD { int linux_setxattr(void); }
-227 AUE_NULL MSTD { int linux_lsetxattr(void); }
-228 AUE_NULL MSTD { int linux_fsetxattr(void); }
-229 AUE_NULL MSTD { int linux_getxattr(void); }
-230 AUE_NULL MSTD { int linux_lgetxattr(void); }
-231 AUE_NULL MSTD { int linux_fgetxattr(void); }
-232 AUE_NULL MSTD { int linux_listxattr(void); }
-233 AUE_NULL MSTD { int linux_llistxattr(void); }
-234 AUE_NULL MSTD { int linux_flistxattr(void); }
-235 AUE_NULL MSTD { int linux_removexattr(void); }
-236 AUE_NULL MSTD { int linux_lremovexattr(void); }
-237 AUE_NULL MSTD { int linux_fremovexattr(void); }
-238 AUE_NULL MSTD { int linux_tkill(int tid, int sig); }
-239 AUE_NULL UNIMPL linux_sendfile64
-240 AUE_NULL UNIMPL linux_futex
+226 AUE_NULL STD { int linux_setxattr(void); }
+227 AUE_NULL STD { int linux_lsetxattr(void); }
+228 AUE_NULL STD { int linux_fsetxattr(void); }
+229 AUE_NULL STD { int linux_getxattr(void); }
+230 AUE_NULL STD { int linux_lgetxattr(void); }
+231 AUE_NULL STD { int linux_fgetxattr(void); }
+232 AUE_NULL STD { int linux_listxattr(void); }
+233 AUE_NULL STD { int linux_llistxattr(void); }
+234 AUE_NULL STD { int linux_flistxattr(void); }
+235 AUE_NULL STD { int linux_removexattr(void); }
+236 AUE_NULL STD { int linux_lremovexattr(void); }
+237 AUE_NULL STD { int linux_fremovexattr(void); }
+238 AUE_NULL STD { int linux_tkill(int tid, int sig); }
+239 AUE_SENDFILE UNIMPL linux_sendfile64
+240 AUE_NULL STD { int linux_sys_futex(void *uaddr, int op, int val, \
+ struct l_timespec *timeout, void *uaddr2, int val3); }
241 AUE_NULL UNIMPL linux_sched_setaffinity
-242 AUE_NULL UNIMPL linux_sched_getaffinity
-243 AUE_NULL MSTD { int linux_set_thread_area(void *entry); }
-244 AUE_NULL UNIMPL linux_get_thread_area
+242 AUE_NULL STD { int linux_sched_getaffinity(l_pid_t pid, l_uint len, \
+ l_ulong *user_mask_ptr); }
+243 AUE_NULL STD { int linux_set_thread_area(struct l_user_desc *desc); }
+244 AUE_NULL STD { int linux_get_thread_area(struct l_user_desc *desc); }
245 AUE_NULL UNIMPL linux_io_setup
246 AUE_NULL UNIMPL linux_io_destroy
247 AUE_NULL UNIMPL linux_io_getevents
248 AUE_NULL UNIMPL linux_io_submit
249 AUE_NULL UNIMPL linux_io_cancel
-250 AUE_NULL MSTD { int linux_fadvise64(void); }
+250 AUE_NULL STD { int linux_fadvise64(void); }
251 AUE_NULL UNIMPL
-252 AUE_NULL MNOPROTO { void sys_exit(int rval); } exit_group \
- sys_exit_args void
-253 AUE_NULL UNIMPL linux_lookup_dcookie
-254 AUE_NULL UNIMPL linux_epoll_create
-255 AUE_NULL UNIMPL linux_epoll_ctl
-256 AUE_NULL UNIMPL linux_epoll_wait
-257 AUE_NULL UNIMPL linux_remap_file_pages
-258 AUE_NULL UNIMPL linux_set_tid_address
-259 AUE_NULL UNIMPL linux_timer_create
-260 AUE_NULL UNIMPL linux_timer_settime
-261 AUE_NULL UNIMPL linux_timer_gettime
-262 AUE_NULL UNIMPL linux_timer_getoverrun
-263 AUE_NULL UNIMPL linux_timer_delete
-264 AUE_NULL UNIMPL linux_clock_settime
-265 AUE_NULL UNIMPL linux_clock_gettime
-266 AUE_NULL UNIMPL linux_clock_getres
-267 AUE_NULL UNIMPL linux_clock_nanosleep
+252 AUE_EXIT STD { int linux_exit_group(int error_code); }
+253 AUE_NULL STD { int linux_lookup_dcookie(void); }
+254 AUE_NULL STD { int linux_epoll_create(void); }
+255 AUE_NULL STD { int linux_epoll_ctl(void); }
+256 AUE_NULL STD { int linux_epoll_wait(void); }
+257 AUE_NULL STD { int linux_remap_file_pages(void); }
+258 AUE_NULL STD { int linux_set_tid_address(int *tidptr); }
+259 AUE_NULL STD { int linux_timer_create(clockid_t clock_id, \
+ struct sigevent *evp, l_timer_t *timerid); }
+260 AUE_NULL STD { int linux_timer_settime(l_timer_t timerid, \
+ const struct itimerspec *new, struct itimerspec *old); }
+261 AUE_NULL STD { int linux_timer_gettime(l_timer_t timerid, struct itimerspec *setting); }
+262 AUE_NULL STD { int linux_timer_getoverrun(l_timer_t timerid); }
+263 AUE_NULL STD { int linux_timer_delete(l_timer_t timerid); }
+264 AUE_CLOCK_SETTIME STD { int linux_clock_settime(clockid_t which, struct l_timespec *tp); }
+265 AUE_NULL STD { int linux_clock_gettime(clockid_t which, struct l_timespec *tp); }
+266 AUE_NULL STD { int linux_clock_getres(clockid_t which, struct l_timespec *tp); }
+267 AUE_NULL STD { int linux_clock_nanosleep(clockid_t which, int flags, \
+ struct l_timespec *rqtp, struct l_timespec *rmtp); }
+268 AUE_STATFS STD { int linux_statfs64(char *path, size_t bufsize, struct l_statfs64_buf *buf); }
+269 AUE_FSTATFS STD { int linux_fstatfs64(void); }
+270 AUE_NULL STD { int linux_tgkill(int tgid, int pid, int sig); }
+271 AUE_UTIMES STD { int linux_utimes(char *fname, \
+ struct l_timeval *tptr); }
+272 AUE_NULL STD { int linux_fadvise64_64(void); }
+273 AUE_NULL UNIMPL
+274 AUE_NULL STD { int linux_mbind(void); }
+275 AUE_NULL STD { int linux_get_mempolicy(void); }
+276 AUE_NULL STD { int linux_set_mempolicy(void); }
+277 AUE_NULL STD { int linux_mq_open(const char *name, int oflag, mode_t mode, \
+ struct mq_attr *attr); }
+278 AUE_NULL STD { int linux_mq_unlink(const char *name); }
+279 AUE_NULL STD { int linux_mq_timedsend(l_mqd_t mqd, const char *msg_ptr, \
+ size_t msg_len, unsigned int msg_prio, const struct \
+ l_timespec *abs_timeout); }
+280 AUE_NULL STD { int linux_mq_timedreceive(l_mqd_t mqd, char *msg_ptr, \
+ size_t msg_len, unsigned int msg_prio, const struct \
+ l_timespec *abs_timeout); }
+281 AUE_NULL STD { int linux_mq_notify(l_mqd_t mqd, const struct l_timespec *abs_timeout); }
+282 AUE_NULL STD { int linux_mq_getsetattr(l_mqd_t mqd, const struct mq_attr *attr, \
+ struct mq_attr *oattr); }
+283 AUE_NULL STD { int linux_kexec_load(void); }
+284 AUE_NULL STD { int linux_waitid(void); }
+285 AUE_NULL UNIMPL
+286 AUE_NULL STD { int linux_add_key(void); }
+287 AUE_NULL STD { int linux_request_key(void); }
+288 AUE_NULL STD { int linux_keyctl(void); }
+289 AUE_NULL STD { int linux_ioprio_set(void); }
+290 AUE_NULL STD { int linux_ioprio_get(void); }
+291 AUE_NULL STD { int linux_inotify_init(void); }
+292 AUE_NULL STD { int linux_inotify_add_watch(void); }
+293 AUE_NULL STD { int linux_inotify_rm_watch(void); }
+294 AUE_NULL STD { int linux_migrate_pages(void); }
+295 AUE_OPEN_RWTC STD { int linux_openat(l_int dfd, char *filename, \
+ l_int flags, l_int mode); }
+296 AUE_NULL STD { int linux_mkdirat(void); }
+297 AUE_NULL STD { int linux_mknodat(void); }
+298 AUE_NULL STD { int linux_fchownat(void); }
+299 AUE_NULL STD { int linux_futimesat(void); }
+300 AUE_NULL STD { int linux_fstatat64(void); }
+301 AUE_NULL STD { int linux_unlinkat(void); }
+302 AUE_NULL STD { int linux_renameat(void); }
+303 AUE_NULL STD { int linux_linkat(void); }
+304 AUE_NULL STD { int linux_symlinkat(void); }
+305 AUE_NULL STD { int linux_readlinkat(void); }
+306 AUE_NULL STD { int linux_fchmodat(void); }
+307 AUE_NULL STD { int linux_faccessat(void); }
+308 AUE_NULL STD { int linux_pselect6(void); }
+309 AUE_NULL STD { int linux_ppoll(void); }
+310 AUE_NULL STD { int linux_unshare(void); }
Index: syscalls.conf
===================================================================
RCS file: /home/cvs/src/sys/i386/linux/syscalls.conf,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -L sys/i386/linux/syscalls.conf -L sys/i386/linux/syscalls.conf -u -r1.1.1.1 -r1.2
--- sys/i386/linux/syscalls.conf
+++ sys/i386/linux/syscalls.conf
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/i386/linux/syscalls.conf,v 1.6 2003/12/24 00:32:07 peter Exp $
+# $FreeBSD: src/sys/i386/linux/syscalls.conf,v 1.7 2006/08/15 17:25:55 jhb Exp $
sysnames="/dev/null"
sysproto="linux_proto.h"
sysproto_h=_LINUX_SYSPROTO_H_
@@ -8,4 +8,4 @@
syscallprefix="LINUX_SYS_"
switchname="linux_sysent"
namesname="linux_syscallnames"
-sysvec="\n"
+systrace="/dev/null"
Index: linux_sysent.c
===================================================================
RCS file: /home/cvs/src/sys/i386/linux/linux_sysent.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -L sys/i386/linux/linux_sysent.c -L sys/i386/linux/linux_sysent.c -u -r1.1.1.1 -r1.2
--- sys/i386/linux/linux_sysent.c
+++ sys/i386/linux/linux_sysent.c
@@ -2,12 +2,11 @@
* System call switch table.
*
* DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/i386/linux/linux_sysent.c,v 1.65.2.1 2005/07/20 17:43:53 jhb Exp $
- * created from FreeBSD: src/sys/i386/linux/syscalls.master,v 1.61.2.1 2005/07/20 17:42:15 jhb Exp
+ * $FreeBSD: src/sys/i386/linux/linux_sysent.c,v 1.94 2007/09/18 19:51:49 dwmalone Exp $
+ * created from FreeBSD: src/sys/i386/linux/syscalls.master,v 1.89 2007/09/18 19:50:33 dwmalone Exp
*/
#include <bsm/audit_kevents.h>
-#include "opt_compat.h"
#include <sys/param.h>
#include <sys/sysent.h>
#include <sys/sysproto.h>
@@ -20,272 +19,315 @@
/* The casts are bogus but will do for now. */
struct sysent linux_sysent[] = {
#define nosys linux_nosys
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 0 = setup */
- { SYF_MPSAFE | AS(sys_exit_args), (sy_call_t *)sys_exit, AUE_NULL }, /* 1 = exit */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_fork, AUE_NULL }, /* 2 = linux_fork */
- { SYF_MPSAFE | AS(read_args), (sy_call_t *)read, AUE_NULL }, /* 3 = read */
- { SYF_MPSAFE | AS(write_args), (sy_call_t *)write, AUE_NULL }, /* 4 = write */
- { SYF_MPSAFE | AS(linux_open_args), (sy_call_t *)linux_open, AUE_NULL }, /* 5 = linux_open */
- { SYF_MPSAFE | AS(close_args), (sy_call_t *)close, AUE_NULL }, /* 6 = close */
- { SYF_MPSAFE | AS(linux_waitpid_args), (sy_call_t *)linux_waitpid, AUE_NULL }, /* 7 = linux_waitpid */
- { SYF_MPSAFE | AS(linux_creat_args), (sy_call_t *)linux_creat, AUE_NULL }, /* 8 = linux_creat */
- { SYF_MPSAFE | AS(linux_link_args), (sy_call_t *)linux_link, AUE_NULL }, /* 9 = linux_link */
- { SYF_MPSAFE | AS(linux_unlink_args), (sy_call_t *)linux_unlink, AUE_NULL }, /* 10 = linux_unlink */
- { SYF_MPSAFE | AS(linux_execve_args), (sy_call_t *)linux_execve, AUE_NULL }, /* 11 = linux_execve */
- { SYF_MPSAFE | AS(linux_chdir_args), (sy_call_t *)linux_chdir, AUE_NULL }, /* 12 = linux_chdir */
- { SYF_MPSAFE | AS(linux_time_args), (sy_call_t *)linux_time, AUE_NULL }, /* 13 = linux_time */
- { SYF_MPSAFE | AS(linux_mknod_args), (sy_call_t *)linux_mknod, AUE_NULL }, /* 14 = linux_mknod */
- { SYF_MPSAFE | AS(linux_chmod_args), (sy_call_t *)linux_chmod, AUE_NULL }, /* 15 = linux_chmod */
- { SYF_MPSAFE | AS(linux_lchown16_args), (sy_call_t *)linux_lchown16, AUE_NULL }, /* 16 = linux_lchown16 */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 17 = break */
- { SYF_MPSAFE | AS(linux_stat_args), (sy_call_t *)linux_stat, AUE_NULL }, /* 18 = linux_stat */
- { SYF_MPSAFE | AS(linux_lseek_args), (sy_call_t *)linux_lseek, AUE_NULL }, /* 19 = linux_lseek */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_getpid, AUE_NULL }, /* 20 = linux_getpid */
- { AS(linux_mount_args), (sy_call_t *)linux_mount, AUE_NULL }, /* 21 = linux_mount */
- { AS(linux_oldumount_args), (sy_call_t *)linux_oldumount, AUE_NULL }, /* 22 = linux_oldumount */
- { SYF_MPSAFE | AS(linux_setuid16_args), (sy_call_t *)linux_setuid16, AUE_NULL }, /* 23 = linux_setuid16 */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_getuid16, AUE_NULL }, /* 24 = linux_getuid16 */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_stime, AUE_NULL }, /* 25 = linux_stime */
- { SYF_MPSAFE | AS(linux_ptrace_args), (sy_call_t *)linux_ptrace, AUE_NULL }, /* 26 = linux_ptrace */
- { SYF_MPSAFE | AS(linux_alarm_args), (sy_call_t *)linux_alarm, AUE_NULL }, /* 27 = linux_alarm */
- { SYF_MPSAFE | AS(linux_fstat_args), (sy_call_t *)linux_fstat, AUE_NULL }, /* 28 = linux_fstat */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_pause, AUE_NULL }, /* 29 = linux_pause */
- { SYF_MPSAFE | AS(linux_utime_args), (sy_call_t *)linux_utime, AUE_NULL }, /* 30 = linux_utime */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 31 = stty */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 32 = gtty */
- { SYF_MPSAFE | AS(linux_access_args), (sy_call_t *)linux_access, AUE_NULL }, /* 33 = linux_access */
- { SYF_MPSAFE | AS(linux_nice_args), (sy_call_t *)linux_nice, AUE_NULL }, /* 34 = linux_nice */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 35 = ftime */
- { SYF_MPSAFE | 0, (sy_call_t *)sync, AUE_NULL }, /* 36 = sync */
- { SYF_MPSAFE | AS(linux_kill_args), (sy_call_t *)linux_kill, AUE_NULL }, /* 37 = linux_kill */
- { SYF_MPSAFE | AS(linux_rename_args), (sy_call_t *)linux_rename, AUE_NULL }, /* 38 = linux_rename */
- { SYF_MPSAFE | AS(linux_mkdir_args), (sy_call_t *)linux_mkdir, AUE_NULL }, /* 39 = linux_mkdir */
- { SYF_MPSAFE | AS(linux_rmdir_args), (sy_call_t *)linux_rmdir, AUE_NULL }, /* 40 = linux_rmdir */
- { SYF_MPSAFE | AS(dup_args), (sy_call_t *)dup, AUE_NULL }, /* 41 = dup */
- { SYF_MPSAFE | AS(linux_pipe_args), (sy_call_t *)linux_pipe, AUE_NULL }, /* 42 = linux_pipe */
- { SYF_MPSAFE | AS(linux_times_args), (sy_call_t *)linux_times, AUE_NULL }, /* 43 = linux_times */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 44 = prof */
- { AS(linux_brk_args), (sy_call_t *)linux_brk, AUE_NULL }, /* 45 = linux_brk */
- { SYF_MPSAFE | AS(linux_setgid16_args), (sy_call_t *)linux_setgid16, AUE_NULL }, /* 46 = linux_setgid16 */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_getgid16, AUE_NULL }, /* 47 = linux_getgid16 */
- { SYF_MPSAFE | AS(linux_signal_args), (sy_call_t *)linux_signal, AUE_NULL }, /* 48 = linux_signal */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_geteuid16, AUE_NULL }, /* 49 = linux_geteuid16 */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_getegid16, AUE_NULL }, /* 50 = linux_getegid16 */
- { SYF_MPSAFE | AS(acct_args), (sy_call_t *)acct, AUE_NULL }, /* 51 = acct */
- { AS(linux_umount_args), (sy_call_t *)linux_umount, AUE_NULL }, /* 52 = linux_umount */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 53 = lock */
- { AS(linux_ioctl_args), (sy_call_t *)linux_ioctl, AUE_NULL }, /* 54 = linux_ioctl */
- { SYF_MPSAFE | AS(linux_fcntl_args), (sy_call_t *)linux_fcntl, AUE_NULL }, /* 55 = linux_fcntl */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 56 = mpx */
- { SYF_MPSAFE | AS(setpgid_args), (sy_call_t *)setpgid, AUE_NULL }, /* 57 = setpgid */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 58 = ulimit */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_olduname, AUE_NULL }, /* 59 = linux_olduname */
- { SYF_MPSAFE | AS(umask_args), (sy_call_t *)umask, AUE_NULL }, /* 60 = umask */
- { SYF_MPSAFE | AS(chroot_args), (sy_call_t *)chroot, AUE_NULL }, /* 61 = chroot */
- { SYF_MPSAFE | AS(linux_ustat_args), (sy_call_t *)linux_ustat, AUE_NULL }, /* 62 = linux_ustat */
- { SYF_MPSAFE | AS(dup2_args), (sy_call_t *)dup2, AUE_NULL }, /* 63 = dup2 */
- { SYF_MPSAFE | 0, (sy_call_t *)getppid, AUE_NULL }, /* 64 = getppid */
- { SYF_MPSAFE | 0, (sy_call_t *)getpgrp, AUE_NULL }, /* 65 = getpgrp */
- { SYF_MPSAFE | 0, (sy_call_t *)setsid, AUE_NULL }, /* 66 = setsid */
- { SYF_MPSAFE | AS(linux_sigaction_args), (sy_call_t *)linux_sigaction, AUE_NULL }, /* 67 = linux_sigaction */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_sgetmask, AUE_NULL }, /* 68 = linux_sgetmask */
- { SYF_MPSAFE | AS(linux_ssetmask_args), (sy_call_t *)linux_ssetmask, AUE_NULL }, /* 69 = linux_ssetmask */
- { SYF_MPSAFE | AS(linux_setreuid16_args), (sy_call_t *)linux_setreuid16, AUE_NULL }, /* 70 = linux_setreuid16 */
- { SYF_MPSAFE | AS(linux_setregid16_args), (sy_call_t *)linux_setregid16, AUE_NULL }, /* 71 = linux_setregid16 */
- { SYF_MPSAFE | AS(linux_sigsuspend_args), (sy_call_t *)linux_sigsuspend, AUE_NULL }, /* 72 = linux_sigsuspend */
- { SYF_MPSAFE | AS(linux_sigpending_args), (sy_call_t *)linux_sigpending, AUE_NULL }, /* 73 = linux_sigpending */
- { SYF_MPSAFE | AS(sethostname_args), (sy_call_t *)osethostname, AUE_NULL }, /* 74 = osethostname */
- { SYF_MPSAFE | AS(linux_setrlimit_args), (sy_call_t *)linux_setrlimit, AUE_NULL }, /* 75 = linux_setrlimit */
- { SYF_MPSAFE | AS(linux_old_getrlimit_args), (sy_call_t *)linux_old_getrlimit, AUE_NULL }, /* 76 = linux_old_getrlimit */
- { SYF_MPSAFE | AS(getrusage_args), (sy_call_t *)getrusage, AUE_NULL }, /* 77 = getrusage */
- { SYF_MPSAFE | AS(gettimeofday_args), (sy_call_t *)gettimeofday, AUE_NULL }, /* 78 = gettimeofday */
- { SYF_MPSAFE | AS(settimeofday_args), (sy_call_t *)settimeofday, AUE_NULL }, /* 79 = settimeofday */
- { SYF_MPSAFE | AS(linux_getgroups16_args), (sy_call_t *)linux_getgroups16, AUE_NULL }, /* 80 = linux_getgroups16 */
- { SYF_MPSAFE | AS(linux_setgroups16_args), (sy_call_t *)linux_setgroups16, AUE_NULL }, /* 81 = linux_setgroups16 */
- { SYF_MPSAFE | AS(linux_old_select_args), (sy_call_t *)linux_old_select, AUE_NULL }, /* 82 = linux_old_select */
- { SYF_MPSAFE | AS(linux_symlink_args), (sy_call_t *)linux_symlink, AUE_NULL }, /* 83 = linux_symlink */
- { SYF_MPSAFE | AS(ostat_args), (sy_call_t *)ostat, AUE_NULL }, /* 84 = ostat */
- { SYF_MPSAFE | AS(linux_readlink_args), (sy_call_t *)linux_readlink, AUE_NULL }, /* 85 = linux_readlink */
- { AS(linux_uselib_args), (sy_call_t *)linux_uselib, AUE_NULL }, /* 86 = linux_uselib */
- { SYF_MPSAFE | AS(swapon_args), (sy_call_t *)swapon, AUE_NULL }, /* 87 = swapon */
- { SYF_MPSAFE | AS(linux_reboot_args), (sy_call_t *)linux_reboot, AUE_NULL }, /* 88 = linux_reboot */
- { AS(linux_readdir_args), (sy_call_t *)linux_readdir, AUE_NULL }, /* 89 = linux_readdir */
- { SYF_MPSAFE | AS(linux_mmap_args), (sy_call_t *)linux_mmap, AUE_NULL }, /* 90 = linux_mmap */
- { SYF_MPSAFE | AS(munmap_args), (sy_call_t *)munmap, AUE_NULL }, /* 91 = munmap */
- { SYF_MPSAFE | AS(linux_truncate_args), (sy_call_t *)linux_truncate, AUE_NULL }, /* 92 = linux_truncate */
- { SYF_MPSAFE | AS(oftruncate_args), (sy_call_t *)oftruncate, AUE_NULL }, /* 93 = oftruncate */
- { SYF_MPSAFE | AS(fchmod_args), (sy_call_t *)fchmod, AUE_NULL }, /* 94 = fchmod */
- { SYF_MPSAFE | AS(fchown_args), (sy_call_t *)fchown, AUE_NULL }, /* 95 = fchown */
- { SYF_MPSAFE | AS(linux_getpriority_args), (sy_call_t *)linux_getpriority, AUE_NULL }, /* 96 = linux_getpriority */
- { SYF_MPSAFE | AS(setpriority_args), (sy_call_t *)setpriority, AUE_NULL }, /* 97 = setpriority */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 98 = profil */
- { SYF_MPSAFE | AS(linux_statfs_args), (sy_call_t *)linux_statfs, AUE_NULL }, /* 99 = linux_statfs */
- { SYF_MPSAFE | AS(linux_fstatfs_args), (sy_call_t *)linux_fstatfs, AUE_NULL }, /* 100 = linux_fstatfs */
- { SYF_MPSAFE | AS(linux_ioperm_args), (sy_call_t *)linux_ioperm, AUE_NULL }, /* 101 = linux_ioperm */
- { SYF_MPSAFE | AS(linux_socketcall_args), (sy_call_t *)linux_socketcall, AUE_NULL }, /* 102 = linux_socketcall */
- { SYF_MPSAFE | AS(linux_syslog_args), (sy_call_t *)linux_syslog, AUE_NULL }, /* 103 = linux_syslog */
- { SYF_MPSAFE | AS(linux_setitimer_args), (sy_call_t *)linux_setitimer, AUE_NULL }, /* 104 = linux_setitimer */
- { SYF_MPSAFE | AS(linux_getitimer_args), (sy_call_t *)linux_getitimer, AUE_NULL }, /* 105 = linux_getitimer */
- { SYF_MPSAFE | AS(linux_newstat_args), (sy_call_t *)linux_newstat, AUE_NULL }, /* 106 = linux_newstat */
- { SYF_MPSAFE | AS(linux_newlstat_args), (sy_call_t *)linux_newlstat, AUE_NULL }, /* 107 = linux_newlstat */
- { SYF_MPSAFE | AS(linux_newfstat_args), (sy_call_t *)linux_newfstat, AUE_NULL }, /* 108 = linux_newfstat */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_uname, AUE_NULL }, /* 109 = linux_uname */
- { SYF_MPSAFE | AS(linux_iopl_args), (sy_call_t *)linux_iopl, AUE_NULL }, /* 110 = linux_iopl */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_vhangup, AUE_NULL }, /* 111 = linux_vhangup */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 112 = idle */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_vm86old, AUE_NULL }, /* 113 = linux_vm86old */
- { SYF_MPSAFE | AS(linux_wait4_args), (sy_call_t *)linux_wait4, AUE_NULL }, /* 114 = linux_wait4 */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_swapoff, AUE_NULL }, /* 115 = linux_swapoff */
- { SYF_MPSAFE | AS(linux_sysinfo_args), (sy_call_t *)linux_sysinfo, AUE_NULL }, /* 116 = linux_sysinfo */
- { AS(linux_ipc_args), (sy_call_t *)linux_ipc, AUE_NULL }, /* 117 = linux_ipc */
- { SYF_MPSAFE | AS(fsync_args), (sy_call_t *)fsync, AUE_NULL }, /* 118 = fsync */
- { SYF_MPSAFE | AS(linux_sigreturn_args), (sy_call_t *)linux_sigreturn, AUE_NULL }, /* 119 = linux_sigreturn */
- { SYF_MPSAFE | AS(linux_clone_args), (sy_call_t *)linux_clone, AUE_NULL }, /* 120 = linux_clone */
- { SYF_MPSAFE | AS(setdomainname_args), (sy_call_t *)setdomainname, AUE_NULL }, /* 121 = setdomainname */
- { SYF_MPSAFE | AS(linux_newuname_args), (sy_call_t *)linux_newuname, AUE_NULL }, /* 122 = linux_newuname */
- { SYF_MPSAFE | AS(linux_modify_ldt_args), (sy_call_t *)linux_modify_ldt, AUE_NULL }, /* 123 = linux_modify_ldt */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_adjtimex, AUE_NULL }, /* 124 = linux_adjtimex */
- { SYF_MPSAFE | AS(mprotect_args), (sy_call_t *)mprotect, AUE_NULL }, /* 125 = mprotect */
- { SYF_MPSAFE | AS(linux_sigprocmask_args), (sy_call_t *)linux_sigprocmask, AUE_NULL }, /* 126 = linux_sigprocmask */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_create_module, AUE_NULL }, /* 127 = linux_create_module */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_init_module, AUE_NULL }, /* 128 = linux_init_module */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_delete_module, AUE_NULL }, /* 129 = linux_delete_module */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_get_kernel_syms, AUE_NULL }, /* 130 = linux_get_kernel_syms */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_quotactl, AUE_NULL }, /* 131 = linux_quotactl */
- { SYF_MPSAFE | AS(getpgid_args), (sy_call_t *)getpgid, AUE_NULL }, /* 132 = getpgid */
- { SYF_MPSAFE | AS(fchdir_args), (sy_call_t *)fchdir, AUE_NULL }, /* 133 = fchdir */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_bdflush, AUE_NULL }, /* 134 = linux_bdflush */
- { SYF_MPSAFE | AS(linux_sysfs_args), (sy_call_t *)linux_sysfs, AUE_NULL }, /* 135 = linux_sysfs */
- { SYF_MPSAFE | AS(linux_personality_args), (sy_call_t *)linux_personality, AUE_NULL }, /* 136 = linux_personality */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 137 = afs_syscall */
- { SYF_MPSAFE | AS(linux_setfsuid16_args), (sy_call_t *)linux_setfsuid16, AUE_NULL }, /* 138 = linux_setfsuid16 */
- { SYF_MPSAFE | AS(linux_setfsgid16_args), (sy_call_t *)linux_setfsgid16, AUE_NULL }, /* 139 = linux_setfsgid16 */
- { SYF_MPSAFE | AS(linux_llseek_args), (sy_call_t *)linux_llseek, AUE_NULL }, /* 140 = linux_llseek */
- { AS(linux_getdents_args), (sy_call_t *)linux_getdents, AUE_NULL }, /* 141 = linux_getdents */
- { SYF_MPSAFE | AS(linux_select_args), (sy_call_t *)linux_select, AUE_NULL }, /* 142 = linux_select */
- { SYF_MPSAFE | AS(flock_args), (sy_call_t *)flock, AUE_NULL }, /* 143 = flock */
- { SYF_MPSAFE | AS(linux_msync_args), (sy_call_t *)linux_msync, AUE_NULL }, /* 144 = linux_msync */
- { SYF_MPSAFE | AS(readv_args), (sy_call_t *)readv, AUE_NULL }, /* 145 = readv */
- { SYF_MPSAFE | AS(writev_args), (sy_call_t *)writev, AUE_NULL }, /* 146 = writev */
- { SYF_MPSAFE | AS(linux_getsid_args), (sy_call_t *)linux_getsid, AUE_NULL }, /* 147 = linux_getsid */
- { SYF_MPSAFE | AS(linux_fdatasync_args), (sy_call_t *)linux_fdatasync, AUE_NULL }, /* 148 = linux_fdatasync */
- { SYF_MPSAFE | AS(linux_sysctl_args), (sy_call_t *)linux_sysctl, AUE_NULL }, /* 149 = linux_sysctl */
- { SYF_MPSAFE | AS(mlock_args), (sy_call_t *)mlock, AUE_NULL }, /* 150 = mlock */
- { SYF_MPSAFE | AS(munlock_args), (sy_call_t *)munlock, AUE_NULL }, /* 151 = munlock */
- { SYF_MPSAFE | AS(mlockall_args), (sy_call_t *)mlockall, AUE_NULL }, /* 152 = mlockall */
- { SYF_MPSAFE | 0, (sy_call_t *)munlockall, AUE_NULL }, /* 153 = munlockall */
- { SYF_MPSAFE | AS(sched_setparam_args), (sy_call_t *)sched_setparam, AUE_NULL }, /* 154 = sched_setparam */
- { SYF_MPSAFE | AS(sched_getparam_args), (sy_call_t *)sched_getparam, AUE_NULL }, /* 155 = sched_getparam */
- { SYF_MPSAFE | AS(linux_sched_setscheduler_args), (sy_call_t *)linux_sched_setscheduler, AUE_NULL }, /* 156 = linux_sched_setscheduler */
- { SYF_MPSAFE | AS(linux_sched_getscheduler_args), (sy_call_t *)linux_sched_getscheduler, AUE_NULL }, /* 157 = linux_sched_getscheduler */
- { SYF_MPSAFE | 0, (sy_call_t *)sched_yield, AUE_NULL }, /* 158 = sched_yield */
- { SYF_MPSAFE | AS(linux_sched_get_priority_max_args), (sy_call_t *)linux_sched_get_priority_max, AUE_NULL }, /* 159 = linux_sched_get_priority_max */
- { SYF_MPSAFE | AS(linux_sched_get_priority_min_args), (sy_call_t *)linux_sched_get_priority_min, AUE_NULL }, /* 160 = linux_sched_get_priority_min */
- { SYF_MPSAFE | AS(sched_rr_get_interval_args), (sy_call_t *)sched_rr_get_interval, AUE_NULL }, /* 161 = sched_rr_get_interval */
- { SYF_MPSAFE | AS(nanosleep_args), (sy_call_t *)nanosleep, AUE_NULL }, /* 162 = nanosleep */
- { SYF_MPSAFE | AS(linux_mremap_args), (sy_call_t *)linux_mremap, AUE_NULL }, /* 163 = linux_mremap */
- { SYF_MPSAFE | AS(linux_setresuid16_args), (sy_call_t *)linux_setresuid16, AUE_NULL }, /* 164 = linux_setresuid16 */
- { SYF_MPSAFE | AS(linux_getresuid16_args), (sy_call_t *)linux_getresuid16, AUE_NULL }, /* 165 = linux_getresuid16 */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_vm86, AUE_NULL }, /* 166 = linux_vm86 */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_query_module, AUE_NULL }, /* 167 = linux_query_module */
- { SYF_MPSAFE | AS(poll_args), (sy_call_t *)poll, AUE_NULL }, /* 168 = poll */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_nfsservctl, AUE_NULL }, /* 169 = linux_nfsservctl */
- { SYF_MPSAFE | AS(linux_setresgid16_args), (sy_call_t *)linux_setresgid16, AUE_NULL }, /* 170 = linux_setresgid16 */
- { SYF_MPSAFE | AS(linux_getresgid16_args), (sy_call_t *)linux_getresgid16, AUE_NULL }, /* 171 = linux_getresgid16 */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_prctl, AUE_NULL }, /* 172 = linux_prctl */
- { SYF_MPSAFE | AS(linux_rt_sigreturn_args), (sy_call_t *)linux_rt_sigreturn, AUE_NULL }, /* 173 = linux_rt_sigreturn */
- { SYF_MPSAFE | AS(linux_rt_sigaction_args), (sy_call_t *)linux_rt_sigaction, AUE_NULL }, /* 174 = linux_rt_sigaction */
- { SYF_MPSAFE | AS(linux_rt_sigprocmask_args), (sy_call_t *)linux_rt_sigprocmask, AUE_NULL }, /* 175 = linux_rt_sigprocmask */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_rt_sigpending, AUE_NULL }, /* 176 = linux_rt_sigpending */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_rt_sigtimedwait, AUE_NULL }, /* 177 = linux_rt_sigtimedwait */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_rt_sigqueueinfo, AUE_NULL }, /* 178 = linux_rt_sigqueueinfo */
- { SYF_MPSAFE | AS(linux_rt_sigsuspend_args), (sy_call_t *)linux_rt_sigsuspend, AUE_NULL }, /* 179 = linux_rt_sigsuspend */
- { SYF_MPSAFE | AS(linux_pread_args), (sy_call_t *)linux_pread, AUE_NULL }, /* 180 = linux_pread */
- { SYF_MPSAFE | AS(linux_pwrite_args), (sy_call_t *)linux_pwrite, AUE_NULL }, /* 181 = linux_pwrite */
- { SYF_MPSAFE | AS(linux_chown16_args), (sy_call_t *)linux_chown16, AUE_NULL }, /* 182 = linux_chown16 */
- { SYF_MPSAFE | AS(linux_getcwd_args), (sy_call_t *)linux_getcwd, AUE_NULL }, /* 183 = linux_getcwd */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_capget, AUE_NULL }, /* 184 = linux_capget */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_capset, AUE_NULL }, /* 185 = linux_capset */
- { SYF_MPSAFE | AS(linux_sigaltstack_args), (sy_call_t *)linux_sigaltstack, AUE_NULL }, /* 186 = linux_sigaltstack */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_sendfile, AUE_NULL }, /* 187 = linux_sendfile */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 188 = getpmsg */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 189 = putpmsg */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_vfork, AUE_NULL }, /* 190 = linux_vfork */
- { SYF_MPSAFE | AS(linux_getrlimit_args), (sy_call_t *)linux_getrlimit, AUE_NULL }, /* 191 = linux_getrlimit */
- { SYF_MPSAFE | AS(linux_mmap2_args), (sy_call_t *)linux_mmap2, AUE_NULL }, /* 192 = linux_mmap2 */
- { SYF_MPSAFE | AS(linux_truncate64_args), (sy_call_t *)linux_truncate64, AUE_NULL }, /* 193 = linux_truncate64 */
- { SYF_MPSAFE | AS(linux_ftruncate64_args), (sy_call_t *)linux_ftruncate64, AUE_NULL }, /* 194 = linux_ftruncate64 */
- { SYF_MPSAFE | AS(linux_stat64_args), (sy_call_t *)linux_stat64, AUE_NULL }, /* 195 = linux_stat64 */
- { SYF_MPSAFE | AS(linux_lstat64_args), (sy_call_t *)linux_lstat64, AUE_NULL }, /* 196 = linux_lstat64 */
- { SYF_MPSAFE | AS(linux_fstat64_args), (sy_call_t *)linux_fstat64, AUE_NULL }, /* 197 = linux_fstat64 */
- { SYF_MPSAFE | AS(linux_lchown_args), (sy_call_t *)linux_lchown, AUE_NULL }, /* 198 = linux_lchown */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_getuid, AUE_NULL }, /* 199 = linux_getuid */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_getgid, AUE_NULL }, /* 200 = linux_getgid */
- { SYF_MPSAFE | 0, (sy_call_t *)geteuid, AUE_NULL }, /* 201 = geteuid */
- { SYF_MPSAFE | 0, (sy_call_t *)getegid, AUE_NULL }, /* 202 = getegid */
- { SYF_MPSAFE | AS(setreuid_args), (sy_call_t *)setreuid, AUE_NULL }, /* 203 = setreuid */
- { SYF_MPSAFE | AS(setregid_args), (sy_call_t *)setregid, AUE_NULL }, /* 204 = setregid */
- { SYF_MPSAFE | AS(linux_getgroups_args), (sy_call_t *)linux_getgroups, AUE_NULL }, /* 205 = linux_getgroups */
- { SYF_MPSAFE | AS(linux_setgroups_args), (sy_call_t *)linux_setgroups, AUE_NULL }, /* 206 = linux_setgroups */
- { AS(fchown_args), (sy_call_t *)fchown, AUE_NULL }, /* 207 = fchown */
- { SYF_MPSAFE | AS(setresuid_args), (sy_call_t *)setresuid, AUE_NULL }, /* 208 = setresuid */
- { SYF_MPSAFE | AS(getresuid_args), (sy_call_t *)getresuid, AUE_NULL }, /* 209 = getresuid */
- { SYF_MPSAFE | AS(setresgid_args), (sy_call_t *)setresgid, AUE_NULL }, /* 210 = setresgid */
- { SYF_MPSAFE | AS(getresgid_args), (sy_call_t *)getresgid, AUE_NULL }, /* 211 = getresgid */
- { SYF_MPSAFE | AS(linux_chown_args), (sy_call_t *)linux_chown, AUE_NULL }, /* 212 = linux_chown */
- { SYF_MPSAFE | AS(setuid_args), (sy_call_t *)setuid, AUE_NULL }, /* 213 = setuid */
- { SYF_MPSAFE | AS(setgid_args), (sy_call_t *)setgid, AUE_NULL }, /* 214 = setgid */
- { SYF_MPSAFE | AS(linux_setfsuid_args), (sy_call_t *)linux_setfsuid, AUE_NULL }, /* 215 = linux_setfsuid */
- { SYF_MPSAFE | AS(linux_setfsgid_args), (sy_call_t *)linux_setfsgid, AUE_NULL }, /* 216 = linux_setfsgid */
- { SYF_MPSAFE | AS(linux_pivot_root_args), (sy_call_t *)linux_pivot_root, AUE_NULL }, /* 217 = linux_pivot_root */
- { SYF_MPSAFE | AS(linux_mincore_args), (sy_call_t *)linux_mincore, AUE_NULL }, /* 218 = linux_mincore */
- { SYF_MPSAFE | AS(madvise_args), (sy_call_t *)madvise, AUE_NULL }, /* 219 = madvise */
- { AS(linux_getdents64_args), (sy_call_t *)linux_getdents64, AUE_NULL }, /* 220 = linux_getdents64 */
- { SYF_MPSAFE | AS(linux_fcntl64_args), (sy_call_t *)linux_fcntl64, AUE_NULL }, /* 221 = linux_fcntl64 */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 222 = */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 223 = */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_gettid, AUE_NULL }, /* 224 = linux_gettid */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 225 = linux_readahead */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_setxattr, AUE_NULL }, /* 226 = linux_setxattr */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_lsetxattr, AUE_NULL }, /* 227 = linux_lsetxattr */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_fsetxattr, AUE_NULL }, /* 228 = linux_fsetxattr */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_getxattr, AUE_NULL }, /* 229 = linux_getxattr */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_lgetxattr, AUE_NULL }, /* 230 = linux_lgetxattr */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_fgetxattr, AUE_NULL }, /* 231 = linux_fgetxattr */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_listxattr, AUE_NULL }, /* 232 = linux_listxattr */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_llistxattr, AUE_NULL }, /* 233 = linux_llistxattr */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_flistxattr, AUE_NULL }, /* 234 = linux_flistxattr */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_removexattr, AUE_NULL }, /* 235 = linux_removexattr */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_lremovexattr, AUE_NULL }, /* 236 = linux_lremovexattr */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_fremovexattr, AUE_NULL }, /* 237 = linux_fremovexattr */
- { SYF_MPSAFE | AS(linux_tkill_args), (sy_call_t *)linux_tkill, AUE_NULL }, /* 238 = linux_tkill */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 239 = linux_sendfile64 */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 240 = linux_futex */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 241 = linux_sched_setaffinity */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 242 = linux_sched_getaffinity */
- { SYF_MPSAFE | AS(linux_set_thread_area_args), (sy_call_t *)linux_set_thread_area, AUE_NULL }, /* 243 = linux_set_thread_area */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 244 = linux_get_thread_area */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 245 = linux_io_setup */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 246 = linux_io_destroy */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 247 = linux_io_getevents */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 248 = linux_io_submit */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 249 = linux_io_cancel */
- { SYF_MPSAFE | 0, (sy_call_t *)linux_fadvise64, AUE_NULL }, /* 250 = linux_fadvise64 */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 251 = */
- { SYF_MPSAFE | AS(sys_exit_args), (sy_call_t *)sys_exit, AUE_NULL }, /* 252 = exit_group */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 253 = linux_lookup_dcookie */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 254 = linux_epoll_create */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 255 = linux_epoll_ctl */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 256 = linux_epoll_wait */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 257 = linux_remap_file_pages */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 258 = linux_set_tid_address */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 259 = linux_timer_create */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 260 = linux_timer_settime */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 261 = linux_timer_gettime */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 262 = linux_timer_getoverrun */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 263 = linux_timer_delete */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 264 = linux_clock_settime */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 265 = linux_clock_gettime */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 266 = linux_clock_getres */
- { 0, (sy_call_t *)nosys, AUE_NULL }, /* 267 = linux_clock_nanosleep */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 0 = setup */
+ { AS(sys_exit_args), (sy_call_t *)sys_exit, AUE_EXIT, NULL, 0, 0 }, /* 1 = exit */
+ { 0, (sy_call_t *)linux_fork, AUE_FORK, NULL, 0, 0 }, /* 2 = linux_fork */
+ { AS(read_args), (sy_call_t *)read, AUE_NULL, NULL, 0, 0 }, /* 3 = read */
+ { AS(write_args), (sy_call_t *)write, AUE_NULL, NULL, 0, 0 }, /* 4 = write */
+ { AS(linux_open_args), (sy_call_t *)linux_open, AUE_OPEN_RWTC, NULL, 0, 0 }, /* 5 = linux_open */
+ { AS(close_args), (sy_call_t *)close, AUE_CLOSE, NULL, 0, 0 }, /* 6 = close */
+ { AS(linux_waitpid_args), (sy_call_t *)linux_waitpid, AUE_WAIT4, NULL, 0, 0 }, /* 7 = linux_waitpid */
+ { AS(linux_creat_args), (sy_call_t *)linux_creat, AUE_CREAT, NULL, 0, 0 }, /* 8 = linux_creat */
+ { AS(linux_link_args), (sy_call_t *)linux_link, AUE_LINK, NULL, 0, 0 }, /* 9 = linux_link */
+ { AS(linux_unlink_args), (sy_call_t *)linux_unlink, AUE_UNLINK, NULL, 0, 0 }, /* 10 = linux_unlink */
+ { AS(linux_execve_args), (sy_call_t *)linux_execve, AUE_EXECVE, NULL, 0, 0 }, /* 11 = linux_execve */
+ { AS(linux_chdir_args), (sy_call_t *)linux_chdir, AUE_CHDIR, NULL, 0, 0 }, /* 12 = linux_chdir */
+ { AS(linux_time_args), (sy_call_t *)linux_time, AUE_NULL, NULL, 0, 0 }, /* 13 = linux_time */
+ { AS(linux_mknod_args), (sy_call_t *)linux_mknod, AUE_MKNOD, NULL, 0, 0 }, /* 14 = linux_mknod */
+ { AS(linux_chmod_args), (sy_call_t *)linux_chmod, AUE_CHMOD, NULL, 0, 0 }, /* 15 = linux_chmod */
+ { AS(linux_lchown16_args), (sy_call_t *)linux_lchown16, AUE_LCHOWN, NULL, 0, 0 }, /* 16 = linux_lchown16 */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 17 = break */
+ { AS(linux_stat_args), (sy_call_t *)linux_stat, AUE_STAT, NULL, 0, 0 }, /* 18 = linux_stat */
+ { AS(linux_lseek_args), (sy_call_t *)linux_lseek, AUE_LSEEK, NULL, 0, 0 }, /* 19 = linux_lseek */
+ { 0, (sy_call_t *)linux_getpid, AUE_GETPID, NULL, 0, 0 }, /* 20 = linux_getpid */
+ { AS(linux_mount_args), (sy_call_t *)linux_mount, AUE_MOUNT, NULL, 0, 0 }, /* 21 = linux_mount */
+ { AS(linux_oldumount_args), (sy_call_t *)linux_oldumount, AUE_UMOUNT, NULL, 0, 0 }, /* 22 = linux_oldumount */
+ { AS(linux_setuid16_args), (sy_call_t *)linux_setuid16, AUE_SETUID, NULL, 0, 0 }, /* 23 = linux_setuid16 */
+ { 0, (sy_call_t *)linux_getuid16, AUE_GETUID, NULL, 0, 0 }, /* 24 = linux_getuid16 */
+ { 0, (sy_call_t *)linux_stime, AUE_SETTIMEOFDAY, NULL, 0, 0 }, /* 25 = linux_stime */
+ { AS(linux_ptrace_args), (sy_call_t *)linux_ptrace, AUE_PTRACE, NULL, 0, 0 }, /* 26 = linux_ptrace */
+ { AS(linux_alarm_args), (sy_call_t *)linux_alarm, AUE_NULL, NULL, 0, 0 }, /* 27 = linux_alarm */
+ { AS(linux_fstat_args), (sy_call_t *)linux_fstat, AUE_FSTAT, NULL, 0, 0 }, /* 28 = linux_fstat */
+ { 0, (sy_call_t *)linux_pause, AUE_NULL, NULL, 0, 0 }, /* 29 = linux_pause */
+ { AS(linux_utime_args), (sy_call_t *)linux_utime, AUE_UTIME, NULL, 0, 0 }, /* 30 = linux_utime */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 31 = stty */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 32 = gtty */
+ { AS(linux_access_args), (sy_call_t *)linux_access, AUE_ACCESS, NULL, 0, 0 }, /* 33 = linux_access */
+ { AS(linux_nice_args), (sy_call_t *)linux_nice, AUE_NICE, NULL, 0, 0 }, /* 34 = linux_nice */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 35 = ftime */
+ { 0, (sy_call_t *)sync, AUE_SYNC, NULL, 0, 0 }, /* 36 = sync */
+ { AS(linux_kill_args), (sy_call_t *)linux_kill, AUE_KILL, NULL, 0, 0 }, /* 37 = linux_kill */
+ { AS(linux_rename_args), (sy_call_t *)linux_rename, AUE_RENAME, NULL, 0, 0 }, /* 38 = linux_rename */
+ { AS(linux_mkdir_args), (sy_call_t *)linux_mkdir, AUE_MKDIR, NULL, 0, 0 }, /* 39 = linux_mkdir */
+ { AS(linux_rmdir_args), (sy_call_t *)linux_rmdir, AUE_RMDIR, NULL, 0, 0 }, /* 40 = linux_rmdir */
+ { AS(dup_args), (sy_call_t *)dup, AUE_DUP, NULL, 0, 0 }, /* 41 = dup */
+ { AS(linux_pipe_args), (sy_call_t *)linux_pipe, AUE_PIPE, NULL, 0, 0 }, /* 42 = linux_pipe */
+ { AS(linux_times_args), (sy_call_t *)linux_times, AUE_NULL, NULL, 0, 0 }, /* 43 = linux_times */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 44 = prof */
+ { AS(linux_brk_args), (sy_call_t *)linux_brk, AUE_NULL, NULL, 0, 0 }, /* 45 = linux_brk */
+ { AS(linux_setgid16_args), (sy_call_t *)linux_setgid16, AUE_SETGID, NULL, 0, 0 }, /* 46 = linux_setgid16 */
+ { 0, (sy_call_t *)linux_getgid16, AUE_GETGID, NULL, 0, 0 }, /* 47 = linux_getgid16 */
+ { AS(linux_signal_args), (sy_call_t *)linux_signal, AUE_NULL, NULL, 0, 0 }, /* 48 = linux_signal */
+ { 0, (sy_call_t *)linux_geteuid16, AUE_GETEUID, NULL, 0, 0 }, /* 49 = linux_geteuid16 */
+ { 0, (sy_call_t *)linux_getegid16, AUE_GETEGID, NULL, 0, 0 }, /* 50 = linux_getegid16 */
+ { AS(acct_args), (sy_call_t *)acct, AUE_ACCT, NULL, 0, 0 }, /* 51 = acct */
+ { AS(linux_umount_args), (sy_call_t *)linux_umount, AUE_UMOUNT, NULL, 0, 0 }, /* 52 = linux_umount */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 53 = lock */
+ { AS(linux_ioctl_args), (sy_call_t *)linux_ioctl, AUE_IOCTL, NULL, 0, 0 }, /* 54 = linux_ioctl */
+ { AS(linux_fcntl_args), (sy_call_t *)linux_fcntl, AUE_FCNTL, NULL, 0, 0 }, /* 55 = linux_fcntl */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 56 = mpx */
+ { AS(setpgid_args), (sy_call_t *)setpgid, AUE_SETPGRP, NULL, 0, 0 }, /* 57 = setpgid */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 58 = ulimit */
+ { 0, (sy_call_t *)linux_olduname, AUE_NULL, NULL, 0, 0 }, /* 59 = linux_olduname */
+ { AS(umask_args), (sy_call_t *)umask, AUE_UMASK, NULL, 0, 0 }, /* 60 = umask */
+ { AS(chroot_args), (sy_call_t *)chroot, AUE_CHROOT, NULL, 0, 0 }, /* 61 = chroot */
+ { AS(linux_ustat_args), (sy_call_t *)linux_ustat, AUE_NULL, NULL, 0, 0 }, /* 62 = linux_ustat */
+ { AS(dup2_args), (sy_call_t *)dup2, AUE_DUP2, NULL, 0, 0 }, /* 63 = dup2 */
+ { 0, (sy_call_t *)linux_getppid, AUE_GETPPID, NULL, 0, 0 }, /* 64 = linux_getppid */
+ { 0, (sy_call_t *)getpgrp, AUE_GETPGRP, NULL, 0, 0 }, /* 65 = getpgrp */
+ { 0, (sy_call_t *)setsid, AUE_SETSID, NULL, 0, 0 }, /* 66 = setsid */
+ { AS(linux_sigaction_args), (sy_call_t *)linux_sigaction, AUE_NULL, NULL, 0, 0 }, /* 67 = linux_sigaction */
+ { 0, (sy_call_t *)linux_sgetmask, AUE_NULL, NULL, 0, 0 }, /* 68 = linux_sgetmask */
+ { AS(linux_ssetmask_args), (sy_call_t *)linux_ssetmask, AUE_NULL, NULL, 0, 0 }, /* 69 = linux_ssetmask */
+ { AS(linux_setreuid16_args), (sy_call_t *)linux_setreuid16, AUE_SETREUID, NULL, 0, 0 }, /* 70 = linux_setreuid16 */
+ { AS(linux_setregid16_args), (sy_call_t *)linux_setregid16, AUE_SETREGID, NULL, 0, 0 }, /* 71 = linux_setregid16 */
+ { AS(linux_sigsuspend_args), (sy_call_t *)linux_sigsuspend, AUE_NULL, NULL, 0, 0 }, /* 72 = linux_sigsuspend */
+ { AS(linux_sigpending_args), (sy_call_t *)linux_sigpending, AUE_NULL, NULL, 0, 0 }, /* 73 = linux_sigpending */
+ { AS(linux_sethostname_args), (sy_call_t *)linux_sethostname, AUE_SYSCTL, NULL, 0, 0 }, /* 74 = linux_sethostname */
+ { AS(linux_setrlimit_args), (sy_call_t *)linux_setrlimit, AUE_SETRLIMIT, NULL, 0, 0 }, /* 75 = linux_setrlimit */
+ { AS(linux_old_getrlimit_args), (sy_call_t *)linux_old_getrlimit, AUE_GETRLIMIT, NULL, 0, 0 }, /* 76 = linux_old_getrlimit */
+ { AS(getrusage_args), (sy_call_t *)getrusage, AUE_GETRUSAGE, NULL, 0, 0 }, /* 77 = getrusage */
+ { AS(gettimeofday_args), (sy_call_t *)gettimeofday, AUE_NULL, NULL, 0, 0 }, /* 78 = gettimeofday */
+ { AS(settimeofday_args), (sy_call_t *)settimeofday, AUE_SETTIMEOFDAY, NULL, 0, 0 }, /* 79 = settimeofday */
+ { AS(linux_getgroups16_args), (sy_call_t *)linux_getgroups16, AUE_GETGROUPS, NULL, 0, 0 }, /* 80 = linux_getgroups16 */
+ { AS(linux_setgroups16_args), (sy_call_t *)linux_setgroups16, AUE_SETGROUPS, NULL, 0, 0 }, /* 81 = linux_setgroups16 */
+ { AS(linux_old_select_args), (sy_call_t *)linux_old_select, AUE_SELECT, NULL, 0, 0 }, /* 82 = linux_old_select */
+ { AS(linux_symlink_args), (sy_call_t *)linux_symlink, AUE_SYMLINK, NULL, 0, 0 }, /* 83 = linux_symlink */
+ { AS(linux_lstat_args), (sy_call_t *)linux_lstat, AUE_LSTAT, NULL, 0, 0 }, /* 84 = linux_lstat */
+ { AS(linux_readlink_args), (sy_call_t *)linux_readlink, AUE_READLINK, NULL, 0, 0 }, /* 85 = linux_readlink */
+ { AS(linux_uselib_args), (sy_call_t *)linux_uselib, AUE_USELIB, NULL, 0, 0 }, /* 86 = linux_uselib */
+ { AS(swapon_args), (sy_call_t *)swapon, AUE_SWAPON, NULL, 0, 0 }, /* 87 = swapon */
+ { AS(linux_reboot_args), (sy_call_t *)linux_reboot, AUE_REBOOT, NULL, 0, 0 }, /* 88 = linux_reboot */
+ { AS(linux_readdir_args), (sy_call_t *)linux_readdir, AUE_GETDIRENTRIES, NULL, 0, 0 }, /* 89 = linux_readdir */
+ { AS(linux_mmap_args), (sy_call_t *)linux_mmap, AUE_MMAP, NULL, 0, 0 }, /* 90 = linux_mmap */
+ { AS(munmap_args), (sy_call_t *)munmap, AUE_MUNMAP, NULL, 0, 0 }, /* 91 = munmap */
+ { AS(linux_truncate_args), (sy_call_t *)linux_truncate, AUE_TRUNCATE, NULL, 0, 0 }, /* 92 = linux_truncate */
+ { AS(linux_ftruncate_args), (sy_call_t *)linux_ftruncate, AUE_FTRUNCATE, NULL, 0, 0 }, /* 93 = linux_ftruncate */
+ { AS(fchmod_args), (sy_call_t *)fchmod, AUE_FCHMOD, NULL, 0, 0 }, /* 94 = fchmod */
+ { AS(fchown_args), (sy_call_t *)fchown, AUE_FCHOWN, NULL, 0, 0 }, /* 95 = fchown */
+ { AS(linux_getpriority_args), (sy_call_t *)linux_getpriority, AUE_GETPRIORITY, NULL, 0, 0 }, /* 96 = linux_getpriority */
+ { AS(setpriority_args), (sy_call_t *)setpriority, AUE_SETPRIORITY, NULL, 0, 0 }, /* 97 = setpriority */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 98 = profil */
+ { AS(linux_statfs_args), (sy_call_t *)linux_statfs, AUE_STATFS, NULL, 0, 0 }, /* 99 = linux_statfs */
+ { AS(linux_fstatfs_args), (sy_call_t *)linux_fstatfs, AUE_FSTATFS, NULL, 0, 0 }, /* 100 = linux_fstatfs */
+ { AS(linux_ioperm_args), (sy_call_t *)linux_ioperm, AUE_NULL, NULL, 0, 0 }, /* 101 = linux_ioperm */
+ { AS(linux_socketcall_args), (sy_call_t *)linux_socketcall, AUE_NULL, NULL, 0, 0 }, /* 102 = linux_socketcall */
+ { AS(linux_syslog_args), (sy_call_t *)linux_syslog, AUE_NULL, NULL, 0, 0 }, /* 103 = linux_syslog */
+ { AS(linux_setitimer_args), (sy_call_t *)linux_setitimer, AUE_SETITIMER, NULL, 0, 0 }, /* 104 = linux_setitimer */
+ { AS(linux_getitimer_args), (sy_call_t *)linux_getitimer, AUE_GETITIMER, NULL, 0, 0 }, /* 105 = linux_getitimer */
+ { AS(linux_newstat_args), (sy_call_t *)linux_newstat, AUE_STAT, NULL, 0, 0 }, /* 106 = linux_newstat */
+ { AS(linux_newlstat_args), (sy_call_t *)linux_newlstat, AUE_LSTAT, NULL, 0, 0 }, /* 107 = linux_newlstat */
+ { AS(linux_newfstat_args), (sy_call_t *)linux_newfstat, AUE_FSTAT, NULL, 0, 0 }, /* 108 = linux_newfstat */
+ { 0, (sy_call_t *)linux_uname, AUE_NULL, NULL, 0, 0 }, /* 109 = linux_uname */
+ { AS(linux_iopl_args), (sy_call_t *)linux_iopl, AUE_NULL, NULL, 0, 0 }, /* 110 = linux_iopl */
+ { 0, (sy_call_t *)linux_vhangup, AUE_NULL, NULL, 0, 0 }, /* 111 = linux_vhangup */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 112 = idle */
+ { 0, (sy_call_t *)linux_vm86old, AUE_NULL, NULL, 0, 0 }, /* 113 = linux_vm86old */
+ { AS(linux_wait4_args), (sy_call_t *)linux_wait4, AUE_WAIT4, NULL, 0, 0 }, /* 114 = linux_wait4 */
+ { 0, (sy_call_t *)linux_swapoff, AUE_SWAPOFF, NULL, 0, 0 }, /* 115 = linux_swapoff */
+ { AS(linux_sysinfo_args), (sy_call_t *)linux_sysinfo, AUE_NULL, NULL, 0, 0 }, /* 116 = linux_sysinfo */
+ { AS(linux_ipc_args), (sy_call_t *)linux_ipc, AUE_NULL, NULL, 0, 0 }, /* 117 = linux_ipc */
+ { AS(fsync_args), (sy_call_t *)fsync, AUE_FSYNC, NULL, 0, 0 }, /* 118 = fsync */
+ { AS(linux_sigreturn_args), (sy_call_t *)linux_sigreturn, AUE_SIGRETURN, NULL, 0, 0 }, /* 119 = linux_sigreturn */
+ { AS(linux_clone_args), (sy_call_t *)linux_clone, AUE_RFORK, NULL, 0, 0 }, /* 120 = linux_clone */
+ { AS(setdomainname_args), (sy_call_t *)setdomainname, AUE_SYSCTL, NULL, 0, 0 }, /* 121 = setdomainname */
+ { AS(linux_newuname_args), (sy_call_t *)linux_newuname, AUE_NULL, NULL, 0, 0 }, /* 122 = linux_newuname */
+ { AS(linux_modify_ldt_args), (sy_call_t *)linux_modify_ldt, AUE_NULL, NULL, 0, 0 }, /* 123 = linux_modify_ldt */
+ { 0, (sy_call_t *)linux_adjtimex, AUE_ADJTIME, NULL, 0, 0 }, /* 124 = linux_adjtimex */
+ { AS(linux_mprotect_args), (sy_call_t *)linux_mprotect, AUE_MPROTECT, NULL, 0, 0 }, /* 125 = linux_mprotect */
+ { AS(linux_sigprocmask_args), (sy_call_t *)linux_sigprocmask, AUE_SIGPROCMASK, NULL, 0, 0 }, /* 126 = linux_sigprocmask */
+ { 0, (sy_call_t *)linux_create_module, AUE_NULL, NULL, 0, 0 }, /* 127 = linux_create_module */
+ { 0, (sy_call_t *)linux_init_module, AUE_NULL, NULL, 0, 0 }, /* 128 = linux_init_module */
+ { 0, (sy_call_t *)linux_delete_module, AUE_NULL, NULL, 0, 0 }, /* 129 = linux_delete_module */
+ { 0, (sy_call_t *)linux_get_kernel_syms, AUE_NULL, NULL, 0, 0 }, /* 130 = linux_get_kernel_syms */
+ { 0, (sy_call_t *)linux_quotactl, AUE_QUOTACTL, NULL, 0, 0 }, /* 131 = linux_quotactl */
+ { AS(getpgid_args), (sy_call_t *)getpgid, AUE_GETPGID, NULL, 0, 0 }, /* 132 = getpgid */
+ { AS(fchdir_args), (sy_call_t *)fchdir, AUE_FCHDIR, NULL, 0, 0 }, /* 133 = fchdir */
+ { 0, (sy_call_t *)linux_bdflush, AUE_BDFLUSH, NULL, 0, 0 }, /* 134 = linux_bdflush */
+ { AS(linux_sysfs_args), (sy_call_t *)linux_sysfs, AUE_NULL, NULL, 0, 0 }, /* 135 = linux_sysfs */
+ { AS(linux_personality_args), (sy_call_t *)linux_personality, AUE_PERSONALITY, NULL, 0, 0 }, /* 136 = linux_personality */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 137 = afs_syscall */
+ { AS(linux_setfsuid16_args), (sy_call_t *)linux_setfsuid16, AUE_SETFSUID, NULL, 0, 0 }, /* 138 = linux_setfsuid16 */
+ { AS(linux_setfsgid16_args), (sy_call_t *)linux_setfsgid16, AUE_SETFSGID, NULL, 0, 0 }, /* 139 = linux_setfsgid16 */
+ { AS(linux_llseek_args), (sy_call_t *)linux_llseek, AUE_LSEEK, NULL, 0, 0 }, /* 140 = linux_llseek */
+ { AS(linux_getdents_args), (sy_call_t *)linux_getdents, AUE_GETDIRENTRIES, NULL, 0, 0 }, /* 141 = linux_getdents */
+ { AS(linux_select_args), (sy_call_t *)linux_select, AUE_SELECT, NULL, 0, 0 }, /* 142 = linux_select */
+ { AS(flock_args), (sy_call_t *)flock, AUE_FLOCK, NULL, 0, 0 }, /* 143 = flock */
+ { AS(linux_msync_args), (sy_call_t *)linux_msync, AUE_MSYNC, NULL, 0, 0 }, /* 144 = linux_msync */
+ { AS(readv_args), (sy_call_t *)readv, AUE_READV, NULL, 0, 0 }, /* 145 = readv */
+ { AS(writev_args), (sy_call_t *)writev, AUE_WRITEV, NULL, 0, 0 }, /* 146 = writev */
+ { AS(linux_getsid_args), (sy_call_t *)linux_getsid, AUE_GETSID, NULL, 0, 0 }, /* 147 = linux_getsid */
+ { AS(linux_fdatasync_args), (sy_call_t *)linux_fdatasync, AUE_NULL, NULL, 0, 0 }, /* 148 = linux_fdatasync */
+ { AS(linux_sysctl_args), (sy_call_t *)linux_sysctl, AUE_SYSCTL, NULL, 0, 0 }, /* 149 = linux_sysctl */
+ { AS(mlock_args), (sy_call_t *)mlock, AUE_MLOCK, NULL, 0, 0 }, /* 150 = mlock */
+ { AS(munlock_args), (sy_call_t *)munlock, AUE_MUNLOCK, NULL, 0, 0 }, /* 151 = munlock */
+ { AS(mlockall_args), (sy_call_t *)mlockall, AUE_MLOCKALL, NULL, 0, 0 }, /* 152 = mlockall */
+ { 0, (sy_call_t *)munlockall, AUE_MUNLOCKALL, NULL, 0, 0 }, /* 153 = munlockall */
+ { AS(sched_setparam_args), (sy_call_t *)sched_setparam, AUE_SCHED_SETPARAM, NULL, 0, 0 }, /* 154 = sched_setparam */
+ { AS(sched_getparam_args), (sy_call_t *)sched_getparam, AUE_SCHED_GETPARAM, NULL, 0, 0 }, /* 155 = sched_getparam */
+ { AS(linux_sched_setscheduler_args), (sy_call_t *)linux_sched_setscheduler, AUE_SCHED_SETSCHEDULER, NULL, 0, 0 }, /* 156 = linux_sched_setscheduler */
+ { AS(linux_sched_getscheduler_args), (sy_call_t *)linux_sched_getscheduler, AUE_SCHED_GETSCHEDULER, NULL, 0, 0 }, /* 157 = linux_sched_getscheduler */
+ { 0, (sy_call_t *)sched_yield, AUE_NULL, NULL, 0, 0 }, /* 158 = sched_yield */
+ { AS(linux_sched_get_priority_max_args), (sy_call_t *)linux_sched_get_priority_max, AUE_SCHED_GET_PRIORITY_MAX, NULL, 0, 0 }, /* 159 = linux_sched_get_priority_max */
+ { AS(linux_sched_get_priority_min_args), (sy_call_t *)linux_sched_get_priority_min, AUE_SCHED_GET_PRIORITY_MIN, NULL, 0, 0 }, /* 160 = linux_sched_get_priority_min */
+ { AS(sched_rr_get_interval_args), (sy_call_t *)sched_rr_get_interval, AUE_SCHED_RR_GET_INTERVAL, NULL, 0, 0 }, /* 161 = sched_rr_get_interval */
+ { AS(linux_nanosleep_args), (sy_call_t *)linux_nanosleep, AUE_NULL, NULL, 0, 0 }, /* 162 = linux_nanosleep */
+ { AS(linux_mremap_args), (sy_call_t *)linux_mremap, AUE_NULL, NULL, 0, 0 }, /* 163 = linux_mremap */
+ { AS(linux_setresuid16_args), (sy_call_t *)linux_setresuid16, AUE_SETRESUID, NULL, 0, 0 }, /* 164 = linux_setresuid16 */
+ { AS(linux_getresuid16_args), (sy_call_t *)linux_getresuid16, AUE_GETRESUID, NULL, 0, 0 }, /* 165 = linux_getresuid16 */
+ { 0, (sy_call_t *)linux_vm86, AUE_NULL, NULL, 0, 0 }, /* 166 = linux_vm86 */
+ { 0, (sy_call_t *)linux_query_module, AUE_NULL, NULL, 0, 0 }, /* 167 = linux_query_module */
+ { AS(poll_args), (sy_call_t *)poll, AUE_POLL, NULL, 0, 0 }, /* 168 = poll */
+ { 0, (sy_call_t *)linux_nfsservctl, AUE_NULL, NULL, 0, 0 }, /* 169 = linux_nfsservctl */
+ { AS(linux_setresgid16_args), (sy_call_t *)linux_setresgid16, AUE_SETRESGID, NULL, 0, 0 }, /* 170 = linux_setresgid16 */
+ { AS(linux_getresgid16_args), (sy_call_t *)linux_getresgid16, AUE_GETRESGID, NULL, 0, 0 }, /* 171 = linux_getresgid16 */
+ { AS(linux_prctl_args), (sy_call_t *)linux_prctl, AUE_PRCTL, NULL, 0, 0 }, /* 172 = linux_prctl */
+ { AS(linux_rt_sigreturn_args), (sy_call_t *)linux_rt_sigreturn, AUE_NULL, NULL, 0, 0 }, /* 173 = linux_rt_sigreturn */
+ { AS(linux_rt_sigaction_args), (sy_call_t *)linux_rt_sigaction, AUE_NULL, NULL, 0, 0 }, /* 174 = linux_rt_sigaction */
+ { AS(linux_rt_sigprocmask_args), (sy_call_t *)linux_rt_sigprocmask, AUE_NULL, NULL, 0, 0 }, /* 175 = linux_rt_sigprocmask */
+ { AS(linux_rt_sigpending_args), (sy_call_t *)linux_rt_sigpending, AUE_NULL, NULL, 0, 0 }, /* 176 = linux_rt_sigpending */
+ { AS(linux_rt_sigtimedwait_args), (sy_call_t *)linux_rt_sigtimedwait, AUE_NULL, NULL, 0, 0 }, /* 177 = linux_rt_sigtimedwait */
+ { 0, (sy_call_t *)linux_rt_sigqueueinfo, AUE_NULL, NULL, 0, 0 }, /* 178 = linux_rt_sigqueueinfo */
+ { AS(linux_rt_sigsuspend_args), (sy_call_t *)linux_rt_sigsuspend, AUE_NULL, NULL, 0, 0 }, /* 179 = linux_rt_sigsuspend */
+ { AS(linux_pread_args), (sy_call_t *)linux_pread, AUE_PREAD, NULL, 0, 0 }, /* 180 = linux_pread */
+ { AS(linux_pwrite_args), (sy_call_t *)linux_pwrite, AUE_PWRITE, NULL, 0, 0 }, /* 181 = linux_pwrite */
+ { AS(linux_chown16_args), (sy_call_t *)linux_chown16, AUE_CHOWN, NULL, 0, 0 }, /* 182 = linux_chown16 */
+ { AS(linux_getcwd_args), (sy_call_t *)linux_getcwd, AUE_GETCWD, NULL, 0, 0 }, /* 183 = linux_getcwd */
+ { 0, (sy_call_t *)linux_capget, AUE_CAPGET, NULL, 0, 0 }, /* 184 = linux_capget */
+ { 0, (sy_call_t *)linux_capset, AUE_CAPSET, NULL, 0, 0 }, /* 185 = linux_capset */
+ { AS(linux_sigaltstack_args), (sy_call_t *)linux_sigaltstack, AUE_NULL, NULL, 0, 0 }, /* 186 = linux_sigaltstack */
+ { 0, (sy_call_t *)linux_sendfile, AUE_SENDFILE, NULL, 0, 0 }, /* 187 = linux_sendfile */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 188 = getpmsg */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 189 = putpmsg */
+ { 0, (sy_call_t *)linux_vfork, AUE_VFORK, NULL, 0, 0 }, /* 190 = linux_vfork */
+ { AS(linux_getrlimit_args), (sy_call_t *)linux_getrlimit, AUE_GETRLIMIT, NULL, 0, 0 }, /* 191 = linux_getrlimit */
+ { AS(linux_mmap2_args), (sy_call_t *)linux_mmap2, AUE_MMAP, NULL, 0, 0 }, /* 192 = linux_mmap2 */
+ { AS(linux_truncate64_args), (sy_call_t *)linux_truncate64, AUE_TRUNCATE, NULL, 0, 0 }, /* 193 = linux_truncate64 */
+ { AS(linux_ftruncate64_args), (sy_call_t *)linux_ftruncate64, AUE_FTRUNCATE, NULL, 0, 0 }, /* 194 = linux_ftruncate64 */
+ { AS(linux_stat64_args), (sy_call_t *)linux_stat64, AUE_STAT, NULL, 0, 0 }, /* 195 = linux_stat64 */
+ { AS(linux_lstat64_args), (sy_call_t *)linux_lstat64, AUE_LSTAT, NULL, 0, 0 }, /* 196 = linux_lstat64 */
+ { AS(linux_fstat64_args), (sy_call_t *)linux_fstat64, AUE_FSTAT, NULL, 0, 0 }, /* 197 = linux_fstat64 */
+ { AS(linux_lchown_args), (sy_call_t *)linux_lchown, AUE_LCHOWN, NULL, 0, 0 }, /* 198 = linux_lchown */
+ { 0, (sy_call_t *)linux_getuid, AUE_GETUID, NULL, 0, 0 }, /* 199 = linux_getuid */
+ { 0, (sy_call_t *)linux_getgid, AUE_GETGID, NULL, 0, 0 }, /* 200 = linux_getgid */
+ { 0, (sy_call_t *)geteuid, AUE_GETEUID, NULL, 0, 0 }, /* 201 = geteuid */
+ { 0, (sy_call_t *)getegid, AUE_GETEGID, NULL, 0, 0 }, /* 202 = getegid */
+ { AS(setreuid_args), (sy_call_t *)setreuid, AUE_SETREUID, NULL, 0, 0 }, /* 203 = setreuid */
+ { AS(setregid_args), (sy_call_t *)setregid, AUE_SETREGID, NULL, 0, 0 }, /* 204 = setregid */
+ { AS(linux_getgroups_args), (sy_call_t *)linux_getgroups, AUE_GETGROUPS, NULL, 0, 0 }, /* 205 = linux_getgroups */
+ { AS(linux_setgroups_args), (sy_call_t *)linux_setgroups, AUE_SETGROUPS, NULL, 0, 0 }, /* 206 = linux_setgroups */
+ { AS(fchown_args), (sy_call_t *)fchown, AUE_NULL, NULL, 0, 0 }, /* 207 = fchown */
+ { AS(setresuid_args), (sy_call_t *)setresuid, AUE_SETRESUID, NULL, 0, 0 }, /* 208 = setresuid */
+ { AS(getresuid_args), (sy_call_t *)getresuid, AUE_GETRESUID, NULL, 0, 0 }, /* 209 = getresuid */
+ { AS(setresgid_args), (sy_call_t *)setresgid, AUE_SETRESGID, NULL, 0, 0 }, /* 210 = setresgid */
+ { AS(getresgid_args), (sy_call_t *)getresgid, AUE_GETRESGID, NULL, 0, 0 }, /* 211 = getresgid */
+ { AS(linux_chown_args), (sy_call_t *)linux_chown, AUE_CHOWN, NULL, 0, 0 }, /* 212 = linux_chown */
+ { AS(setuid_args), (sy_call_t *)setuid, AUE_SETUID, NULL, 0, 0 }, /* 213 = setuid */
+ { AS(setgid_args), (sy_call_t *)setgid, AUE_SETGID, NULL, 0, 0 }, /* 214 = setgid */
+ { AS(linux_setfsuid_args), (sy_call_t *)linux_setfsuid, AUE_SETFSUID, NULL, 0, 0 }, /* 215 = linux_setfsuid */
+ { AS(linux_setfsgid_args), (sy_call_t *)linux_setfsgid, AUE_SETFSGID, NULL, 0, 0 }, /* 216 = linux_setfsgid */
+ { AS(linux_pivot_root_args), (sy_call_t *)linux_pivot_root, AUE_PIVOT_ROOT, NULL, 0, 0 }, /* 217 = linux_pivot_root */
+ { AS(linux_mincore_args), (sy_call_t *)linux_mincore, AUE_MINCORE, NULL, 0, 0 }, /* 218 = linux_mincore */
+ { AS(madvise_args), (sy_call_t *)madvise, AUE_MADVISE, NULL, 0, 0 }, /* 219 = madvise */
+ { AS(linux_getdents64_args), (sy_call_t *)linux_getdents64, AUE_GETDIRENTRIES, NULL, 0, 0 }, /* 220 = linux_getdents64 */
+ { AS(linux_fcntl64_args), (sy_call_t *)linux_fcntl64, AUE_FCNTL, NULL, 0, 0 }, /* 221 = linux_fcntl64 */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 222 = */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 223 = */
+ { 0, (sy_call_t *)linux_gettid, AUE_NULL, NULL, 0, 0 }, /* 224 = linux_gettid */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 225 = linux_readahead */
+ { 0, (sy_call_t *)linux_setxattr, AUE_NULL, NULL, 0, 0 }, /* 226 = linux_setxattr */
+ { 0, (sy_call_t *)linux_lsetxattr, AUE_NULL, NULL, 0, 0 }, /* 227 = linux_lsetxattr */
+ { 0, (sy_call_t *)linux_fsetxattr, AUE_NULL, NULL, 0, 0 }, /* 228 = linux_fsetxattr */
+ { 0, (sy_call_t *)linux_getxattr, AUE_NULL, NULL, 0, 0 }, /* 229 = linux_getxattr */
+ { 0, (sy_call_t *)linux_lgetxattr, AUE_NULL, NULL, 0, 0 }, /* 230 = linux_lgetxattr */
+ { 0, (sy_call_t *)linux_fgetxattr, AUE_NULL, NULL, 0, 0 }, /* 231 = linux_fgetxattr */
+ { 0, (sy_call_t *)linux_listxattr, AUE_NULL, NULL, 0, 0 }, /* 232 = linux_listxattr */
+ { 0, (sy_call_t *)linux_llistxattr, AUE_NULL, NULL, 0, 0 }, /* 233 = linux_llistxattr */
+ { 0, (sy_call_t *)linux_flistxattr, AUE_NULL, NULL, 0, 0 }, /* 234 = linux_flistxattr */
+ { 0, (sy_call_t *)linux_removexattr, AUE_NULL, NULL, 0, 0 }, /* 235 = linux_removexattr */
+ { 0, (sy_call_t *)linux_lremovexattr, AUE_NULL, NULL, 0, 0 }, /* 236 = linux_lremovexattr */
+ { 0, (sy_call_t *)linux_fremovexattr, AUE_NULL, NULL, 0, 0 }, /* 237 = linux_fremovexattr */
+ { AS(linux_tkill_args), (sy_call_t *)linux_tkill, AUE_NULL, NULL, 0, 0 }, /* 238 = linux_tkill */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 239 = linux_sendfile64 */
+ { AS(linux_sys_futex_args), (sy_call_t *)linux_sys_futex, AUE_NULL, NULL, 0, 0 }, /* 240 = linux_sys_futex */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 241 = linux_sched_setaffinity */
+ { AS(linux_sched_getaffinity_args), (sy_call_t *)linux_sched_getaffinity, AUE_NULL, NULL, 0, 0 }, /* 242 = linux_sched_getaffinity */
+ { AS(linux_set_thread_area_args), (sy_call_t *)linux_set_thread_area, AUE_NULL, NULL, 0, 0 }, /* 243 = linux_set_thread_area */
+ { AS(linux_get_thread_area_args), (sy_call_t *)linux_get_thread_area, AUE_NULL, NULL, 0, 0 }, /* 244 = linux_get_thread_area */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 245 = linux_io_setup */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 246 = linux_io_destroy */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 247 = linux_io_getevents */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 248 = linux_io_submit */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 249 = linux_io_cancel */
+ { 0, (sy_call_t *)linux_fadvise64, AUE_NULL, NULL, 0, 0 }, /* 250 = linux_fadvise64 */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 251 = */
+ { AS(linux_exit_group_args), (sy_call_t *)linux_exit_group, AUE_EXIT, NULL, 0, 0 }, /* 252 = linux_exit_group */
+ { 0, (sy_call_t *)linux_lookup_dcookie, AUE_NULL, NULL, 0, 0 }, /* 253 = linux_lookup_dcookie */
+ { 0, (sy_call_t *)linux_epoll_create, AUE_NULL, NULL, 0, 0 }, /* 254 = linux_epoll_create */
+ { 0, (sy_call_t *)linux_epoll_ctl, AUE_NULL, NULL, 0, 0 }, /* 255 = linux_epoll_ctl */
+ { 0, (sy_call_t *)linux_epoll_wait, AUE_NULL, NULL, 0, 0 }, /* 256 = linux_epoll_wait */
+ { 0, (sy_call_t *)linux_remap_file_pages, AUE_NULL, NULL, 0, 0 }, /* 257 = linux_remap_file_pages */
+ { AS(linux_set_tid_address_args), (sy_call_t *)linux_set_tid_address, AUE_NULL, NULL, 0, 0 }, /* 258 = linux_set_tid_address */
+ { AS(linux_timer_create_args), (sy_call_t *)linux_timer_create, AUE_NULL, NULL, 0, 0 }, /* 259 = linux_timer_create */
+ { AS(linux_timer_settime_args), (sy_call_t *)linux_timer_settime, AUE_NULL, NULL, 0, 0 }, /* 260 = linux_timer_settime */
+ { AS(linux_timer_gettime_args), (sy_call_t *)linux_timer_gettime, AUE_NULL, NULL, 0, 0 }, /* 261 = linux_timer_gettime */
+ { AS(linux_timer_getoverrun_args), (sy_call_t *)linux_timer_getoverrun, AUE_NULL, NULL, 0, 0 }, /* 262 = linux_timer_getoverrun */
+ { AS(linux_timer_delete_args), (sy_call_t *)linux_timer_delete, AUE_NULL, NULL, 0, 0 }, /* 263 = linux_timer_delete */
+ { AS(linux_clock_settime_args), (sy_call_t *)linux_clock_settime, AUE_CLOCK_SETTIME, NULL, 0, 0 }, /* 264 = linux_clock_settime */
+ { AS(linux_clock_gettime_args), (sy_call_t *)linux_clock_gettime, AUE_NULL, NULL, 0, 0 }, /* 265 = linux_clock_gettime */
+ { AS(linux_clock_getres_args), (sy_call_t *)linux_clock_getres, AUE_NULL, NULL, 0, 0 }, /* 266 = linux_clock_getres */
+ { AS(linux_clock_nanosleep_args), (sy_call_t *)linux_clock_nanosleep, AUE_NULL, NULL, 0, 0 }, /* 267 = linux_clock_nanosleep */
+ { AS(linux_statfs64_args), (sy_call_t *)linux_statfs64, AUE_STATFS, NULL, 0, 0 }, /* 268 = linux_statfs64 */
+ { 0, (sy_call_t *)linux_fstatfs64, AUE_FSTATFS, NULL, 0, 0 }, /* 269 = linux_fstatfs64 */
+ { AS(linux_tgkill_args), (sy_call_t *)linux_tgkill, AUE_NULL, NULL, 0, 0 }, /* 270 = linux_tgkill */
+ { AS(linux_utimes_args), (sy_call_t *)linux_utimes, AUE_UTIMES, NULL, 0, 0 }, /* 271 = linux_utimes */
+ { 0, (sy_call_t *)linux_fadvise64_64, AUE_NULL, NULL, 0, 0 }, /* 272 = linux_fadvise64_64 */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 273 = */
+ { 0, (sy_call_t *)linux_mbind, AUE_NULL, NULL, 0, 0 }, /* 274 = linux_mbind */
+ { 0, (sy_call_t *)linux_get_mempolicy, AUE_NULL, NULL, 0, 0 }, /* 275 = linux_get_mempolicy */
+ { 0, (sy_call_t *)linux_set_mempolicy, AUE_NULL, NULL, 0, 0 }, /* 276 = linux_set_mempolicy */
+ { AS(linux_mq_open_args), (sy_call_t *)linux_mq_open, AUE_NULL, NULL, 0, 0 }, /* 277 = linux_mq_open */
+ { AS(linux_mq_unlink_args), (sy_call_t *)linux_mq_unlink, AUE_NULL, NULL, 0, 0 }, /* 278 = linux_mq_unlink */
+ { AS(linux_mq_timedsend_args), (sy_call_t *)linux_mq_timedsend, AUE_NULL, NULL, 0, 0 }, /* 279 = linux_mq_timedsend */
+ { AS(linux_mq_timedreceive_args), (sy_call_t *)linux_mq_timedreceive, AUE_NULL, NULL, 0, 0 }, /* 280 = linux_mq_timedreceive */
+ { AS(linux_mq_notify_args), (sy_call_t *)linux_mq_notify, AUE_NULL, NULL, 0, 0 }, /* 281 = linux_mq_notify */
+ { AS(linux_mq_getsetattr_args), (sy_call_t *)linux_mq_getsetattr, AUE_NULL, NULL, 0, 0 }, /* 282 = linux_mq_getsetattr */
+ { 0, (sy_call_t *)linux_kexec_load, AUE_NULL, NULL, 0, 0 }, /* 283 = linux_kexec_load */
+ { 0, (sy_call_t *)linux_waitid, AUE_NULL, NULL, 0, 0 }, /* 284 = linux_waitid */
+ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0 }, /* 285 = */
+ { 0, (sy_call_t *)linux_add_key, AUE_NULL, NULL, 0, 0 }, /* 286 = linux_add_key */
+ { 0, (sy_call_t *)linux_request_key, AUE_NULL, NULL, 0, 0 }, /* 287 = linux_request_key */
+ { 0, (sy_call_t *)linux_keyctl, AUE_NULL, NULL, 0, 0 }, /* 288 = linux_keyctl */
+ { 0, (sy_call_t *)linux_ioprio_set, AUE_NULL, NULL, 0, 0 }, /* 289 = linux_ioprio_set */
+ { 0, (sy_call_t *)linux_ioprio_get, AUE_NULL, NULL, 0, 0 }, /* 290 = linux_ioprio_get */
+ { 0, (sy_call_t *)linux_inotify_init, AUE_NULL, NULL, 0, 0 }, /* 291 = linux_inotify_init */
+ { 0, (sy_call_t *)linux_inotify_add_watch, AUE_NULL, NULL, 0, 0 }, /* 292 = linux_inotify_add_watch */
+ { 0, (sy_call_t *)linux_inotify_rm_watch, AUE_NULL, NULL, 0, 0 }, /* 293 = linux_inotify_rm_watch */
+ { 0, (sy_call_t *)linux_migrate_pages, AUE_NULL, NULL, 0, 0 }, /* 294 = linux_migrate_pages */
+ { AS(linux_openat_args), (sy_call_t *)linux_openat, AUE_OPEN_RWTC, NULL, 0, 0 }, /* 295 = linux_openat */
+ { 0, (sy_call_t *)linux_mkdirat, AUE_NULL, NULL, 0, 0 }, /* 296 = linux_mkdirat */
+ { 0, (sy_call_t *)linux_mknodat, AUE_NULL, NULL, 0, 0 }, /* 297 = linux_mknodat */
+ { 0, (sy_call_t *)linux_fchownat, AUE_NULL, NULL, 0, 0 }, /* 298 = linux_fchownat */
+ { 0, (sy_call_t *)linux_futimesat, AUE_NULL, NULL, 0, 0 }, /* 299 = linux_futimesat */
+ { 0, (sy_call_t *)linux_fstatat64, AUE_NULL, NULL, 0, 0 }, /* 300 = linux_fstatat64 */
+ { 0, (sy_call_t *)linux_unlinkat, AUE_NULL, NULL, 0, 0 }, /* 301 = linux_unlinkat */
+ { 0, (sy_call_t *)linux_renameat, AUE_NULL, NULL, 0, 0 }, /* 302 = linux_renameat */
+ { 0, (sy_call_t *)linux_linkat, AUE_NULL, NULL, 0, 0 }, /* 303 = linux_linkat */
+ { 0, (sy_call_t *)linux_symlinkat, AUE_NULL, NULL, 0, 0 }, /* 304 = linux_symlinkat */
+ { 0, (sy_call_t *)linux_readlinkat, AUE_NULL, NULL, 0, 0 }, /* 305 = linux_readlinkat */
+ { 0, (sy_call_t *)linux_fchmodat, AUE_NULL, NULL, 0, 0 }, /* 306 = linux_fchmodat */
+ { 0, (sy_call_t *)linux_faccessat, AUE_NULL, NULL, 0, 0 }, /* 307 = linux_faccessat */
+ { 0, (sy_call_t *)linux_pselect6, AUE_NULL, NULL, 0, 0 }, /* 308 = linux_pselect6 */
+ { 0, (sy_call_t *)linux_ppoll, AUE_NULL, NULL, 0, 0 }, /* 309 = linux_ppoll */
+ { 0, (sy_call_t *)linux_unshare, AUE_NULL, NULL, 0, 0 }, /* 310 = linux_unshare */
};
Index: linux_ptrace.c
===================================================================
RCS file: /home/cvs/src/sys/i386/linux/linux_ptrace.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -L sys/i386/linux/linux_ptrace.c -L sys/i386/linux/linux_ptrace.c -u -r1.2 -r1.3
--- sys/i386/linux/linux_ptrace.c
+++ sys/i386/linux/linux_ptrace.c
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/i386/linux/linux_ptrace.c,v 1.16.2.1 2006/03/07 18:08:09 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/i386/linux/linux_ptrace.c,v 1.18 2007/09/17 05:27:20 jeff Exp $");
#include "opt_cpu.h"
@@ -222,7 +222,7 @@
{
PROC_LOCK_ASSERT(td->td_proc, MA_OWNED);
- if (cpu_fxsr == 0 || (td->td_proc->p_sflag & PS_INMEM) == 0)
+ if (cpu_fxsr == 0 || (td->td_proc->p_flag & P_INMEM) == 0)
return (EIO);
bcopy(&td->td_pcb->pcb_save.sv_xmm, fpxregs, sizeof(*fpxregs));
return (0);
@@ -233,7 +233,7 @@
{
PROC_LOCK_ASSERT(td->td_proc, MA_OWNED);
- if (cpu_fxsr == 0 || (td->td_proc->p_sflag & PS_INMEM) == 0)
+ if (cpu_fxsr == 0 || (td->td_proc->p_flag & P_INMEM) == 0)
return (EIO);
bcopy(fpxregs, &td->td_pcb->pcb_save.sv_xmm, sizeof(*fpxregs));
return (0);
Index: linux_sysvec.c
===================================================================
RCS file: /home/cvs/src/sys/i386/linux/linux_sysvec.c,v
retrieving revision 1.1.1.2
retrieving revision 1.2
diff -L sys/i386/linux/linux_sysvec.c -L sys/i386/linux/linux_sysvec.c -u -r1.1.1.2 -r1.2
--- sys/i386/linux/linux_sysvec.c
+++ sys/i386/linux/linux_sysvec.c
@@ -27,14 +27,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/i386/linux/linux_sysvec.c,v 1.137.2.1 2005/12/22 21:25:20 jhb Exp $");
-
-/* XXX we use functions that might not exist. */
-#include "opt_compat.h"
-
-#ifndef COMPAT_43
-#error "Unable to compile Linux-emulator due to missing COMPAT_43 option!"
-#endif
+__FBSDID("$FreeBSD: src/sys/i386/linux/linux_sysvec.c,v 1.150 2007/09/20 13:46:26 kib Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -53,6 +46,7 @@
#include <sys/sysent.h>
#include <sys/sysproto.h>
#include <sys/vnode.h>
+#include <sys/eventhandler.h>
#include <vm/vm.h>
#include <vm/pmap.h>
@@ -68,14 +62,12 @@
#include <i386/linux/linux.h>
#include <i386/linux/linux_proto.h>
+#include <compat/linux/linux_emul.h>
#include <compat/linux/linux_mib.h>
#include <compat/linux/linux_signal.h>
#include <compat/linux/linux_util.h>
MODULE_VERSION(linux, 1);
-MODULE_DEPEND(linux, sysvmsg, 1, 1, 1);
-MODULE_DEPEND(linux, sysvsem, 1, 1, 1);
-MODULE_DEPEND(linux, sysvshm, 1, 1, 1);
MALLOC_DEFINE(M_LINUX, "linux", "Linux mode structures");
@@ -103,6 +95,7 @@
extern struct sysent linux_sysent[LINUX_SYS_MAXSYSCALL];
SET_DECLARE(linux_ioctl_handler_set, struct linux_ioctl_handler);
+SET_DECLARE(linux_device_handler_set, struct linux_device_handler);
static int linux_fixup(register_t **stack_base,
struct image_params *iparams);
@@ -110,13 +103,23 @@
struct image_params *iparams);
static void linux_prepsyscall(struct trapframe *tf, int *args, u_int *code,
caddr_t *params);
-static void linux_sendsig(sig_t catcher, int sig, sigset_t *mask,
- u_long code);
+static void linux_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask);
static void exec_linux_setregs(struct thread *td, u_long entry,
u_long stack, u_long ps_strings);
+extern LIST_HEAD(futex_list, futex) futex_list;
+extern struct sx futex_sx;
+
+static eventhandler_tag linux_exit_tag;
+static eventhandler_tag linux_schedtail_tag;
+static eventhandler_tag linux_exec_tag;
+
/*
* Linux syscalls return negative errno's, we do positive and map them
+ * Reference:
+ * FreeBSD: src/sys/sys/errno.h
+ * Linux: linux-2.6.17.8/include/asm-generic/errno-base.h
+ * linux-2.6.17.8/include/asm-generic/errno.h
*/
static int bsd_to_linux_errno[ELAST + 1] = {
-0, -1, -2, -3, -4, -5, -6, -7, -8, -9,
@@ -127,7 +130,8 @@
-100,-101,-102,-103,-104,-105,-106,-107,-108,-109,
-110,-111, -40, -36,-112,-113, -39, -11, -87,-122,
-116, -66, -6, -6, -6, -6, -6, -37, -38, -9,
- -6, -6, -43, -42, -75, -6, -84
+ -6, -6, -43, -42, -75,-125, -84, -95, -16, -74,
+ -72, -67, -71
};
int bsd_to_linux_signal[LINUX_SIGTBLSZ] = {
@@ -270,15 +274,18 @@
extern unsigned long linux_sznonrtsigcode;
static void
-linux_rt_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code)
+linux_rt_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
{
struct thread *td = curthread;
struct proc *p = td->td_proc;
struct sigacts *psp;
struct trapframe *regs;
struct l_rt_sigframe *fp, frame;
+ int sig, code;
int oonstack;
+ sig = ksi->ksi_signo;
+ code = ksi->ksi_code;
PROC_LOCK_ASSERT(p, MA_OWNED);
psp = p->p_sigacts;
mtx_assert(&psp->ps_mtx, MA_OWNED);
@@ -287,7 +294,7 @@
#ifdef DEBUG
if (ldebug(rt_sendsig))
- printf(ARGS(rt_sendsig, "%p, %d, %p, %lu"),
+ printf(ARGS(rt_sendsig, "%p, %d, %p, %u"),
catcher, sig, (void*)mask, code);
#endif
/*
@@ -318,7 +325,7 @@
/* Fill in POSIX parts */
frame.sf_si.lsi_signo = sig;
frame.sf_si.lsi_code = code;
- frame.sf_si.lsi_addr = (void *)regs->tf_err;
+ frame.sf_si.lsi_addr = ksi->ksi_addr;
/*
* Build the signal context to be used by sigreturn.
@@ -352,6 +359,7 @@
frame.sf_sc.uc_mcontext.sc_esp_at_signal = regs->tf_esp;
frame.sf_sc.uc_mcontext.sc_ss = regs->tf_ss;
frame.sf_sc.uc_mcontext.sc_err = regs->tf_err;
+ frame.sf_sc.uc_mcontext.sc_cr2 = (register_t)ksi->ksi_addr;
frame.sf_sc.uc_mcontext.sc_trapno = bsd_to_linux_trapcode(code);
#ifdef DEBUG
@@ -403,7 +411,7 @@
* specified pc, psl.
*/
static void
-linux_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code)
+linux_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
{
struct thread *td = curthread;
struct proc *p = td->td_proc;
@@ -411,23 +419,25 @@
struct trapframe *regs;
struct l_sigframe *fp, frame;
l_sigset_t lmask;
+ int sig, code;
int oonstack, i;
PROC_LOCK_ASSERT(p, MA_OWNED);
psp = p->p_sigacts;
+ sig = ksi->ksi_signo;
+ code = ksi->ksi_code;
mtx_assert(&psp->ps_mtx, MA_OWNED);
if (SIGISMEMBER(psp->ps_siginfo, sig)) {
/* Signal handler installed with SA_SIGINFO. */
- linux_rt_sendsig(catcher, sig, mask, code);
+ linux_rt_sendsig(catcher, ksi, mask);
return;
}
-
regs = td->td_frame;
oonstack = sigonstack(regs->tf_esp);
#ifdef DEBUG
if (ldebug(sendsig))
- printf(ARGS(sendsig, "%p, %d, %p, %lu"),
+ printf(ARGS(sendsig, "%p, %d, %p, %u"),
catcher, sig, (void*)mask, code);
#endif
@@ -478,7 +488,8 @@
frame.sf_sc.sc_esp_at_signal = regs->tf_esp;
frame.sf_sc.sc_ss = regs->tf_ss;
frame.sf_sc.sc_err = regs->tf_err;
- frame.sf_sc.sc_trapno = bsd_to_linux_trapcode(code);
+ frame.sf_sc.sc_cr2 = (register_t)ksi->ksi_addr;
+ frame.sf_sc.sc_trapno = bsd_to_linux_trapcode(ksi->ksi_trapno);
for (i = 0; i < (LINUX_NSIG_WORDS-1); i++)
frame.sf_extramask[i] = lmask.__bits[i+1];
@@ -525,6 +536,7 @@
struct trapframe *regs;
l_sigset_t lmask;
int eflags, i;
+ ksiginfo_t ksi;
regs = td->td_frame;
@@ -565,7 +577,12 @@
*/
#define CS_SECURE(cs) (ISPL(cs) == SEL_UPL)
if (!CS_SECURE(frame.sf_sc.sc_cs)) {
- trapsignal(td, SIGBUS, T_PROTFLT);
+ ksiginfo_init_trap(&ksi);
+ ksi.ksi_signo = SIGBUS;
+ ksi.ksi_code = BUS_OBJERR;
+ ksi.ksi_trapno = T_PROTFLT;
+ ksi.ksi_addr = (void *)regs->tf_eip;
+ trapsignal(td, &ksi);
return(EINVAL);
}
@@ -621,6 +638,7 @@
stack_t ss;
struct trapframe *regs;
int eflags;
+ ksiginfo_t ksi;
regs = td->td_frame;
@@ -663,7 +681,12 @@
*/
#define CS_SECURE(cs) (ISPL(cs) == SEL_UPL)
if (!CS_SECURE(context->sc_cs)) {
- trapsignal(td, SIGBUS, T_PROTFLT);
+ ksiginfo_init_trap(&ksi);
+ ksi.ksi_signo = SIGBUS;
+ ksi.ksi_code = BUS_OBJERR;
+ ksi.ksi_trapno = T_PROTFLT;
+ ksi.ksi_addr = (void *)regs->tf_eip;
+ trapsignal(td, &ksi);
return(EINVAL);
}
@@ -792,7 +815,7 @@
struct sysentvec linux_sysvec = {
LINUX_SYS_MAXSYSCALL,
linux_sysent,
- 0xff,
+ 0,
LINUX_SIGTBLSZ,
bsd_to_linux_signal,
ELAST + 1,
@@ -821,7 +844,7 @@
struct sysentvec elf_linux_sysvec = {
LINUX_SYS_MAXSYSCALL,
linux_sysent,
- 0xff,
+ 0,
LINUX_SIGTBLSZ,
bsd_to_linux_signal,
ELAST + 1,
@@ -855,6 +878,7 @@
"/lib/ld-linux.so.1",
&elf_linux_sysvec,
NULL,
+ BI_CAN_EXEC_DYN,
};
static Elf32_Brandinfo linux_glibc2brand = {
@@ -865,6 +889,7 @@
"/lib/ld-linux.so.2",
&elf_linux_sysvec,
NULL,
+ BI_CAN_EXEC_DYN,
};
Elf32_Brandinfo *linux_brandlist[] = {
@@ -879,6 +904,7 @@
Elf32_Brandinfo **brandinfo;
int error;
struct linux_ioctl_handler **lihp;
+ struct linux_device_handler **ldhp;
error = 0;
@@ -891,6 +917,18 @@
if (error == 0) {
SET_FOREACH(lihp, linux_ioctl_handler_set)
linux_ioctl_register_handler(*lihp);
+ SET_FOREACH(ldhp, linux_device_handler_set)
+ linux_device_register_handler(*ldhp);
+ mtx_init(&emul_lock, "emuldata lock", NULL, MTX_DEF);
+ sx_init(&emul_shared_lock, "emuldata->shared lock");
+ LIST_INIT(&futex_list);
+ sx_init(&futex_sx, "futex protection lock");
+ linux_exit_tag = EVENTHANDLER_REGISTER(process_exit, linux_proc_exit,
+ NULL, 1000);
+ linux_schedtail_tag = EVENTHANDLER_REGISTER(schedtail, linux_schedtail,
+ NULL, 1000);
+ linux_exec_tag = EVENTHANDLER_REGISTER(process_exec, linux_proc_exec,
+ NULL, 1000);
if (bootverbose)
printf("Linux ELF exec handler installed\n");
} else
@@ -910,6 +948,14 @@
if (error == 0) {
SET_FOREACH(lihp, linux_ioctl_handler_set)
linux_ioctl_unregister_handler(*lihp);
+ SET_FOREACH(ldhp, linux_device_handler_set)
+ linux_device_unregister_handler(*ldhp);
+ mtx_destroy(&emul_lock);
+ sx_destroy(&emul_shared_lock);
+ sx_destroy(&futex_sx);
+ EVENTHANDLER_DEREGISTER(process_exit, linux_exit_tag);
+ EVENTHANDLER_DEREGISTER(schedtail, linux_schedtail_tag);
+ EVENTHANDLER_DEREGISTER(process_exec, linux_exec_tag);
if (bootverbose)
printf("Linux ELF exec handler removed\n");
} else
Index: imgact_linux.c
===================================================================
RCS file: /home/cvs/src/sys/i386/linux/imgact_linux.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -L sys/i386/linux/imgact_linux.c -L sys/i386/linux/imgact_linux.c -u -r1.1.1.1 -r1.2
--- sys/i386/linux/imgact_linux.c
+++ sys/i386/linux/imgact_linux.c
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/i386/linux/imgact_linux.c,v 1.54 2005/04/01 20:00:10 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/i386/linux/imgact_linux.c,v 1.55.4.1 2008/01/19 18:15:04 kib Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -119,12 +119,14 @@
/*
* Destroy old process VM and create a new one (with a new stack)
*/
- exec_new_vmspace(imgp, &linux_sysvec);
+ error = exec_new_vmspace(imgp, &linux_sysvec);
+ if (error)
+ goto fail;
vmspace = imgp->proc->p_vmspace;
/*
* Check if file_offset page aligned,.
- * Currently we cannot handle misalinged file offsets,
+ * Currently we cannot handle misaligned file offsets,
* and so we read in the entire image (what a waste).
*/
if (file_offset & PAGE_MASK) {
Index: linux_machdep.c
===================================================================
RCS file: /home/cvs/src/sys/i386/linux/linux_machdep.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -L sys/i386/linux/linux_machdep.c -L sys/i386/linux/linux_machdep.c -u -r1.1.1.1 -r1.2
--- sys/i386/linux/linux_machdep.c
+++ sys/i386/linux/linux_machdep.c
@@ -27,22 +27,29 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/i386/linux/linux_machdep.c,v 1.48.2.1 2005/08/04 23:25:32 sobomax Exp $");
+__FBSDID("$FreeBSD: src/sys/i386/linux/linux_machdep.c,v 1.78.2.1 2007/12/05 13:31:57 kib Exp $");
#include <sys/param.h>
#include <sys/systm.h>
+#include <sys/file.h>
+#include <sys/fcntl.h>
#include <sys/imgact.h>
#include <sys/lock.h>
#include <sys/malloc.h>
#include <sys/mman.h>
#include <sys/mutex.h>
+#include <sys/sx.h>
+#include <sys/priv.h>
#include <sys/proc.h>
+#include <sys/queue.h>
#include <sys/resource.h>
#include <sys/resourcevar.h>
#include <sys/signalvar.h>
#include <sys/syscallsubr.h>
#include <sys/sysproto.h>
#include <sys/unistd.h>
+#include <sys/wait.h>
+#include <sys/sched.h>
#include <machine/frame.h>
#include <machine/psl.h>
@@ -58,6 +65,13 @@
#include <compat/linux/linux_ipc.h>
#include <compat/linux/linux_signal.h>
#include <compat/linux/linux_util.h>
+#include <compat/linux/linux_emul.h>
+
+#include <i386/include/pcb.h> /* needed for pcb definition in linux_set_thread_area */
+
+#include "opt_posix.h"
+
+extern struct sysentvec elf32_freebsd_sysvec; /* defined in i386/i386/elf_machdep.c */
struct l_descriptor {
l_uint entry_number;
@@ -122,7 +136,14 @@
free(newpath, M_TEMP);
if (error == 0)
error = kern_execve(td, &eargs, NULL);
- exec_free_args(&eargs);
+ if (error == 0)
+ /* linux process can exec fbsd one, dont attempt
+ * to create emuldata for such process using
+ * linux_proc_init, this leads to a panic on KASSERT
+ * because such process has p->p_emuldata == NULL
+ */
+ if (td->td_proc->p_sysent == &elf_linux_sysvec)
+ error = linux_proc_init(td, 0, 0);
return (error);
}
@@ -277,17 +298,38 @@
linux_fork(struct thread *td, struct linux_fork_args *args)
{
int error;
+ struct proc *p2;
+ struct thread *td2;
#ifdef DEBUG
if (ldebug(fork))
printf(ARGS(fork, ""));
#endif
- if ((error = fork(td, (struct fork_args *)args)) != 0)
+ if ((error = fork1(td, RFFDG | RFPROC | RFSTOPPED, 0, &p2)) != 0)
return (error);
+
+ if (error == 0) {
+ td->td_retval[0] = p2->p_pid;
+ td->td_retval[1] = 0;
+ }
if (td->td_retval[1] == 1)
td->td_retval[0] = 0;
+ error = linux_proc_init(td, td->td_retval[0], 0);
+ if (error)
+ return (error);
+
+ td2 = FIRST_THREAD_IN_PROC(p2);
+
+ /*
+ * Make this runnable after we are finished with it.
+ */
+ thread_lock(td2);
+ TD_SET_CAN_RUN(td2);
+ sched_add(td2, SRQ_BORING);
+ thread_unlock(td2);
+
return (0);
}
@@ -295,28 +337,50 @@
linux_vfork(struct thread *td, struct linux_vfork_args *args)
{
int error;
+ struct proc *p2;
+ struct thread *td2;
#ifdef DEBUG
if (ldebug(vfork))
printf(ARGS(vfork, ""));
#endif
- if ((error = vfork(td, (struct vfork_args *)args)) != 0)
+ /* exclude RFPPWAIT */
+ if ((error = fork1(td, RFFDG | RFPROC | RFMEM | RFSTOPPED, 0, &p2)) != 0)
return (error);
+ if (error == 0) {
+ td->td_retval[0] = p2->p_pid;
+ td->td_retval[1] = 0;
+ }
/* Are we the child? */
if (td->td_retval[1] == 1)
td->td_retval[0] = 0;
- return (0);
-}
+ error = linux_proc_init(td, td->td_retval[0], 0);
+ if (error)
+ return (error);
+
+ PROC_LOCK(p2);
+ p2->p_flag |= P_PPWAIT;
+ PROC_UNLOCK(p2);
+
+ td2 = FIRST_THREAD_IN_PROC(p2);
+
+ /*
+ * Make this runnable after we are finished with it.
+ */
+ thread_lock(td2);
+ TD_SET_CAN_RUN(td2);
+ sched_add(td2, SRQ_BORING);
+ thread_unlock(td2);
-#define CLONE_VM 0x100
-#define CLONE_FS 0x200
-#define CLONE_FILES 0x400
-#define CLONE_SIGHAND 0x800
-#define CLONE_PID 0x1000
-#define CLONE_THREAD 0x10000
+ /* wait for the children to exit, ie. emulate vfork */
+ PROC_LOCK(p2);
+ while (p2->p_flag & P_PPWAIT)
+ msleep(td->td_proc, &p2->p_mtx, PWAIT, "ppwait", 0);
+ PROC_UNLOCK(p2);
-#define THREADING_FLAGS (CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND)
+ return (0);
+}
int
linux_clone(struct thread *td, struct linux_clone_args *args)
@@ -325,31 +389,35 @@
struct proc *p2;
struct thread *td2;
int exit_signal;
+ struct linux_emuldata *em;
#ifdef DEBUG
if (ldebug(clone)) {
- printf(ARGS(clone, "flags %x, stack %x"),
- (unsigned int)args->flags, (unsigned int)args->stack);
- if (args->flags & CLONE_PID)
- printf(LMSG("CLONE_PID not yet supported"));
+ printf(ARGS(clone, "flags %x, stack %x, parent tid: %x, child tid: %x"),
+ (unsigned int)args->flags, (unsigned int)args->stack,
+ (unsigned int)args->parent_tidptr, (unsigned int)args->child_tidptr);
}
#endif
- if (!args->stack)
- return (EINVAL);
-
exit_signal = args->flags & 0x000000ff;
- if (exit_signal >= LINUX_NSIG)
+ if (LINUX_SIG_VALID(exit_signal)) {
+ if (exit_signal <= LINUX_SIGTBLSZ)
+ exit_signal =
+ linux_to_bsd_signal[_SIG_IDX(exit_signal)];
+ } else if (exit_signal != 0)
return (EINVAL);
- if (exit_signal <= LINUX_SIGTBLSZ)
- exit_signal = linux_to_bsd_signal[_SIG_IDX(exit_signal)];
-
- if (args->flags & CLONE_VM)
+ if (args->flags & LINUX_CLONE_VM)
ff |= RFMEM;
- if (args->flags & CLONE_SIGHAND)
+ if (args->flags & LINUX_CLONE_SIGHAND)
ff |= RFSIGSHARE;
- if (!(args->flags & CLONE_FILES))
+ /*
+ * XXX: in linux sharing of fs info (chroot/cwd/umask)
+ * and open files is independant. in fbsd its in one
+ * structure but in reality it doesn't cause any problems
+ * because both of these flags are usually set together.
+ */
+ if (!(args->flags & (LINUX_CLONE_FILES | LINUX_CLONE_FS)))
ff |= RFFDG;
/*
@@ -357,7 +425,7 @@
* kernel threads. Unfortunately despite the existence of the
* CLONE_THREAD flag, version of linuxthreads package used in
* most popular distros as of beginning of 2005 doesn't make
- * any use of it. Therefore, this detection relay fully on
+ * any use of it. Therefore, this detection relies on
* empirical observation that linuxthreads sets certain
* combination of flags, so that we can make more or less
* precise detection and notify the FreeBSD kernel that several
@@ -365,49 +433,161 @@
* that special treatment is necessary for signal delivery
* between those processes and fd locking.
*/
- if ((args->flags & 0xffffff00) == THREADING_FLAGS)
+ if ((args->flags & 0xffffff00) == LINUX_THREADING_FLAGS)
ff |= RFTHREAD;
+ if (args->flags & LINUX_CLONE_PARENT_SETTID)
+ if (args->parent_tidptr == NULL)
+ return (EINVAL);
+
error = fork1(td, ff, 0, &p2);
if (error)
return (error);
+
+ if (args->flags & (LINUX_CLONE_PARENT | LINUX_CLONE_THREAD)) {
+ sx_xlock(&proctree_lock);
+ PROC_LOCK(p2);
+ proc_reparent(p2, td->td_proc->p_pptr);
+ PROC_UNLOCK(p2);
+ sx_xunlock(&proctree_lock);
+ }
+ /* create the emuldata */
+ error = linux_proc_init(td, p2->p_pid, args->flags);
+ /* reference it - no need to check this */
+ em = em_find(p2, EMUL_DOLOCK);
+ KASSERT(em != NULL, ("clone: emuldata not found.\n"));
+ /* and adjust it */
+
+ if (args->flags & LINUX_CLONE_THREAD) {
+ /* XXX: linux mangles pgrp and pptr somehow
+ * I think it might be this but I am not sure.
+ */
+#ifdef notyet
+ PROC_LOCK(p2);
+ p2->p_pgrp = td->td_proc->p_pgrp;
+ PROC_UNLOCK(p2);
+#endif
+ exit_signal = 0;
+ }
+
+ if (args->flags & LINUX_CLONE_CHILD_SETTID)
+ em->child_set_tid = args->child_tidptr;
+ else
+ em->child_set_tid = NULL;
+
+ if (args->flags & LINUX_CLONE_CHILD_CLEARTID)
+ em->child_clear_tid = args->child_tidptr;
+ else
+ em->child_clear_tid = NULL;
+
+ EMUL_UNLOCK(&emul_lock);
+
+ if (args->flags & LINUX_CLONE_PARENT_SETTID) {
+ error = copyout(&p2->p_pid, args->parent_tidptr, sizeof(p2->p_pid));
+ if (error)
+ printf(LMSG("copyout failed!"));
+ }
PROC_LOCK(p2);
p2->p_sigparent = exit_signal;
PROC_UNLOCK(p2);
td2 = FIRST_THREAD_IN_PROC(p2);
- td2->td_frame->tf_esp = (unsigned int)args->stack;
+ /*
+ * in a case of stack = NULL we are supposed to COW calling process stack
+ * this is what normal fork() does so we just keep the tf_esp arg intact
+ */
+ if (args->stack)
+ td2->td_frame->tf_esp = (unsigned int)args->stack;
+
+ if (args->flags & LINUX_CLONE_SETTLS) {
+ struct l_user_desc info;
+ int idx;
+ int a[2];
+ struct segment_descriptor sd;
+
+ error = copyin((void *)td->td_frame->tf_esi, &info, sizeof(struct l_user_desc));
+ if (error) {
+ printf(LMSG("copyin failed!"));
+ } else {
+
+ idx = info.entry_number;
+
+ /*
+ * looks like we're getting the idx we returned
+ * in the set_thread_area() syscall
+ */
+ if (idx != 6 && idx != 3) {
+ printf(LMSG("resetting idx!"));
+ idx = 3;
+ }
+
+ /* this doesnt happen in practice */
+ if (idx == 6) {
+ /* we might copy out the entry_number as 3 */
+ info.entry_number = 3;
+ error = copyout(&info, (void *) td->td_frame->tf_esi, sizeof(struct l_user_desc));
+ if (error)
+ printf(LMSG("copyout failed!"));
+ }
+
+ a[0] = LINUX_LDT_entry_a(&info);
+ a[1] = LINUX_LDT_entry_b(&info);
+
+ memcpy(&sd, &a, sizeof(a));
+#ifdef DEBUG
+ if (ldebug(clone))
+ printf("Segment created in clone with CLONE_SETTLS: lobase: %x, hibase: %x, lolimit: %x, hilimit: %x, type: %i, dpl: %i, p: %i, xx: %i, def32: %i, gran: %i\n", sd.sd_lobase,
+ sd.sd_hibase,
+ sd.sd_lolimit,
+ sd.sd_hilimit,
+ sd.sd_type,
+ sd.sd_dpl,
+ sd.sd_p,
+ sd.sd_xx,
+ sd.sd_def32,
+ sd.sd_gran);
+#endif
+
+ /* set %gs */
+ td2->td_pcb->pcb_gsd = sd;
+ td2->td_pcb->pcb_gs = GSEL(GUGS_SEL, SEL_UPL);
+ }
+ }
#ifdef DEBUG
if (ldebug(clone))
printf(LMSG("clone: successful rfork to %ld, stack %p sig = %d"),
(long)p2->p_pid, args->stack, exit_signal);
#endif
+ if (args->flags & LINUX_CLONE_VFORK) {
+ PROC_LOCK(p2);
+ p2->p_flag |= P_PPWAIT;
+ PROC_UNLOCK(p2);
+ }
/*
* Make this runnable after we are finished with it.
*/
- mtx_lock_spin(&sched_lock);
+ thread_lock(td2);
TD_SET_CAN_RUN(td2);
- setrunqueue(td2, SRQ_BORING);
- mtx_unlock_spin(&sched_lock);
+ sched_add(td2, SRQ_BORING);
+ thread_unlock(td2);
td->td_retval[0] = p2->p_pid;
td->td_retval[1] = 0;
+
+ if (args->flags & LINUX_CLONE_VFORK) {
+ /* wait for the children to exit, ie. emulate vfork */
+ PROC_LOCK(p2);
+ while (p2->p_flag & P_PPWAIT)
+ msleep(td->td_proc, &p2->p_mtx, PWAIT, "ppwait", 0);
+ PROC_UNLOCK(p2);
+ }
+
return (0);
}
-/* XXX move */
-struct l_mmap_argv {
- l_caddr_t addr;
- l_int len;
- l_int prot;
- l_int flags;
- l_int fd;
- l_int pos;
-};
-
#define STACK_SIZE (2 * 1024 * 1024)
#define GUARD_SIZE (4 * PAGE_SIZE)
@@ -425,12 +605,12 @@
args->flags, args->fd, args->pgoff);
#endif
- linux_args.addr = (l_caddr_t)args->addr;
+ linux_args.addr = args->addr;
linux_args.len = args->len;
linux_args.prot = args->prot;
linux_args.flags = args->flags;
linux_args.fd = args->fd;
- linux_args.pos = args->pgoff * PAGE_SIZE;
+ linux_args.pgoff = args->pgoff * PAGE_SIZE;
return (linux_mmap_common(td, &linux_args));
}
@@ -449,7 +629,7 @@
if (ldebug(mmap))
printf(ARGS(mmap, "%p, %d, %d, 0x%08x, %d, %d"),
(void *)linux_args.addr, linux_args.len, linux_args.prot,
- linux_args.flags, linux_args.fd, linux_args.pos);
+ linux_args.flags, linux_args.fd, linux_args.pgoff);
#endif
return (linux_mmap_common(td, &linux_args));
@@ -469,9 +649,20 @@
off_t pos;
} */ bsd_args;
int error;
+ struct file *fp;
error = 0;
bsd_args.flags = 0;
+ fp = NULL;
+
+ /*
+ * Linux mmap(2):
+ * You must specify exactly one of MAP_SHARED and MAP_PRIVATE
+ */
+ if (! ((linux_args->flags & LINUX_MAP_SHARED) ^
+ (linux_args->flags & LINUX_MAP_PRIVATE)))
+ return (EINVAL);
+
if (linux_args->flags & LINUX_MAP_SHARED)
bsd_args.flags |= MAP_SHARED;
if (linux_args->flags & LINUX_MAP_PRIVATE)
@@ -482,10 +673,47 @@
bsd_args.flags |= MAP_ANON;
else
bsd_args.flags |= MAP_NOSYNC;
- if (linux_args->flags & LINUX_MAP_GROWSDOWN) {
+ if (linux_args->flags & LINUX_MAP_GROWSDOWN)
bsd_args.flags |= MAP_STACK;
- /* The linux MAP_GROWSDOWN option does not limit auto
+ /*
+ * PROT_READ, PROT_WRITE, or PROT_EXEC implies PROT_READ and PROT_EXEC
+ * on Linux/i386. We do this to ensure maximum compatibility.
+ * Linux/ia64 does the same in i386 emulation mode.
+ */
+ bsd_args.prot = linux_args->prot;
+ if (bsd_args.prot & (PROT_READ | PROT_WRITE | PROT_EXEC))
+ bsd_args.prot |= PROT_READ | PROT_EXEC;
+
+ /* Linux does not check file descriptor when MAP_ANONYMOUS is set. */
+ bsd_args.fd = (bsd_args.flags & MAP_ANON) ? -1 : linux_args->fd;
+ if (bsd_args.fd != -1) {
+ /*
+ * Linux follows Solaris mmap(2) description:
+ * The file descriptor fildes is opened with
+ * read permission, regardless of the
+ * protection options specified.
+ */
+
+ if ((error = fget(td, bsd_args.fd, &fp)) != 0)
+ return (error);
+ if (fp->f_type != DTYPE_VNODE) {
+ fdrop(fp, td);
+ return (EINVAL);
+ }
+
+ /* Linux mmap() just fails for O_WRONLY files */
+ if (!(fp->f_flag & FREAD)) {
+ fdrop(fp, td);
+ return (EACCES);
+ }
+
+ fdrop(fp, td);
+ }
+
+ if (linux_args->flags & LINUX_MAP_GROWSDOWN) {
+ /*
+ * The linux MAP_GROWSDOWN option does not limit auto
* growth of the region. Linux mmap with this option
* takes as addr the inital BOS, and as len, the initial
* region size. It can then grow down from addr without
@@ -498,7 +726,7 @@
* Our mmap with MAP_STACK takes addr as the maximum
* downsize limit on BOS, and as len the max size of
* the region. It them maps the top SGROWSIZ bytes,
- * and autgrows the region down, up to the limit
+ * and auto grows the region down, up to the limit
* in addr.
*
* If we don't use the MAP_STACK option, the effect
@@ -506,11 +734,10 @@
* fixed size of (STACK_SIZE - GUARD_SIZE).
*/
- /* This gives us TOS */
- bsd_args.addr = linux_args->addr + linux_args->len;
-
- if (bsd_args.addr > p->p_vmspace->vm_maxsaddr) {
- /* Some linux apps will attempt to mmap
+ if ((caddr_t)PTRIN(linux_args->addr) + linux_args->len >
+ p->p_vmspace->vm_maxsaddr) {
+ /*
+ * Some linux apps will attempt to mmap
* thread stacks near the top of their
* address space. If their TOS is greater
* than vm_maxsaddr, vm_map_growstack()
@@ -537,25 +764,20 @@
else
bsd_args.len = STACK_SIZE - GUARD_SIZE;
- /* This gives us a new BOS. If we're using VM_STACK, then
+ /*
+ * This gives us a new BOS. If we're using VM_STACK, then
* mmap will just map the top SGROWSIZ bytes, and let
* the stack grow down to the limit at BOS. If we're
* not using VM_STACK we map the full stack, since we
* don't have a way to autogrow it.
*/
- bsd_args.addr -= bsd_args.len;
+ bsd_args.addr = (caddr_t)PTRIN(linux_args->addr) -
+ bsd_args.len;
} else {
- bsd_args.addr = linux_args->addr;
+ bsd_args.addr = (caddr_t)PTRIN(linux_args->addr);
bsd_args.len = linux_args->len;
}
-
- bsd_args.prot = linux_args->prot | PROT_READ; /* always required */
- if (linux_args->flags & LINUX_MAP_ANON)
- bsd_args.fd = -1;
- else
- bsd_args.fd = linux_args->fd;
- bsd_args.pos = linux_args->pos;
- bsd_args.pad = 0;
+ bsd_args.pos = linux_args->pgoff;
#ifdef DEBUG
if (ldebug(mmap))
@@ -574,6 +796,19 @@
}
int
+linux_mprotect(struct thread *td, struct linux_mprotect_args *uap)
+{
+ struct mprotect_args bsd_args;
+
+ bsd_args.addr = uap->addr;
+ bsd_args.len = uap->len;
+ bsd_args.prot = uap->prot;
+ if (bsd_args.prot & (PROT_READ | PROT_WRITE | PROT_EXEC))
+ bsd_args.prot |= PROT_READ | PROT_EXEC;
+ return (mprotect(td, &bsd_args));
+}
+
+int
linux_pipe(struct thread *td, struct linux_pipe_args *args)
{
int error;
@@ -611,9 +846,7 @@
iia.start = args->start;
iia.length = args->length;
iia.enable = args->enable;
- mtx_lock(&Giant);
error = i386_set_ioperm(td, &iia);
- mtx_unlock(&Giant);
return (error);
}
@@ -624,7 +857,7 @@
if (args->level < 0 || args->level > 3)
return (EINVAL);
- if ((error = suser(td)) != 0)
+ if ((error = priv_check(td, PRIV_IO)) != 0)
return (error);
if ((error = securelevel_gt(td->td_ucred, 0)) != 0)
return (error);
@@ -640,6 +873,7 @@
struct i386_ldt_args ldt;
struct l_descriptor ld;
union descriptor desc;
+ int size, written;
if (uap->ptr == NULL)
return (EINVAL);
@@ -649,10 +883,16 @@
ldt.start = 0;
ldt.descs = uap->ptr;
ldt.num = uap->bytecount / sizeof(union descriptor);
- mtx_lock(&Giant);
error = i386_get_ldt(td, &ldt);
td->td_retval[0] *= sizeof(union descriptor);
- mtx_unlock(&Giant);
+ break;
+ case 0x02: /* read_default_ldt = 0 */
+ size = 5*sizeof(struct l_desc_struct);
+ if (size > uap->bytecount)
+ size = uap->bytecount;
+ for (written = error = 0; written < size && error == 0; written++)
+ error = subyte((char *)uap->ptr + written, 0);
+ td->td_retval[0] = written;
break;
case 0x01: /* write_ldt */
case 0x11: /* write_ldt */
@@ -677,9 +917,7 @@
desc.sd.sd_xx = 0;
desc.sd.sd_def32 = ld.seg_32bit;
desc.sd.sd_gran = ld.limit_in_pages;
- mtx_lock(&Giant);
error = i386_set_ldt(td, &ldt, &desc);
- mtx_unlock(&Giant);
break;
default:
error = EINVAL;
@@ -840,7 +1078,6 @@
#endif
sa.fd = args->fd;
- sa.pad = 0;
sa.length = args->length;
return ftruncate(td, &sa);
}
@@ -848,25 +1085,241 @@
int
linux_set_thread_area(struct thread *td, struct linux_set_thread_area_args *args)
{
- /*
- * Return an error code instead of raising a SIGSYS so that
- * the caller will fall back to simpler LDT methods.
+ struct l_user_desc info;
+ int error;
+ int idx;
+ int a[2];
+ struct segment_descriptor sd;
+
+ error = copyin(args->desc, &info, sizeof(struct l_user_desc));
+ if (error)
+ return (error);
+
+#ifdef DEBUG
+ if (ldebug(set_thread_area))
+ printf(ARGS(set_thread_area, "%i, %x, %x, %i, %i, %i, %i, %i, %i\n"),
+ info.entry_number,
+ info.base_addr,
+ info.limit,
+ info.seg_32bit,
+ info.contents,
+ info.read_exec_only,
+ info.limit_in_pages,
+ info.seg_not_present,
+ info.useable);
+#endif
+
+ idx = info.entry_number;
+ /*
+ * Semantics of linux version: every thread in the system has array of
+ * 3 tls descriptors. 1st is GLIBC TLS, 2nd is WINE, 3rd unknown. This
+ * syscall loads one of the selected tls decriptors with a value and
+ * also loads GDT descriptors 6, 7 and 8 with the content of the
+ * per-thread descriptors.
+ *
+ * Semantics of fbsd version: I think we can ignore that linux has 3
+ * per-thread descriptors and use just the 1st one. The tls_array[]
+ * is used only in set/get-thread_area() syscalls and for loading the
+ * GDT descriptors. In fbsd we use just one GDT descriptor for TLS so
+ * we will load just one.
+ *
+ * XXX: this doesn't work when a user space process tries to use more
+ * than 1 TLS segment. Comment in the linux sources says wine might do
+ * this.
*/
- return (ENOSYS);
+
+ /*
+ * we support just GLIBC TLS now
+ * we should let 3 proceed as well because we use this segment so
+ * if code does two subsequent calls it should succeed
+ */
+ if (idx != 6 && idx != -1 && idx != 3)
+ return (EINVAL);
+
+ /*
+ * we have to copy out the GDT entry we use
+ * FreeBSD uses GDT entry #3 for storing %gs so load that
+ *
+ * XXX: what if a user space program doesn't check this value and tries
+ * to use 6, 7 or 8?
+ */
+ idx = info.entry_number = 3;
+ error = copyout(&info, args->desc, sizeof(struct l_user_desc));
+ if (error)
+ return (error);
+
+ if (LINUX_LDT_empty(&info)) {
+ a[0] = 0;
+ a[1] = 0;
+ } else {
+ a[0] = LINUX_LDT_entry_a(&info);
+ a[1] = LINUX_LDT_entry_b(&info);
+ }
+
+ memcpy(&sd, &a, sizeof(a));
+#ifdef DEBUG
+ if (ldebug(set_thread_area))
+ printf("Segment created in set_thread_area: lobase: %x, hibase: %x, lolimit: %x, hilimit: %x, type: %i, dpl: %i, p: %i, xx: %i, def32: %i, gran: %i\n", sd.sd_lobase,
+ sd.sd_hibase,
+ sd.sd_lolimit,
+ sd.sd_hilimit,
+ sd.sd_type,
+ sd.sd_dpl,
+ sd.sd_p,
+ sd.sd_xx,
+ sd.sd_def32,
+ sd.sd_gran);
+#endif
+
+ /* this is taken from i386 version of cpu_set_user_tls() */
+ critical_enter();
+ /* set %gs */
+ td->td_pcb->pcb_gsd = sd;
+ PCPU_GET(fsgs_gdt)[1] = sd;
+ load_gs(GSEL(GUGS_SEL, SEL_UPL));
+ critical_exit();
+
+ return (0);
}
int
-linux_gettid(struct thread *td, struct linux_gettid_args *args)
+linux_get_thread_area(struct thread *td, struct linux_get_thread_area_args *args)
{
+
+ struct l_user_desc info;
+ int error;
+ int idx;
+ struct l_desc_struct desc;
+ struct segment_descriptor sd;
+
+#ifdef DEBUG
+ if (ldebug(get_thread_area))
+ printf(ARGS(get_thread_area, "%p"), args->desc);
+#endif
+
+ error = copyin(args->desc, &info, sizeof(struct l_user_desc));
+ if (error)
+ return (error);
+
+ idx = info.entry_number;
+ /* XXX: I am not sure if we want 3 to be allowed too. */
+ if (idx != 6 && idx != 3)
+ return (EINVAL);
+
+ idx = 3;
+
+ memset(&info, 0, sizeof(info));
+
+ sd = PCPU_GET(fsgs_gdt)[1];
+
+ memcpy(&desc, &sd, sizeof(desc));
+
+ info.entry_number = idx;
+ info.base_addr = LINUX_GET_BASE(&desc);
+ info.limit = LINUX_GET_LIMIT(&desc);
+ info.seg_32bit = LINUX_GET_32BIT(&desc);
+ info.contents = LINUX_GET_CONTENTS(&desc);
+ info.read_exec_only = !LINUX_GET_WRITABLE(&desc);
+ info.limit_in_pages = LINUX_GET_LIMIT_PAGES(&desc);
+ info.seg_not_present = !LINUX_GET_PRESENT(&desc);
+ info.useable = LINUX_GET_USEABLE(&desc);
+
+ error = copyout(&info, args->desc, sizeof(struct l_user_desc));
+ if (error)
+ return (EFAULT);
- td->td_retval[0] = td->td_proc->p_pid;
return (0);
}
+/* copied from kern/kern_time.c */
+int
+linux_timer_create(struct thread *td, struct linux_timer_create_args *args)
+{
+ return ktimer_create(td, (struct ktimer_create_args *) args);
+}
+
int
-linux_tkill(struct thread *td, struct linux_tkill_args *args)
+linux_timer_settime(struct thread *td, struct linux_timer_settime_args *args)
{
+ return ktimer_settime(td, (struct ktimer_settime_args *) args);
+}
+
+int
+linux_timer_gettime(struct thread *td, struct linux_timer_gettime_args *args)
+{
+ return ktimer_gettime(td, (struct ktimer_gettime_args *) args);
+}
- return (linux_kill(td, (struct linux_kill_args *) args));
+int
+linux_timer_getoverrun(struct thread *td, struct linux_timer_getoverrun_args *args)
+{
+ return ktimer_getoverrun(td, (struct ktimer_getoverrun_args *) args);
+}
+
+int
+linux_timer_delete(struct thread *td, struct linux_timer_delete_args *args)
+{
+ return ktimer_delete(td, (struct ktimer_delete_args *) args);
+}
+
+/* XXX: this wont work with module - convert it */
+int
+linux_mq_open(struct thread *td, struct linux_mq_open_args *args)
+{
+#ifdef P1003_1B_MQUEUE
+ return kmq_open(td, (struct kmq_open_args *) args);
+#else
+ return (ENOSYS);
+#endif
+}
+
+int
+linux_mq_unlink(struct thread *td, struct linux_mq_unlink_args *args)
+{
+#ifdef P1003_1B_MQUEUE
+ return kmq_unlink(td, (struct kmq_unlink_args *) args);
+#else
+ return (ENOSYS);
+#endif
+}
+
+int
+linux_mq_timedsend(struct thread *td, struct linux_mq_timedsend_args *args)
+{
+#ifdef P1003_1B_MQUEUE
+ return kmq_timedsend(td, (struct kmq_timedsend_args *) args);
+#else
+ return (ENOSYS);
+#endif
+}
+
+int
+linux_mq_timedreceive(struct thread *td, struct linux_mq_timedreceive_args *args)
+{
+#ifdef P1003_1B_MQUEUE
+ return kmq_timedreceive(td, (struct kmq_timedreceive_args *) args);
+#else
+ return (ENOSYS);
+#endif
+}
+
+int
+linux_mq_notify(struct thread *td, struct linux_mq_notify_args *args)
+{
+#ifdef P1003_1B_MQUEUE
+ return kmq_notify(td, (struct kmq_notify_args *) args);
+#else
+ return (ENOSYS);
+#endif
+}
+
+int
+linux_mq_getsetattr(struct thread *td, struct linux_mq_getsetattr_args *args)
+{
+#ifdef P1003_1B_MQUEUE
+ return kmq_setattr(td, (struct kmq_setattr_args *) args);
+#else
+ return (ENOSYS);
+#endif
}
Index: linux_syscall.h
===================================================================
RCS file: /home/cvs/src/sys/i386/linux/linux_syscall.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -L sys/i386/linux/linux_syscall.h -L sys/i386/linux/linux_syscall.h -u -r1.1.1.1 -r1.2
--- sys/i386/linux/linux_syscall.h
+++ sys/i386/linux/linux_syscall.h
@@ -2,8 +2,8 @@
* System call numbers.
*
* DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/i386/linux/linux_syscall.h,v 1.58.2.1 2005/07/20 17:43:53 jhb Exp $
- * created from FreeBSD: src/sys/i386/linux/syscalls.master,v 1.61.2.1 2005/07/20 17:42:15 jhb Exp
+ * $FreeBSD: src/sys/i386/linux/linux_syscall.h,v 1.87 2007/09/18 19:51:49 dwmalone Exp $
+ * created from FreeBSD: src/sys/i386/linux/syscalls.master,v 1.89 2007/09/18 19:50:33 dwmalone Exp
*/
#define LINUX_SYS_exit 1
@@ -61,7 +61,7 @@
#define LINUX_SYS_chroot 61
#define LINUX_SYS_linux_ustat 62
#define LINUX_SYS_dup2 63
-#define LINUX_SYS_getppid 64
+#define LINUX_SYS_linux_getppid 64
#define LINUX_SYS_getpgrp 65
#define LINUX_SYS_setsid 66
#define LINUX_SYS_linux_sigaction 67
@@ -71,7 +71,7 @@
#define LINUX_SYS_linux_setregid16 71
#define LINUX_SYS_linux_sigsuspend 72
#define LINUX_SYS_linux_sigpending 73
-#define LINUX_SYS_osethostname 74
+#define LINUX_SYS_linux_sethostname 74
#define LINUX_SYS_linux_setrlimit 75
#define LINUX_SYS_linux_old_getrlimit 76
#define LINUX_SYS_getrusage 77
@@ -81,7 +81,7 @@
#define LINUX_SYS_linux_setgroups16 81
#define LINUX_SYS_linux_old_select 82
#define LINUX_SYS_linux_symlink 83
-#define LINUX_SYS_ostat 84
+#define LINUX_SYS_linux_lstat 84
#define LINUX_SYS_linux_readlink 85
#define LINUX_SYS_linux_uselib 86
#define LINUX_SYS_swapon 87
@@ -90,7 +90,7 @@
#define LINUX_SYS_linux_mmap 90
#define LINUX_SYS_munmap 91
#define LINUX_SYS_linux_truncate 92
-#define LINUX_SYS_oftruncate 93
+#define LINUX_SYS_linux_ftruncate 93
#define LINUX_SYS_fchmod 94
#define LINUX_SYS_fchown 95
#define LINUX_SYS_linux_getpriority 96
@@ -120,7 +120,7 @@
#define LINUX_SYS_linux_newuname 122
#define LINUX_SYS_linux_modify_ldt 123
#define LINUX_SYS_linux_adjtimex 124
-#define LINUX_SYS_mprotect 125
+#define LINUX_SYS_linux_mprotect 125
#define LINUX_SYS_linux_sigprocmask 126
#define LINUX_SYS_linux_create_module 127
#define LINUX_SYS_linux_init_module 128
@@ -156,7 +156,7 @@
#define LINUX_SYS_linux_sched_get_priority_max 159
#define LINUX_SYS_linux_sched_get_priority_min 160
#define LINUX_SYS_sched_rr_get_interval 161
-#define LINUX_SYS_nanosleep 162
+#define LINUX_SYS_linux_nanosleep 162
#define LINUX_SYS_linux_mremap 163
#define LINUX_SYS_linux_setresuid16 164
#define LINUX_SYS_linux_getresuid16 165
@@ -227,7 +227,66 @@
#define LINUX_SYS_linux_lremovexattr 236
#define LINUX_SYS_linux_fremovexattr 237
#define LINUX_SYS_linux_tkill 238
+#define LINUX_SYS_linux_sys_futex 240
+#define LINUX_SYS_linux_sched_getaffinity 242
#define LINUX_SYS_linux_set_thread_area 243
+#define LINUX_SYS_linux_get_thread_area 244
#define LINUX_SYS_linux_fadvise64 250
-#define LINUX_SYS_exit_group 252
-#define LINUX_SYS_MAXSYSCALL 268
+#define LINUX_SYS_linux_exit_group 252
+#define LINUX_SYS_linux_lookup_dcookie 253
+#define LINUX_SYS_linux_epoll_create 254
+#define LINUX_SYS_linux_epoll_ctl 255
+#define LINUX_SYS_linux_epoll_wait 256
+#define LINUX_SYS_linux_remap_file_pages 257
+#define LINUX_SYS_linux_set_tid_address 258
+#define LINUX_SYS_linux_timer_create 259
+#define LINUX_SYS_linux_timer_settime 260
+#define LINUX_SYS_linux_timer_gettime 261
+#define LINUX_SYS_linux_timer_getoverrun 262
+#define LINUX_SYS_linux_timer_delete 263
+#define LINUX_SYS_linux_clock_settime 264
+#define LINUX_SYS_linux_clock_gettime 265
+#define LINUX_SYS_linux_clock_getres 266
+#define LINUX_SYS_linux_clock_nanosleep 267
+#define LINUX_SYS_linux_statfs64 268
+#define LINUX_SYS_linux_fstatfs64 269
+#define LINUX_SYS_linux_tgkill 270
+#define LINUX_SYS_linux_utimes 271
+#define LINUX_SYS_linux_fadvise64_64 272
+#define LINUX_SYS_linux_mbind 274
+#define LINUX_SYS_linux_get_mempolicy 275
+#define LINUX_SYS_linux_set_mempolicy 276
+#define LINUX_SYS_linux_mq_open 277
+#define LINUX_SYS_linux_mq_unlink 278
+#define LINUX_SYS_linux_mq_timedsend 279
+#define LINUX_SYS_linux_mq_timedreceive 280
+#define LINUX_SYS_linux_mq_notify 281
+#define LINUX_SYS_linux_mq_getsetattr 282
+#define LINUX_SYS_linux_kexec_load 283
+#define LINUX_SYS_linux_waitid 284
+#define LINUX_SYS_linux_add_key 286
+#define LINUX_SYS_linux_request_key 287
+#define LINUX_SYS_linux_keyctl 288
+#define LINUX_SYS_linux_ioprio_set 289
+#define LINUX_SYS_linux_ioprio_get 290
+#define LINUX_SYS_linux_inotify_init 291
+#define LINUX_SYS_linux_inotify_add_watch 292
+#define LINUX_SYS_linux_inotify_rm_watch 293
+#define LINUX_SYS_linux_migrate_pages 294
+#define LINUX_SYS_linux_openat 295
+#define LINUX_SYS_linux_mkdirat 296
+#define LINUX_SYS_linux_mknodat 297
+#define LINUX_SYS_linux_fchownat 298
+#define LINUX_SYS_linux_futimesat 299
+#define LINUX_SYS_linux_fstatat64 300
+#define LINUX_SYS_linux_unlinkat 301
+#define LINUX_SYS_linux_renameat 302
+#define LINUX_SYS_linux_linkat 303
+#define LINUX_SYS_linux_symlinkat 304
+#define LINUX_SYS_linux_readlinkat 305
+#define LINUX_SYS_linux_fchmodat 306
+#define LINUX_SYS_linux_faccessat 307
+#define LINUX_SYS_linux_pselect6 308
+#define LINUX_SYS_linux_ppoll 309
+#define LINUX_SYS_linux_unshare 310
+#define LINUX_SYS_MAXSYSCALL 311
Index: linux_proto.h
===================================================================
RCS file: /home/cvs/src/sys/i386/linux/linux_proto.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -L sys/i386/linux/linux_proto.h -L sys/i386/linux/linux_proto.h -u -r1.1.1.1 -r1.2
--- sys/i386/linux/linux_proto.h
+++ sys/i386/linux/linux_proto.h
@@ -2,8 +2,8 @@
* System call prototypes.
*
* DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/i386/linux/linux_proto.h,v 1.64.2.1 2005/07/20 17:43:53 jhb Exp $
- * created from FreeBSD: src/sys/i386/linux/syscalls.master,v 1.61.2.1 2005/07/20 17:42:15 jhb Exp
+ * $FreeBSD: src/sys/i386/linux/linux_proto.h,v 1.95 2007/09/18 19:51:49 dwmalone Exp $
+ * created from FreeBSD: src/sys/i386/linux/syscalls.master,v 1.89 2007/09/18 19:50:33 dwmalone Exp
*/
#ifndef _LINUX_SYSPROTO_H_
@@ -11,12 +11,11 @@
#include <sys/signal.h>
#include <sys/acl.h>
-#include <sys/thr.h>
-#include <sys/umtx.h>
-#include <posix4/_semaphore.h>
-
+#include <sys/_semaphore.h>
#include <sys/ucontext.h>
+#include <bsm/audit_kevents.h>
+
struct proc;
struct thread;
@@ -84,7 +83,7 @@
};
struct linux_stat_args {
char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
- char up_l_[PADL_(struct ostat *)]; struct ostat * up; char up_r_[PADR_(struct ostat *)];
+ char up_l_[PADL_(struct linux_stat *)]; struct linux_stat * up; char up_r_[PADR_(struct linux_stat *)];
};
struct linux_lseek_args {
char fdes_l_[PADL_(l_uint)]; l_uint fdes; char fdes_r_[PADR_(l_uint)];
@@ -124,7 +123,7 @@
};
struct linux_fstat_args {
char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)];
- char up_l_[PADL_(struct ostat *)]; struct ostat * up; char up_r_[PADR_(struct ostat *)];
+ char up_l_[PADL_(struct linux_stat *)]; struct linux_stat * up; char up_r_[PADR_(struct linux_stat *)];
};
struct linux_pause_args {
register_t dummy;
@@ -201,6 +200,9 @@
char dev_l_[PADL_(l_dev_t)]; l_dev_t dev; char dev_r_[PADR_(l_dev_t)];
char ubuf_l_[PADL_(struct l_ustat *)]; struct l_ustat * ubuf; char ubuf_r_[PADR_(struct l_ustat *)];
};
+struct linux_getppid_args {
+ register_t dummy;
+};
struct linux_sigaction_args {
char sig_l_[PADL_(l_int)]; l_int sig; char sig_r_[PADR_(l_int)];
char nsa_l_[PADL_(l_osigaction_t *)]; l_osigaction_t * nsa; char nsa_r_[PADR_(l_osigaction_t *)];
@@ -228,6 +230,10 @@
struct linux_sigpending_args {
char mask_l_[PADL_(l_osigset_t *)]; l_osigset_t * mask; char mask_r_[PADR_(l_osigset_t *)];
};
+struct linux_sethostname_args {
+ char hostname_l_[PADL_(char *)]; char * hostname; char hostname_r_[PADR_(char *)];
+ char len_l_[PADL_(u_int)]; u_int len; char len_r_[PADR_(u_int)];
+};
struct linux_setrlimit_args {
char resource_l_[PADL_(l_uint)]; l_uint resource; char resource_r_[PADR_(l_uint)];
char rlim_l_[PADL_(struct l_rlimit *)]; struct l_rlimit * rlim; char rlim_r_[PADR_(struct l_rlimit *)];
@@ -251,6 +257,10 @@
char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
char to_l_[PADL_(char *)]; char * to; char to_r_[PADR_(char *)];
};
+struct linux_lstat_args {
+ char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char up_l_[PADL_(struct ostat *)]; struct ostat * up; char up_r_[PADR_(struct ostat *)];
+};
struct linux_readlink_args {
char name_l_[PADL_(char *)]; char * name; char name_r_[PADR_(char *)];
char buf_l_[PADL_(char *)]; char * buf; char buf_r_[PADR_(char *)];
@@ -277,6 +287,10 @@
char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
char length_l_[PADL_(l_ulong)]; l_ulong length; char length_r_[PADR_(l_ulong)];
};
+struct linux_ftruncate_args {
+ char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
+ char length_l_[PADL_(long)]; long length; char length_r_[PADR_(long)];
+};
struct linux_getpriority_args {
char which_l_[PADL_(int)]; int which; char which_r_[PADR_(int)];
char who_l_[PADL_(int)]; int who; char who_r_[PADR_(int)];
@@ -362,6 +376,9 @@
struct linux_clone_args {
char flags_l_[PADL_(l_int)]; l_int flags; char flags_r_[PADR_(l_int)];
char stack_l_[PADL_(void *)]; void * stack; char stack_r_[PADR_(void *)];
+ char parent_tidptr_l_[PADL_(void *)]; void * parent_tidptr; char parent_tidptr_r_[PADR_(void *)];
+ char dummy_l_[PADL_(int)]; int dummy; char dummy_r_[PADR_(int)];
+ char child_tidptr_l_[PADL_(void *)]; void * child_tidptr; char child_tidptr_r_[PADR_(void *)];
};
struct linux_newuname_args {
char buf_l_[PADL_(struct l_new_utsname *)]; struct l_new_utsname * buf; char buf_r_[PADR_(struct l_new_utsname *)];
@@ -374,6 +391,11 @@
struct linux_adjtimex_args {
register_t dummy;
};
+struct linux_mprotect_args {
+ char addr_l_[PADL_(caddr_t)]; caddr_t addr; char addr_r_[PADR_(caddr_t)];
+ char len_l_[PADL_(int)]; int len; char len_r_[PADR_(int)];
+ char prot_l_[PADL_(int)]; int prot; char prot_r_[PADR_(int)];
+};
struct linux_sigprocmask_args {
char how_l_[PADL_(l_int)]; l_int how; char how_r_[PADR_(l_int)];
char mask_l_[PADL_(l_osigset_t *)]; l_osigset_t * mask; char mask_r_[PADR_(l_osigset_t *)];
@@ -458,6 +480,10 @@
struct linux_sched_get_priority_min_args {
char policy_l_[PADL_(l_int)]; l_int policy; char policy_r_[PADR_(l_int)];
};
+struct linux_nanosleep_args {
+ char rqtp_l_[PADL_(const struct l_timespec *)]; const struct l_timespec * rqtp; char rqtp_r_[PADR_(const struct l_timespec *)];
+ char rmtp_l_[PADL_(struct l_timespec *)]; struct l_timespec * rmtp; char rmtp_r_[PADR_(struct l_timespec *)];
+};
struct linux_mremap_args {
char addr_l_[PADL_(l_ulong)]; l_ulong addr; char addr_r_[PADR_(l_ulong)];
char old_len_l_[PADL_(l_ulong)]; l_ulong old_len; char old_len_r_[PADR_(l_ulong)];
@@ -495,7 +521,11 @@
char sgid_l_[PADL_(l_gid16_t *)]; l_gid16_t * sgid; char sgid_r_[PADR_(l_gid16_t *)];
};
struct linux_prctl_args {
- register_t dummy;
+ char option_l_[PADL_(l_int)]; l_int option; char option_r_[PADR_(l_int)];
+ char arg2_l_[PADL_(l_int)]; l_int arg2; char arg2_r_[PADR_(l_int)];
+ char arg3_l_[PADL_(l_int)]; l_int arg3; char arg3_r_[PADR_(l_int)];
+ char arg4_l_[PADL_(l_int)]; l_int arg4; char arg4_r_[PADR_(l_int)];
+ char arg5_l_[PADL_(l_int)]; l_int arg5; char arg5_r_[PADR_(l_int)];
};
struct linux_rt_sigreturn_args {
char ucp_l_[PADL_(struct l_ucontext *)]; struct l_ucontext * ucp; char ucp_r_[PADR_(struct l_ucontext *)];
@@ -513,10 +543,14 @@
char sigsetsize_l_[PADL_(l_size_t)]; l_size_t sigsetsize; char sigsetsize_r_[PADR_(l_size_t)];
};
struct linux_rt_sigpending_args {
- register_t dummy;
+ char set_l_[PADL_(l_sigset_t *)]; l_sigset_t * set; char set_r_[PADR_(l_sigset_t *)];
+ char sigsetsize_l_[PADL_(l_size_t)]; l_size_t sigsetsize; char sigsetsize_r_[PADR_(l_size_t)];
};
struct linux_rt_sigtimedwait_args {
- register_t dummy;
+ char mask_l_[PADL_(l_sigset_t *)]; l_sigset_t * mask; char mask_r_[PADR_(l_sigset_t *)];
+ char ptr_l_[PADL_(l_siginfo_t *)]; l_siginfo_t * ptr; char ptr_r_[PADR_(l_siginfo_t *)];
+ char timeout_l_[PADL_(struct l_timeval *)]; struct l_timeval * timeout; char timeout_r_[PADR_(struct l_timeval *)];
+ char sigsetsize_l_[PADL_(l_size_t)]; l_size_t sigsetsize; char sigsetsize_r_[PADR_(l_size_t)];
};
struct linux_rt_sigqueueinfo_args {
register_t dummy;
@@ -689,12 +723,232 @@
char tid_l_[PADL_(int)]; int tid; char tid_r_[PADR_(int)];
char sig_l_[PADL_(int)]; int sig; char sig_r_[PADR_(int)];
};
+struct linux_sys_futex_args {
+ char uaddr_l_[PADL_(void *)]; void * uaddr; char uaddr_r_[PADR_(void *)];
+ char op_l_[PADL_(int)]; int op; char op_r_[PADR_(int)];
+ char val_l_[PADL_(int)]; int val; char val_r_[PADR_(int)];
+ char timeout_l_[PADL_(struct l_timespec *)]; struct l_timespec * timeout; char timeout_r_[PADR_(struct l_timespec *)];
+ char uaddr2_l_[PADL_(void *)]; void * uaddr2; char uaddr2_r_[PADR_(void *)];
+ char val3_l_[PADL_(int)]; int val3; char val3_r_[PADR_(int)];
+};
+struct linux_sched_getaffinity_args {
+ char pid_l_[PADL_(l_pid_t)]; l_pid_t pid; char pid_r_[PADR_(l_pid_t)];
+ char len_l_[PADL_(l_uint)]; l_uint len; char len_r_[PADR_(l_uint)];
+ char user_mask_ptr_l_[PADL_(l_ulong *)]; l_ulong * user_mask_ptr; char user_mask_ptr_r_[PADR_(l_ulong *)];
+};
struct linux_set_thread_area_args {
- char entry_l_[PADL_(void *)]; void * entry; char entry_r_[PADR_(void *)];
+ char desc_l_[PADL_(struct l_user_desc *)]; struct l_user_desc * desc; char desc_r_[PADR_(struct l_user_desc *)];
+};
+struct linux_get_thread_area_args {
+ char desc_l_[PADL_(struct l_user_desc *)]; struct l_user_desc * desc; char desc_r_[PADR_(struct l_user_desc *)];
};
struct linux_fadvise64_args {
register_t dummy;
};
+struct linux_exit_group_args {
+ char error_code_l_[PADL_(int)]; int error_code; char error_code_r_[PADR_(int)];
+};
+struct linux_lookup_dcookie_args {
+ register_t dummy;
+};
+struct linux_epoll_create_args {
+ register_t dummy;
+};
+struct linux_epoll_ctl_args {
+ register_t dummy;
+};
+struct linux_epoll_wait_args {
+ register_t dummy;
+};
+struct linux_remap_file_pages_args {
+ register_t dummy;
+};
+struct linux_set_tid_address_args {
+ char tidptr_l_[PADL_(int *)]; int * tidptr; char tidptr_r_[PADR_(int *)];
+};
+struct linux_timer_create_args {
+ char clock_id_l_[PADL_(clockid_t)]; clockid_t clock_id; char clock_id_r_[PADR_(clockid_t)];
+ char evp_l_[PADL_(struct sigevent *)]; struct sigevent * evp; char evp_r_[PADR_(struct sigevent *)];
+ char timerid_l_[PADL_(l_timer_t *)]; l_timer_t * timerid; char timerid_r_[PADR_(l_timer_t *)];
+};
+struct linux_timer_settime_args {
+ char timerid_l_[PADL_(l_timer_t)]; l_timer_t timerid; char timerid_r_[PADR_(l_timer_t)];
+ char new_l_[PADL_(const struct itimerspec *)]; const struct itimerspec * new; char new_r_[PADR_(const struct itimerspec *)];
+ char old_l_[PADL_(struct itimerspec *)]; struct itimerspec * old; char old_r_[PADR_(struct itimerspec *)];
+};
+struct linux_timer_gettime_args {
+ char timerid_l_[PADL_(l_timer_t)]; l_timer_t timerid; char timerid_r_[PADR_(l_timer_t)];
+ char setting_l_[PADL_(struct itimerspec *)]; struct itimerspec * setting; char setting_r_[PADR_(struct itimerspec *)];
+};
+struct linux_timer_getoverrun_args {
+ char timerid_l_[PADL_(l_timer_t)]; l_timer_t timerid; char timerid_r_[PADR_(l_timer_t)];
+};
+struct linux_timer_delete_args {
+ char timerid_l_[PADL_(l_timer_t)]; l_timer_t timerid; char timerid_r_[PADR_(l_timer_t)];
+};
+struct linux_clock_settime_args {
+ char which_l_[PADL_(clockid_t)]; clockid_t which; char which_r_[PADR_(clockid_t)];
+ char tp_l_[PADL_(struct l_timespec *)]; struct l_timespec * tp; char tp_r_[PADR_(struct l_timespec *)];
+};
+struct linux_clock_gettime_args {
+ char which_l_[PADL_(clockid_t)]; clockid_t which; char which_r_[PADR_(clockid_t)];
+ char tp_l_[PADL_(struct l_timespec *)]; struct l_timespec * tp; char tp_r_[PADR_(struct l_timespec *)];
+};
+struct linux_clock_getres_args {
+ char which_l_[PADL_(clockid_t)]; clockid_t which; char which_r_[PADR_(clockid_t)];
+ char tp_l_[PADL_(struct l_timespec *)]; struct l_timespec * tp; char tp_r_[PADR_(struct l_timespec *)];
+};
+struct linux_clock_nanosleep_args {
+ char which_l_[PADL_(clockid_t)]; clockid_t which; char which_r_[PADR_(clockid_t)];
+ char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)];
+ char rqtp_l_[PADL_(struct l_timespec *)]; struct l_timespec * rqtp; char rqtp_r_[PADR_(struct l_timespec *)];
+ char rmtp_l_[PADL_(struct l_timespec *)]; struct l_timespec * rmtp; char rmtp_r_[PADR_(struct l_timespec *)];
+};
+struct linux_statfs64_args {
+ char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+ char bufsize_l_[PADL_(size_t)]; size_t bufsize; char bufsize_r_[PADR_(size_t)];
+ char buf_l_[PADL_(struct l_statfs64_buf *)]; struct l_statfs64_buf * buf; char buf_r_[PADR_(struct l_statfs64_buf *)];
+};
+struct linux_fstatfs64_args {
+ register_t dummy;
+};
+struct linux_tgkill_args {
+ char tgid_l_[PADL_(int)]; int tgid; char tgid_r_[PADR_(int)];
+ char pid_l_[PADL_(int)]; int pid; char pid_r_[PADR_(int)];
+ char sig_l_[PADL_(int)]; int sig; char sig_r_[PADR_(int)];
+};
+struct linux_utimes_args {
+ char fname_l_[PADL_(char *)]; char * fname; char fname_r_[PADR_(char *)];
+ char tptr_l_[PADL_(struct l_timeval *)]; struct l_timeval * tptr; char tptr_r_[PADR_(struct l_timeval *)];
+};
+struct linux_fadvise64_64_args {
+ register_t dummy;
+};
+struct linux_mbind_args {
+ register_t dummy;
+};
+struct linux_get_mempolicy_args {
+ register_t dummy;
+};
+struct linux_set_mempolicy_args {
+ register_t dummy;
+};
+struct linux_mq_open_args {
+ char name_l_[PADL_(const char *)]; const char * name; char name_r_[PADR_(const char *)];
+ char oflag_l_[PADL_(int)]; int oflag; char oflag_r_[PADR_(int)];
+ char mode_l_[PADL_(mode_t)]; mode_t mode; char mode_r_[PADR_(mode_t)];
+ char attr_l_[PADL_(struct mq_attr *)]; struct mq_attr * attr; char attr_r_[PADR_(struct mq_attr *)];
+};
+struct linux_mq_unlink_args {
+ char name_l_[PADL_(const char *)]; const char * name; char name_r_[PADR_(const char *)];
+};
+struct linux_mq_timedsend_args {
+ char mqd_l_[PADL_(l_mqd_t)]; l_mqd_t mqd; char mqd_r_[PADR_(l_mqd_t)];
+ char msg_ptr_l_[PADL_(const char *)]; const char * msg_ptr; char msg_ptr_r_[PADR_(const char *)];
+ char msg_len_l_[PADL_(size_t)]; size_t msg_len; char msg_len_r_[PADR_(size_t)];
+ char msg_prio_l_[PADL_(unsigned int)]; unsigned int msg_prio; char msg_prio_r_[PADR_(unsigned int)];
+ char abs_timeout_l_[PADL_(const struct l_timespec *)]; const struct l_timespec * abs_timeout; char abs_timeout_r_[PADR_(const struct l_timespec *)];
+};
+struct linux_mq_timedreceive_args {
+ char mqd_l_[PADL_(l_mqd_t)]; l_mqd_t mqd; char mqd_r_[PADR_(l_mqd_t)];
+ char msg_ptr_l_[PADL_(char *)]; char * msg_ptr; char msg_ptr_r_[PADR_(char *)];
+ char msg_len_l_[PADL_(size_t)]; size_t msg_len; char msg_len_r_[PADR_(size_t)];
+ char msg_prio_l_[PADL_(unsigned int)]; unsigned int msg_prio; char msg_prio_r_[PADR_(unsigned int)];
+ char abs_timeout_l_[PADL_(const struct l_timespec *)]; const struct l_timespec * abs_timeout; char abs_timeout_r_[PADR_(const struct l_timespec *)];
+};
+struct linux_mq_notify_args {
+ char mqd_l_[PADL_(l_mqd_t)]; l_mqd_t mqd; char mqd_r_[PADR_(l_mqd_t)];
+ char abs_timeout_l_[PADL_(const struct l_timespec *)]; const struct l_timespec * abs_timeout; char abs_timeout_r_[PADR_(const struct l_timespec *)];
+};
+struct linux_mq_getsetattr_args {
+ char mqd_l_[PADL_(l_mqd_t)]; l_mqd_t mqd; char mqd_r_[PADR_(l_mqd_t)];
+ char attr_l_[PADL_(const struct mq_attr *)]; const struct mq_attr * attr; char attr_r_[PADR_(const struct mq_attr *)];
+ char oattr_l_[PADL_(struct mq_attr *)]; struct mq_attr * oattr; char oattr_r_[PADR_(struct mq_attr *)];
+};
+struct linux_kexec_load_args {
+ register_t dummy;
+};
+struct linux_waitid_args {
+ register_t dummy;
+};
+struct linux_add_key_args {
+ register_t dummy;
+};
+struct linux_request_key_args {
+ register_t dummy;
+};
+struct linux_keyctl_args {
+ register_t dummy;
+};
+struct linux_ioprio_set_args {
+ register_t dummy;
+};
+struct linux_ioprio_get_args {
+ register_t dummy;
+};
+struct linux_inotify_init_args {
+ register_t dummy;
+};
+struct linux_inotify_add_watch_args {
+ register_t dummy;
+};
+struct linux_inotify_rm_watch_args {
+ register_t dummy;
+};
+struct linux_migrate_pages_args {
+ register_t dummy;
+};
+struct linux_openat_args {
+ char dfd_l_[PADL_(l_int)]; l_int dfd; char dfd_r_[PADR_(l_int)];
+ char filename_l_[PADL_(char *)]; char * filename; char filename_r_[PADR_(char *)];
+ char flags_l_[PADL_(l_int)]; l_int flags; char flags_r_[PADR_(l_int)];
+ char mode_l_[PADL_(l_int)]; l_int mode; char mode_r_[PADR_(l_int)];
+};
+struct linux_mkdirat_args {
+ register_t dummy;
+};
+struct linux_mknodat_args {
+ register_t dummy;
+};
+struct linux_fchownat_args {
+ register_t dummy;
+};
+struct linux_futimesat_args {
+ register_t dummy;
+};
+struct linux_fstatat64_args {
+ register_t dummy;
+};
+struct linux_unlinkat_args {
+ register_t dummy;
+};
+struct linux_renameat_args {
+ register_t dummy;
+};
+struct linux_linkat_args {
+ register_t dummy;
+};
+struct linux_symlinkat_args {
+ register_t dummy;
+};
+struct linux_readlinkat_args {
+ register_t dummy;
+};
+struct linux_fchmodat_args {
+ register_t dummy;
+};
+struct linux_faccessat_args {
+ register_t dummy;
+};
+struct linux_pselect6_args {
+ register_t dummy;
+};
+struct linux_ppoll_args {
+ register_t dummy;
+};
+struct linux_unshare_args {
+ register_t dummy;
+};
#define nosys linux_nosys
int linux_fork(struct thread *, struct linux_fork_args *);
int linux_open(struct thread *, struct linux_open_args *);
@@ -740,6 +994,7 @@
int linux_fcntl(struct thread *, struct linux_fcntl_args *);
int linux_olduname(struct thread *, struct linux_olduname_args *);
int linux_ustat(struct thread *, struct linux_ustat_args *);
+int linux_getppid(struct thread *, struct linux_getppid_args *);
int linux_sigaction(struct thread *, struct linux_sigaction_args *);
int linux_sgetmask(struct thread *, struct linux_sgetmask_args *);
int linux_ssetmask(struct thread *, struct linux_ssetmask_args *);
@@ -747,18 +1002,21 @@
int linux_setregid16(struct thread *, struct linux_setregid16_args *);
int linux_sigsuspend(struct thread *, struct linux_sigsuspend_args *);
int linux_sigpending(struct thread *, struct linux_sigpending_args *);
+int linux_sethostname(struct thread *, struct linux_sethostname_args *);
int linux_setrlimit(struct thread *, struct linux_setrlimit_args *);
int linux_old_getrlimit(struct thread *, struct linux_old_getrlimit_args *);
int linux_getgroups16(struct thread *, struct linux_getgroups16_args *);
int linux_setgroups16(struct thread *, struct linux_setgroups16_args *);
int linux_old_select(struct thread *, struct linux_old_select_args *);
int linux_symlink(struct thread *, struct linux_symlink_args *);
+int linux_lstat(struct thread *, struct linux_lstat_args *);
int linux_readlink(struct thread *, struct linux_readlink_args *);
int linux_uselib(struct thread *, struct linux_uselib_args *);
int linux_reboot(struct thread *, struct linux_reboot_args *);
int linux_readdir(struct thread *, struct linux_readdir_args *);
int linux_mmap(struct thread *, struct linux_mmap_args *);
int linux_truncate(struct thread *, struct linux_truncate_args *);
+int linux_ftruncate(struct thread *, struct linux_ftruncate_args *);
int linux_getpriority(struct thread *, struct linux_getpriority_args *);
int linux_statfs(struct thread *, struct linux_statfs_args *);
int linux_fstatfs(struct thread *, struct linux_fstatfs_args *);
@@ -783,6 +1041,7 @@
int linux_newuname(struct thread *, struct linux_newuname_args *);
int linux_modify_ldt(struct thread *, struct linux_modify_ldt_args *);
int linux_adjtimex(struct thread *, struct linux_adjtimex_args *);
+int linux_mprotect(struct thread *, struct linux_mprotect_args *);
int linux_sigprocmask(struct thread *, struct linux_sigprocmask_args *);
int linux_create_module(struct thread *, struct linux_create_module_args *);
int linux_init_module(struct thread *, struct linux_init_module_args *);
@@ -805,6 +1064,7 @@
int linux_sched_getscheduler(struct thread *, struct linux_sched_getscheduler_args *);
int linux_sched_get_priority_max(struct thread *, struct linux_sched_get_priority_max_args *);
int linux_sched_get_priority_min(struct thread *, struct linux_sched_get_priority_min_args *);
+int linux_nanosleep(struct thread *, struct linux_nanosleep_args *);
int linux_mremap(struct thread *, struct linux_mremap_args *);
int linux_setresuid16(struct thread *, struct linux_setresuid16_args *);
int linux_getresuid16(struct thread *, struct linux_getresuid16_args *);
@@ -863,8 +1123,68 @@
int linux_lremovexattr(struct thread *, struct linux_lremovexattr_args *);
int linux_fremovexattr(struct thread *, struct linux_fremovexattr_args *);
int linux_tkill(struct thread *, struct linux_tkill_args *);
+int linux_sys_futex(struct thread *, struct linux_sys_futex_args *);
+int linux_sched_getaffinity(struct thread *, struct linux_sched_getaffinity_args *);
int linux_set_thread_area(struct thread *, struct linux_set_thread_area_args *);
+int linux_get_thread_area(struct thread *, struct linux_get_thread_area_args *);
int linux_fadvise64(struct thread *, struct linux_fadvise64_args *);
+int linux_exit_group(struct thread *, struct linux_exit_group_args *);
+int linux_lookup_dcookie(struct thread *, struct linux_lookup_dcookie_args *);
+int linux_epoll_create(struct thread *, struct linux_epoll_create_args *);
+int linux_epoll_ctl(struct thread *, struct linux_epoll_ctl_args *);
+int linux_epoll_wait(struct thread *, struct linux_epoll_wait_args *);
+int linux_remap_file_pages(struct thread *, struct linux_remap_file_pages_args *);
+int linux_set_tid_address(struct thread *, struct linux_set_tid_address_args *);
+int linux_timer_create(struct thread *, struct linux_timer_create_args *);
+int linux_timer_settime(struct thread *, struct linux_timer_settime_args *);
+int linux_timer_gettime(struct thread *, struct linux_timer_gettime_args *);
+int linux_timer_getoverrun(struct thread *, struct linux_timer_getoverrun_args *);
+int linux_timer_delete(struct thread *, struct linux_timer_delete_args *);
+int linux_clock_settime(struct thread *, struct linux_clock_settime_args *);
+int linux_clock_gettime(struct thread *, struct linux_clock_gettime_args *);
+int linux_clock_getres(struct thread *, struct linux_clock_getres_args *);
+int linux_clock_nanosleep(struct thread *, struct linux_clock_nanosleep_args *);
+int linux_statfs64(struct thread *, struct linux_statfs64_args *);
+int linux_fstatfs64(struct thread *, struct linux_fstatfs64_args *);
+int linux_tgkill(struct thread *, struct linux_tgkill_args *);
+int linux_utimes(struct thread *, struct linux_utimes_args *);
+int linux_fadvise64_64(struct thread *, struct linux_fadvise64_64_args *);
+int linux_mbind(struct thread *, struct linux_mbind_args *);
+int linux_get_mempolicy(struct thread *, struct linux_get_mempolicy_args *);
+int linux_set_mempolicy(struct thread *, struct linux_set_mempolicy_args *);
+int linux_mq_open(struct thread *, struct linux_mq_open_args *);
+int linux_mq_unlink(struct thread *, struct linux_mq_unlink_args *);
+int linux_mq_timedsend(struct thread *, struct linux_mq_timedsend_args *);
+int linux_mq_timedreceive(struct thread *, struct linux_mq_timedreceive_args *);
+int linux_mq_notify(struct thread *, struct linux_mq_notify_args *);
+int linux_mq_getsetattr(struct thread *, struct linux_mq_getsetattr_args *);
+int linux_kexec_load(struct thread *, struct linux_kexec_load_args *);
+int linux_waitid(struct thread *, struct linux_waitid_args *);
+int linux_add_key(struct thread *, struct linux_add_key_args *);
+int linux_request_key(struct thread *, struct linux_request_key_args *);
+int linux_keyctl(struct thread *, struct linux_keyctl_args *);
+int linux_ioprio_set(struct thread *, struct linux_ioprio_set_args *);
+int linux_ioprio_get(struct thread *, struct linux_ioprio_get_args *);
+int linux_inotify_init(struct thread *, struct linux_inotify_init_args *);
+int linux_inotify_add_watch(struct thread *, struct linux_inotify_add_watch_args *);
+int linux_inotify_rm_watch(struct thread *, struct linux_inotify_rm_watch_args *);
+int linux_migrate_pages(struct thread *, struct linux_migrate_pages_args *);
+int linux_openat(struct thread *, struct linux_openat_args *);
+int linux_mkdirat(struct thread *, struct linux_mkdirat_args *);
+int linux_mknodat(struct thread *, struct linux_mknodat_args *);
+int linux_fchownat(struct thread *, struct linux_fchownat_args *);
+int linux_futimesat(struct thread *, struct linux_futimesat_args *);
+int linux_fstatat64(struct thread *, struct linux_fstatat64_args *);
+int linux_unlinkat(struct thread *, struct linux_unlinkat_args *);
+int linux_renameat(struct thread *, struct linux_renameat_args *);
+int linux_linkat(struct thread *, struct linux_linkat_args *);
+int linux_symlinkat(struct thread *, struct linux_symlinkat_args *);
+int linux_readlinkat(struct thread *, struct linux_readlinkat_args *);
+int linux_fchmodat(struct thread *, struct linux_fchmodat_args *);
+int linux_faccessat(struct thread *, struct linux_faccessat_args *);
+int linux_pselect6(struct thread *, struct linux_pselect6_args *);
+int linux_ppoll(struct thread *, struct linux_ppoll_args *);
+int linux_unshare(struct thread *, struct linux_unshare_args *);
#ifdef COMPAT_43
@@ -879,6 +1199,249 @@
#endif /* COMPAT_FREEBSD4 */
+
+#ifdef COMPAT_FREEBSD6
+
+#define nosys linux_nosys
+
+#endif /* COMPAT_FREEBSD6 */
+
+#define LINUX_SYS_AUE_linux_fork AUE_FORK
+#define LINUX_SYS_AUE_linux_open AUE_OPEN_RWTC
+#define LINUX_SYS_AUE_linux_waitpid AUE_WAIT4
+#define LINUX_SYS_AUE_linux_creat AUE_CREAT
+#define LINUX_SYS_AUE_linux_link AUE_LINK
+#define LINUX_SYS_AUE_linux_unlink AUE_UNLINK
+#define LINUX_SYS_AUE_linux_execve AUE_EXECVE
+#define LINUX_SYS_AUE_linux_chdir AUE_CHDIR
+#define LINUX_SYS_AUE_linux_time AUE_NULL
+#define LINUX_SYS_AUE_linux_mknod AUE_MKNOD
+#define LINUX_SYS_AUE_linux_chmod AUE_CHMOD
+#define LINUX_SYS_AUE_linux_lchown16 AUE_LCHOWN
+#define LINUX_SYS_AUE_linux_stat AUE_STAT
+#define LINUX_SYS_AUE_linux_lseek AUE_LSEEK
+#define LINUX_SYS_AUE_linux_getpid AUE_GETPID
+#define LINUX_SYS_AUE_linux_mount AUE_MOUNT
+#define LINUX_SYS_AUE_linux_oldumount AUE_UMOUNT
+#define LINUX_SYS_AUE_linux_setuid16 AUE_SETUID
+#define LINUX_SYS_AUE_linux_getuid16 AUE_GETUID
+#define LINUX_SYS_AUE_linux_stime AUE_SETTIMEOFDAY
+#define LINUX_SYS_AUE_linux_ptrace AUE_PTRACE
+#define LINUX_SYS_AUE_linux_alarm AUE_NULL
+#define LINUX_SYS_AUE_linux_fstat AUE_FSTAT
+#define LINUX_SYS_AUE_linux_pause AUE_NULL
+#define LINUX_SYS_AUE_linux_utime AUE_UTIME
+#define LINUX_SYS_AUE_linux_access AUE_ACCESS
+#define LINUX_SYS_AUE_linux_nice AUE_NICE
+#define LINUX_SYS_AUE_linux_kill AUE_KILL
+#define LINUX_SYS_AUE_linux_rename AUE_RENAME
+#define LINUX_SYS_AUE_linux_mkdir AUE_MKDIR
+#define LINUX_SYS_AUE_linux_rmdir AUE_RMDIR
+#define LINUX_SYS_AUE_linux_pipe AUE_PIPE
+#define LINUX_SYS_AUE_linux_times AUE_NULL
+#define LINUX_SYS_AUE_linux_brk AUE_NULL
+#define LINUX_SYS_AUE_linux_setgid16 AUE_SETGID
+#define LINUX_SYS_AUE_linux_getgid16 AUE_GETGID
+#define LINUX_SYS_AUE_linux_signal AUE_NULL
+#define LINUX_SYS_AUE_linux_geteuid16 AUE_GETEUID
+#define LINUX_SYS_AUE_linux_getegid16 AUE_GETEGID
+#define LINUX_SYS_AUE_linux_umount AUE_UMOUNT
+#define LINUX_SYS_AUE_linux_ioctl AUE_IOCTL
+#define LINUX_SYS_AUE_linux_fcntl AUE_FCNTL
+#define LINUX_SYS_AUE_linux_olduname AUE_NULL
+#define LINUX_SYS_AUE_linux_ustat AUE_NULL
+#define LINUX_SYS_AUE_linux_getppid AUE_GETPPID
+#define LINUX_SYS_AUE_linux_sigaction AUE_NULL
+#define LINUX_SYS_AUE_linux_sgetmask AUE_NULL
+#define LINUX_SYS_AUE_linux_ssetmask AUE_NULL
+#define LINUX_SYS_AUE_linux_setreuid16 AUE_SETREUID
+#define LINUX_SYS_AUE_linux_setregid16 AUE_SETREGID
+#define LINUX_SYS_AUE_linux_sigsuspend AUE_NULL
+#define LINUX_SYS_AUE_linux_sigpending AUE_NULL
+#define LINUX_SYS_AUE_linux_sethostname AUE_SYSCTL
+#define LINUX_SYS_AUE_linux_setrlimit AUE_SETRLIMIT
+#define LINUX_SYS_AUE_linux_old_getrlimit AUE_GETRLIMIT
+#define LINUX_SYS_AUE_linux_getgroups16 AUE_GETGROUPS
+#define LINUX_SYS_AUE_linux_setgroups16 AUE_SETGROUPS
+#define LINUX_SYS_AUE_linux_old_select AUE_SELECT
+#define LINUX_SYS_AUE_linux_symlink AUE_SYMLINK
+#define LINUX_SYS_AUE_linux_lstat AUE_LSTAT
+#define LINUX_SYS_AUE_linux_readlink AUE_READLINK
+#define LINUX_SYS_AUE_linux_uselib AUE_USELIB
+#define LINUX_SYS_AUE_linux_reboot AUE_REBOOT
+#define LINUX_SYS_AUE_linux_readdir AUE_GETDIRENTRIES
+#define LINUX_SYS_AUE_linux_mmap AUE_MMAP
+#define LINUX_SYS_AUE_linux_truncate AUE_TRUNCATE
+#define LINUX_SYS_AUE_linux_ftruncate AUE_FTRUNCATE
+#define LINUX_SYS_AUE_linux_getpriority AUE_GETPRIORITY
+#define LINUX_SYS_AUE_linux_statfs AUE_STATFS
+#define LINUX_SYS_AUE_linux_fstatfs AUE_FSTATFS
+#define LINUX_SYS_AUE_linux_ioperm AUE_NULL
+#define LINUX_SYS_AUE_linux_socketcall AUE_NULL
+#define LINUX_SYS_AUE_linux_syslog AUE_NULL
+#define LINUX_SYS_AUE_linux_setitimer AUE_SETITIMER
+#define LINUX_SYS_AUE_linux_getitimer AUE_GETITIMER
+#define LINUX_SYS_AUE_linux_newstat AUE_STAT
+#define LINUX_SYS_AUE_linux_newlstat AUE_LSTAT
+#define LINUX_SYS_AUE_linux_newfstat AUE_FSTAT
+#define LINUX_SYS_AUE_linux_uname AUE_NULL
+#define LINUX_SYS_AUE_linux_iopl AUE_NULL
+#define LINUX_SYS_AUE_linux_vhangup AUE_NULL
+#define LINUX_SYS_AUE_linux_vm86old AUE_NULL
+#define LINUX_SYS_AUE_linux_wait4 AUE_WAIT4
+#define LINUX_SYS_AUE_linux_swapoff AUE_SWAPOFF
+#define LINUX_SYS_AUE_linux_sysinfo AUE_NULL
+#define LINUX_SYS_AUE_linux_ipc AUE_NULL
+#define LINUX_SYS_AUE_linux_sigreturn AUE_SIGRETURN
+#define LINUX_SYS_AUE_linux_clone AUE_RFORK
+#define LINUX_SYS_AUE_linux_newuname AUE_NULL
+#define LINUX_SYS_AUE_linux_modify_ldt AUE_NULL
+#define LINUX_SYS_AUE_linux_adjtimex AUE_ADJTIME
+#define LINUX_SYS_AUE_linux_mprotect AUE_MPROTECT
+#define LINUX_SYS_AUE_linux_sigprocmask AUE_SIGPROCMASK
+#define LINUX_SYS_AUE_linux_create_module AUE_NULL
+#define LINUX_SYS_AUE_linux_init_module AUE_NULL
+#define LINUX_SYS_AUE_linux_delete_module AUE_NULL
+#define LINUX_SYS_AUE_linux_get_kernel_syms AUE_NULL
+#define LINUX_SYS_AUE_linux_quotactl AUE_QUOTACTL
+#define LINUX_SYS_AUE_linux_bdflush AUE_BDFLUSH
+#define LINUX_SYS_AUE_linux_sysfs AUE_NULL
+#define LINUX_SYS_AUE_linux_personality AUE_PERSONALITY
+#define LINUX_SYS_AUE_linux_setfsuid16 AUE_SETFSUID
+#define LINUX_SYS_AUE_linux_setfsgid16 AUE_SETFSGID
+#define LINUX_SYS_AUE_linux_llseek AUE_LSEEK
+#define LINUX_SYS_AUE_linux_getdents AUE_GETDIRENTRIES
+#define LINUX_SYS_AUE_linux_select AUE_SELECT
+#define LINUX_SYS_AUE_linux_msync AUE_MSYNC
+#define LINUX_SYS_AUE_linux_getsid AUE_GETSID
+#define LINUX_SYS_AUE_linux_fdatasync AUE_NULL
+#define LINUX_SYS_AUE_linux_sysctl AUE_SYSCTL
+#define LINUX_SYS_AUE_linux_sched_setscheduler AUE_SCHED_SETSCHEDULER
+#define LINUX_SYS_AUE_linux_sched_getscheduler AUE_SCHED_GETSCHEDULER
+#define LINUX_SYS_AUE_linux_sched_get_priority_max AUE_SCHED_GET_PRIORITY_MAX
+#define LINUX_SYS_AUE_linux_sched_get_priority_min AUE_SCHED_GET_PRIORITY_MIN
+#define LINUX_SYS_AUE_linux_nanosleep AUE_NULL
+#define LINUX_SYS_AUE_linux_mremap AUE_NULL
+#define LINUX_SYS_AUE_linux_setresuid16 AUE_SETRESUID
+#define LINUX_SYS_AUE_linux_getresuid16 AUE_GETRESUID
+#define LINUX_SYS_AUE_linux_vm86 AUE_NULL
+#define LINUX_SYS_AUE_linux_query_module AUE_NULL
+#define LINUX_SYS_AUE_linux_nfsservctl AUE_NULL
+#define LINUX_SYS_AUE_linux_setresgid16 AUE_SETRESGID
+#define LINUX_SYS_AUE_linux_getresgid16 AUE_GETRESGID
+#define LINUX_SYS_AUE_linux_prctl AUE_PRCTL
+#define LINUX_SYS_AUE_linux_rt_sigreturn AUE_NULL
+#define LINUX_SYS_AUE_linux_rt_sigaction AUE_NULL
+#define LINUX_SYS_AUE_linux_rt_sigprocmask AUE_NULL
+#define LINUX_SYS_AUE_linux_rt_sigpending AUE_NULL
+#define LINUX_SYS_AUE_linux_rt_sigtimedwait AUE_NULL
+#define LINUX_SYS_AUE_linux_rt_sigqueueinfo AUE_NULL
+#define LINUX_SYS_AUE_linux_rt_sigsuspend AUE_NULL
+#define LINUX_SYS_AUE_linux_pread AUE_PREAD
+#define LINUX_SYS_AUE_linux_pwrite AUE_PWRITE
+#define LINUX_SYS_AUE_linux_chown16 AUE_CHOWN
+#define LINUX_SYS_AUE_linux_getcwd AUE_GETCWD
+#define LINUX_SYS_AUE_linux_capget AUE_CAPGET
+#define LINUX_SYS_AUE_linux_capset AUE_CAPSET
+#define LINUX_SYS_AUE_linux_sigaltstack AUE_NULL
+#define LINUX_SYS_AUE_linux_sendfile AUE_SENDFILE
+#define LINUX_SYS_AUE_linux_vfork AUE_VFORK
+#define LINUX_SYS_AUE_linux_getrlimit AUE_GETRLIMIT
+#define LINUX_SYS_AUE_linux_mmap2 AUE_MMAP
+#define LINUX_SYS_AUE_linux_truncate64 AUE_TRUNCATE
+#define LINUX_SYS_AUE_linux_ftruncate64 AUE_FTRUNCATE
+#define LINUX_SYS_AUE_linux_stat64 AUE_STAT
+#define LINUX_SYS_AUE_linux_lstat64 AUE_LSTAT
+#define LINUX_SYS_AUE_linux_fstat64 AUE_FSTAT
+#define LINUX_SYS_AUE_linux_lchown AUE_LCHOWN
+#define LINUX_SYS_AUE_linux_getuid AUE_GETUID
+#define LINUX_SYS_AUE_linux_getgid AUE_GETGID
+#define LINUX_SYS_AUE_linux_getgroups AUE_GETGROUPS
+#define LINUX_SYS_AUE_linux_setgroups AUE_SETGROUPS
+#define LINUX_SYS_AUE_linux_chown AUE_CHOWN
+#define LINUX_SYS_AUE_linux_setfsuid AUE_SETFSUID
+#define LINUX_SYS_AUE_linux_setfsgid AUE_SETFSGID
+#define LINUX_SYS_AUE_linux_pivot_root AUE_PIVOT_ROOT
+#define LINUX_SYS_AUE_linux_mincore AUE_MINCORE
+#define LINUX_SYS_AUE_linux_getdents64 AUE_GETDIRENTRIES
+#define LINUX_SYS_AUE_linux_fcntl64 AUE_FCNTL
+#define LINUX_SYS_AUE_linux_gettid AUE_NULL
+#define LINUX_SYS_AUE_linux_setxattr AUE_NULL
+#define LINUX_SYS_AUE_linux_lsetxattr AUE_NULL
+#define LINUX_SYS_AUE_linux_fsetxattr AUE_NULL
+#define LINUX_SYS_AUE_linux_getxattr AUE_NULL
+#define LINUX_SYS_AUE_linux_lgetxattr AUE_NULL
+#define LINUX_SYS_AUE_linux_fgetxattr AUE_NULL
+#define LINUX_SYS_AUE_linux_listxattr AUE_NULL
+#define LINUX_SYS_AUE_linux_llistxattr AUE_NULL
+#define LINUX_SYS_AUE_linux_flistxattr AUE_NULL
+#define LINUX_SYS_AUE_linux_removexattr AUE_NULL
+#define LINUX_SYS_AUE_linux_lremovexattr AUE_NULL
+#define LINUX_SYS_AUE_linux_fremovexattr AUE_NULL
+#define LINUX_SYS_AUE_linux_tkill AUE_NULL
+#define LINUX_SYS_AUE_linux_sys_futex AUE_NULL
+#define LINUX_SYS_AUE_linux_sched_getaffinity AUE_NULL
+#define LINUX_SYS_AUE_linux_set_thread_area AUE_NULL
+#define LINUX_SYS_AUE_linux_get_thread_area AUE_NULL
+#define LINUX_SYS_AUE_linux_fadvise64 AUE_NULL
+#define LINUX_SYS_AUE_linux_exit_group AUE_EXIT
+#define LINUX_SYS_AUE_linux_lookup_dcookie AUE_NULL
+#define LINUX_SYS_AUE_linux_epoll_create AUE_NULL
+#define LINUX_SYS_AUE_linux_epoll_ctl AUE_NULL
+#define LINUX_SYS_AUE_linux_epoll_wait AUE_NULL
+#define LINUX_SYS_AUE_linux_remap_file_pages AUE_NULL
+#define LINUX_SYS_AUE_linux_set_tid_address AUE_NULL
+#define LINUX_SYS_AUE_linux_timer_create AUE_NULL
+#define LINUX_SYS_AUE_linux_timer_settime AUE_NULL
+#define LINUX_SYS_AUE_linux_timer_gettime AUE_NULL
+#define LINUX_SYS_AUE_linux_timer_getoverrun AUE_NULL
+#define LINUX_SYS_AUE_linux_timer_delete AUE_NULL
+#define LINUX_SYS_AUE_linux_clock_settime AUE_CLOCK_SETTIME
+#define LINUX_SYS_AUE_linux_clock_gettime AUE_NULL
+#define LINUX_SYS_AUE_linux_clock_getres AUE_NULL
+#define LINUX_SYS_AUE_linux_clock_nanosleep AUE_NULL
+#define LINUX_SYS_AUE_linux_statfs64 AUE_STATFS
+#define LINUX_SYS_AUE_linux_fstatfs64 AUE_FSTATFS
+#define LINUX_SYS_AUE_linux_tgkill AUE_NULL
+#define LINUX_SYS_AUE_linux_utimes AUE_UTIMES
+#define LINUX_SYS_AUE_linux_fadvise64_64 AUE_NULL
+#define LINUX_SYS_AUE_linux_mbind AUE_NULL
+#define LINUX_SYS_AUE_linux_get_mempolicy AUE_NULL
+#define LINUX_SYS_AUE_linux_set_mempolicy AUE_NULL
+#define LINUX_SYS_AUE_linux_mq_open AUE_NULL
+#define LINUX_SYS_AUE_linux_mq_unlink AUE_NULL
+#define LINUX_SYS_AUE_linux_mq_timedsend AUE_NULL
+#define LINUX_SYS_AUE_linux_mq_timedreceive AUE_NULL
+#define LINUX_SYS_AUE_linux_mq_notify AUE_NULL
+#define LINUX_SYS_AUE_linux_mq_getsetattr AUE_NULL
+#define LINUX_SYS_AUE_linux_kexec_load AUE_NULL
+#define LINUX_SYS_AUE_linux_waitid AUE_NULL
+#define LINUX_SYS_AUE_linux_add_key AUE_NULL
+#define LINUX_SYS_AUE_linux_request_key AUE_NULL
+#define LINUX_SYS_AUE_linux_keyctl AUE_NULL
+#define LINUX_SYS_AUE_linux_ioprio_set AUE_NULL
+#define LINUX_SYS_AUE_linux_ioprio_get AUE_NULL
+#define LINUX_SYS_AUE_linux_inotify_init AUE_NULL
+#define LINUX_SYS_AUE_linux_inotify_add_watch AUE_NULL
+#define LINUX_SYS_AUE_linux_inotify_rm_watch AUE_NULL
+#define LINUX_SYS_AUE_linux_migrate_pages AUE_NULL
+#define LINUX_SYS_AUE_linux_openat AUE_OPEN_RWTC
+#define LINUX_SYS_AUE_linux_mkdirat AUE_NULL
+#define LINUX_SYS_AUE_linux_mknodat AUE_NULL
+#define LINUX_SYS_AUE_linux_fchownat AUE_NULL
+#define LINUX_SYS_AUE_linux_futimesat AUE_NULL
+#define LINUX_SYS_AUE_linux_fstatat64 AUE_NULL
+#define LINUX_SYS_AUE_linux_unlinkat AUE_NULL
+#define LINUX_SYS_AUE_linux_renameat AUE_NULL
+#define LINUX_SYS_AUE_linux_linkat AUE_NULL
+#define LINUX_SYS_AUE_linux_symlinkat AUE_NULL
+#define LINUX_SYS_AUE_linux_readlinkat AUE_NULL
+#define LINUX_SYS_AUE_linux_fchmodat AUE_NULL
+#define LINUX_SYS_AUE_linux_faccessat AUE_NULL
+#define LINUX_SYS_AUE_linux_pselect6 AUE_NULL
+#define LINUX_SYS_AUE_linux_ppoll AUE_NULL
+#define LINUX_SYS_AUE_linux_unshare AUE_NULL
+
#undef PAD_
#undef PADL_
#undef PADR_
Index: linux_dummy.c
===================================================================
RCS file: /home/cvs/src/sys/i386/linux/linux_dummy.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -L sys/i386/linux/linux_dummy.c -L sys/i386/linux/linux_dummy.c -u -r1.1.1.1 -r1.2
--- sys/i386/linux/linux_dummy.c
+++ sys/i386/linux/linux_dummy.c
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/i386/linux/linux_dummy.c,v 1.38 2004/03/28 21:43:27 bms Exp $");
+__FBSDID("$FreeBSD: src/sys/i386/linux/linux_dummy.c,v 1.46 2007/03/29 02:11:46 julian Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -37,7 +37,6 @@
#include <i386/linux/linux_proto.h>
#include <compat/linux/linux_util.h>
-DUMMY(stat);
DUMMY(stime);
DUMMY(fstat);
DUMMY(olduname);
@@ -57,19 +56,52 @@
DUMMY(vm86);
DUMMY(query_module);
DUMMY(nfsservctl);
-DUMMY(prctl);
-DUMMY(rt_sigpending);
-DUMMY(rt_sigtimedwait);
DUMMY(rt_sigqueueinfo);
DUMMY(capget);
DUMMY(capset);
-DUMMY(sendfile);
+DUMMY(sendfile); /* different semantics */
DUMMY(truncate64);
DUMMY(setfsuid);
DUMMY(setfsgid);
DUMMY(pivot_root);
DUMMY(mincore);
DUMMY(fadvise64);
+DUMMY(lookup_dcookie);
+DUMMY(epoll_create);
+DUMMY(epoll_ctl);
+DUMMY(epoll_wait);
+DUMMY(remap_file_pages);
+DUMMY(fstatfs64);
+DUMMY(fadvise64_64);
+DUMMY(mbind);
+DUMMY(get_mempolicy);
+DUMMY(set_mempolicy);
+DUMMY(kexec_load);
+DUMMY(waitid);
+DUMMY(add_key);
+DUMMY(request_key);
+DUMMY(keyctl);
+DUMMY(ioprio_set);
+DUMMY(ioprio_get);
+DUMMY(inotify_init);
+DUMMY(inotify_add_watch);
+DUMMY(inotify_rm_watch);
+DUMMY(migrate_pages);
+DUMMY(mkdirat);
+DUMMY(mknodat);
+DUMMY(fchownat);
+DUMMY(futimesat);
+DUMMY(fstatat64);
+DUMMY(unlinkat);
+DUMMY(renameat);
+DUMMY(linkat);
+DUMMY(symlinkat);
+DUMMY(readlinkat);
+DUMMY(fchmodat);
+DUMMY(faccessat);
+DUMMY(pselect6);
+DUMMY(ppoll);
+DUMMY(unshare);
#define DUMMY_XATTR(s) \
int \
--- /dev/null
+++ sys/i386/linux/linux_support.s
@@ -0,0 +1,127 @@
+/*-
+ * Copyright (c) 2006,2007 Konstantin Belousov
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: src/sys/i386/linux/linux_support.s,v 1.1 2007/05/23 08:33:06 kib Exp $
+ */
+
+#include "linux_assym.h" /* system definitions */
+#include <machine/asmacros.h> /* miscellaneous asm macros */
+
+#include "assym.s"
+
+futex_fault_decx:
+ movl PCPU(CURPCB),%ecx
+futex_fault:
+ movl $0,PCB_ONFAULT(%ecx)
+ movl $-EFAULT,%eax
+ ret
+
+ENTRY(futex_xchgl)
+ movl PCPU(CURPCB),%ecx
+ movl $futex_fault,PCB_ONFAULT(%ecx)
+ movl 4(%esp),%eax
+ movl 8(%esp),%edx
+ cmpl $VM_MAXUSER_ADDRESS-4,%edx
+ ja futex_fault
+ xchgl %eax,(%edx)
+ movl 12(%esp),%edx
+ movl %eax,(%edx)
+ xorl %eax,%eax
+ movl %eax,PCB_ONFAULT(%ecx)
+ ret
+
+ENTRY(futex_addl)
+ movl PCPU(CURPCB),%ecx
+ movl $futex_fault,PCB_ONFAULT(%ecx)
+ movl 4(%esp),%eax
+ movl 8(%esp),%edx
+ cmpl $VM_MAXUSER_ADDRESS-4,%edx
+ ja futex_fault
+#ifdef SMP
+ lock
+#endif
+ xaddl %eax,(%edx)
+ movl 12(%esp),%edx
+ movl %eax,(%edx)
+ xorl %eax,%eax
+ movl %eax,PCB_ONFAULT(%ecx)
+ ret
+
+ENTRY(futex_orl)
+ movl PCPU(CURPCB),%ecx
+ movl $futex_fault_decx,PCB_ONFAULT(%ecx)
+ movl 8(%esp),%edx
+ cmpl $VM_MAXUSER_ADDRESS-4,%edx
+ ja futex_fault
+ movl (%edx),%eax
+1: movl %eax,%ecx
+ orl 4(%esp),%ecx
+#ifdef SMP
+ lock
+#endif
+ cmpxchgl %ecx,(%edx)
+ jnz 1b
+futex_tail:
+ movl 12(%esp),%edx
+ movl %eax,(%edx)
+ xorl %eax,%eax
+ movl PCPU(CURPCB),%ecx
+ movl %eax,PCB_ONFAULT(%ecx)
+ ret
+
+ENTRY(futex_andl)
+ movl PCPU(CURPCB),%ecx
+ movl $futex_fault_decx,PCB_ONFAULT(%ecx)
+ movl 8(%esp),%edx
+ cmpl $VM_MAXUSER_ADDRESS-4,%edx
+ ja futex_fault
+ movl (%edx),%eax
+1: movl %eax,%ecx
+ andl 4(%esp),%ecx
+#ifdef SMP
+ lock
+#endif
+ cmpxchgl %ecx,(%edx)
+ jnz 1b
+ jmp futex_tail
+
+ENTRY(futex_xorl)
+ movl PCPU(CURPCB),%ecx
+ movl $futex_fault_decx,PCB_ONFAULT(%ecx)
+ movl 8(%esp),%edx
+ cmpl $VM_MAXUSER_ADDRESS-4,%edx
+ ja futex_fault
+ movl (%edx),%eax
+1: movl %eax,%ecx
+ xorl 4(%esp),%ecx
+#ifdef SMP
+ lock
+#endif
+ cmpxchgl %ecx,(%edx)
+ jnz 1b
+ jmp futex_tail
Index: linux.h
===================================================================
RCS file: /home/cvs/src/sys/i386/linux/linux.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -L sys/i386/linux/linux.h -L sys/i386/linux/linux.h -u -r1.1.1.1 -r1.2
--- sys/i386/linux/linux.h
+++ sys/i386/linux/linux.h
@@ -6,7 +6,7 @@
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer
+ * notice, this list of conditions and the following disclaimer
* in this position and unchanged.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
@@ -25,13 +25,13 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: src/sys/i386/linux/linux.h,v 1.64 2005/04/13 04:31:43 mdodd Exp $
+ * $FreeBSD: src/sys/i386/linux/linux.h,v 1.78 2007/09/18 19:50:33 dwmalone Exp $
*/
-#ifndef _I386_LINUX_LINUX_H_
-#define _I386_LINUX_LINUX_H_
+#ifndef _I386_LINUX_H_
+#define _I386_LINUX_H_
-#include <sys/signal.h> /* for sigval union */
+#include <sys/signal.h> /* for sigval union */
#include <i386/linux/linux_syscall.h>
@@ -39,9 +39,9 @@
* debugging support
*/
extern u_char linux_debug_map[];
-#define ldebug(name) isclr(linux_debug_map, LINUX_SYS_linux_ ## name)
-#define ARGS(nm, fmt) "linux(%ld): "#nm"("fmt")\n", (long)td->td_proc->p_pid
-#define LMSG(fmt) "linux(%ld): "fmt"\n", (long)td->td_proc->p_pid
+#define ldebug(name) isclr(linux_debug_map, LINUX_SYS_linux_ ## name)
+#define ARGS(nm, fmt) "linux(%ld): "#nm"("fmt")\n", (long)td->td_proc->p_pid
+#define LMSG(fmt) "linux(%ld): "fmt"\n", (long)td->td_proc->p_pid
#ifdef MALLOC_DECLARE
MALLOC_DECLARE(M_LINUX);
@@ -126,7 +126,7 @@
#define LINUX_RLIMIT_NPROC 6
#define LINUX_RLIMIT_NOFILE 7
#define LINUX_RLIMIT_MEMLOCK 8
-#define LINUX_RLIMIT_AS 9 /* address space limit */
+#define LINUX_RLIMIT_AS 9 /* Address space limit */
#define LINUX_RLIM_NLIMITS 10
@@ -142,12 +142,21 @@
#define LINUX_MAP_ANON 0x0020
#define LINUX_MAP_GROWSDOWN 0x0100
+struct l_mmap_argv {
+ l_uintptr_t addr;
+ l_size_t len;
+ l_int prot;
+ l_int flags;
+ l_int fd;
+ l_off_t pgoff;
+} __packed;
+
/*
* stat family of syscalls
*/
struct l_timespec {
- l_ulong tv_sec;
- l_ulong tv_nsec;
+ l_time_t tv_sec;
+ l_long tv_nsec;
};
struct l_newstat {
@@ -170,6 +179,24 @@
l_ulong __unused5;
};
+struct l_stat {
+ l_ushort st_dev;
+ l_ulong st_ino;
+ l_ushort st_mode;
+ l_ushort st_nlink;
+ l_ushort st_uid;
+ l_ushort st_gid;
+ l_ushort st_rdev;
+ l_long st_size;
+ struct l_timespec st_atimespec;
+ struct l_timespec st_mtimespec;
+ struct l_timespec st_ctimespec;
+ l_long st_blksize;
+ l_long st_blocks;
+ l_ulong st_flags;
+ l_ulong st_gen;
+};
+
struct l_stat64 {
l_ushort st_dev;
u_char __pad0[10];
@@ -190,6 +217,19 @@
l_ulonglong st_ino;
};
+struct l_statfs64 {
+ l_int f_type;
+ l_int f_bsize;
+ uint64_t f_blocks;
+ uint64_t f_bfree;
+ uint64_t f_bavail;
+ uint64_t f_files;
+ uint64_t f_ffree;
+ l_fsid_t f_fsid;
+ l_int f_namelen;
+ l_int f_spare[6];
+};
+
struct l_new_utsname {
char sysname[LINUX_MAX_UTSNAME];
char nodename[LINUX_MAX_UTSNAME];
@@ -263,9 +303,9 @@
#define LINUX_SIGADDSET(set, sig) SIGADDSET(set, sig)
/* sigaltstack */
-#define LINUX_MINSIGSTKSZ 2048
-#define LINUX_SS_ONSTACK 1
-#define LINUX_SS_DISABLE 2
+#define LINUX_MINSIGSTKSZ 2048
+#define LINUX_SS_ONSTACK 1
+#define LINUX_SS_DISABLE 2
int linux_to_bsd_sigaltstack(int lsa);
int bsd_to_linux_sigaltstack(int bsa);
@@ -328,11 +368,11 @@
void *uc_link;
l_stack_t uc_stack;
struct l_sigcontext uc_mcontext;
- l_sigset_t uc_sigmask;
+ l_sigset_t uc_sigmask;
};
-#define LINUX_SI_MAX_SIZE 128
-#define LINUX_SI_PAD_SIZE ((LINUX_SI_MAX_SIZE/sizeof(l_int)) - 3)
+#define LINUX_SI_MAX_SIZE 128
+#define LINUX_SI_PAD_SIZE ((LINUX_SI_MAX_SIZE/sizeof(l_int)) - 3)
typedef struct l_siginfo {
l_int lsi_signo;
@@ -366,41 +406,41 @@
} _sigchld;
struct {
- void *_addr; /* faulting insn/memory ref. */
+ void *_addr; /* Faulting insn/memory ref. */
} _sigfault;
struct {
- l_int _band; /* POLL_IN,POLL_OUT,POLL_MSG */
+ l_int _band; /* POLL_IN,POLL_OUT,POLL_MSG */
l_int _fd;
} _sigpoll;
} _sifields;
} l_siginfo_t;
-#define lsi_pid _sifields._kill._pid
-#define lsi_uid _sifields._kill._uid
-#define lsi_status _sifields._sigchld._status
-#define lsi_utime _sifields._sigchld._utime
-#define lsi_stime _sifields._sigchld._stime
-#define lsi_value _sifields._rt._sigval
-#define lsi_int _sifields._rt._sigval.sival_int
-#define lsi_ptr _sifields._rt._sigval.sival_ptr
-#define lsi_addr _sifields._sigfault._addr
-#define lsi_band _sifields._sigpoll._band
-#define lsi_fd _sifields._sigpoll._fd
+#define lsi_pid _sifields._kill._pid
+#define lsi_uid _sifields._kill._uid
+#define lsi_status _sifields._sigchld._status
+#define lsi_utime _sifields._sigchld._utime
+#define lsi_stime _sifields._sigchld._stime
+#define lsi_value _sifields._rt._sigval
+#define lsi_int _sifields._rt._sigval.sival_int
+#define lsi_ptr _sifields._rt._sigval.sival_ptr
+#define lsi_addr _sifields._sigfault._addr
+#define lsi_band _sifields._sigpoll._band
+#define lsi_fd _sifields._sigpoll._fd
struct l_fpreg {
- u_int16_t significand[4];
- u_int16_t exponent;
+ u_int16_t significand[4];
+ u_int16_t exponent;
};
struct l_fpxreg {
- u_int16_t significand[4];
- u_int16_t exponent;
- u_int16_t padding[3];
+ u_int16_t significand[4];
+ u_int16_t exponent;
+ u_int16_t padding[3];
};
struct l_xmmreg {
- u_int32_t element[4];
+ u_int32_t element[4];
};
struct l_fpstate {
@@ -414,13 +454,13 @@
u_int32_t datasel;
struct l_fpreg _st[8];
u_int16_t status;
- u_int16_t magic; /* 0xffff = regular FPU data */
+ u_int16_t magic; /* 0xffff = regular FPU data */
/* FXSR FPU environment */
- u_int32_t _fxsr_env[6]; /* env is ignored */
+ u_int32_t _fxsr_env[6]; /* env is ignored. */
u_int32_t mxcsr;
u_int32_t reserved;
- struct l_fpxreg _fxsr_st[8]; /* reg data is ignored */
+ struct l_fpxreg _fxsr_st[8]; /* reg data is ignored. */
struct l_xmmreg _xmm[8];
u_int32_t padding[56];
};
@@ -472,22 +512,23 @@
/*
* open/fcntl flags
*/
-#define LINUX_O_RDONLY 00
-#define LINUX_O_WRONLY 01
-#define LINUX_O_RDWR 02
-#define LINUX_O_CREAT 0100
-#define LINUX_O_EXCL 0200
-#define LINUX_O_NOCTTY 0400
-#define LINUX_O_TRUNC 01000
-#define LINUX_O_APPEND 02000
-#define LINUX_O_NONBLOCK 04000
+#define LINUX_O_RDONLY 00000000
+#define LINUX_O_WRONLY 00000001
+#define LINUX_O_RDWR 00000002
+#define LINUX_O_ACCMODE 00000003
+#define LINUX_O_CREAT 00000100
+#define LINUX_O_EXCL 00000200
+#define LINUX_O_NOCTTY 00000400
+#define LINUX_O_TRUNC 00001000
+#define LINUX_O_APPEND 00002000
+#define LINUX_O_NONBLOCK 00004000
#define LINUX_O_NDELAY LINUX_O_NONBLOCK
-#define LINUX_O_SYNC 010000
-#define LINUX_FASYNC 020000
-#define LINUX_O_DIRECT 040000 /* direct disk access hint */
-#define LINUX_O_LARGEFILE 0100000
-#define LINUX_O_DIRECTORY 0200000 /* must be a directory */
-#define LINUX_O_NOFOLLOW 0400000 /* don't follow links */
+#define LINUX_O_SYNC 00010000
+#define LINUX_FASYNC 00020000
+#define LINUX_O_DIRECT 00040000 /* Direct disk access hint */
+#define LINUX_O_LARGEFILE 00100000
+#define LINUX_O_DIRECTORY 00200000 /* Must be a directory */
+#define LINUX_O_NOFOLLOW 00400000 /* Do not follow links */
#define LINUX_O_NOATIME 01000000
#define LINUX_F_DUPFD 0
@@ -509,15 +550,17 @@
#define LINUX_F_WRLCK 1
#define LINUX_F_UNLCK 2
+#define LINUX_AT_FDCWD -100
+
/*
* mount flags
*/
-#define LINUX_MS_RDONLY 0x0001
-#define LINUX_MS_NOSUID 0x0002
-#define LINUX_MS_NODEV 0x0004
-#define LINUX_MS_NOEXEC 0x0008
-#define LINUX_MS_REMOUNT 0x0020
-
+#define LINUX_MS_RDONLY 0x0001
+#define LINUX_MS_NOSUID 0x0002
+#define LINUX_MS_NODEV 0x0004
+#define LINUX_MS_NOEXEC 0x0008
+#define LINUX_MS_REMOUNT 0x0020
+
/*
* SystemV IPC defines
*/
@@ -615,6 +658,13 @@
#define LINUX_SO_NO_CHECK 11
#define LINUX_SO_PRIORITY 12
#define LINUX_SO_LINGER 13
+#define LINUX_SO_PEERCRED 17
+#define LINUX_SO_RCVLOWAT 18
+#define LINUX_SO_SNDLOWAT 19
+#define LINUX_SO_RCVTIMEO 20
+#define LINUX_SO_SNDTIMEO 21
+#define LINUX_SO_TIMESTAMP 29
+#define LINUX_SO_ACCEPTCONN 30
#define LINUX_IP_TOS 1
#define LINUX_IP_TTL 2
@@ -664,7 +714,7 @@
} ifr_ifru;
};
-#define ifr_name ifr_ifrn.ifrn_name /* interface name */
+#define ifr_name ifr_ifrn.ifrn_name /* Interface name */
#define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
/*
@@ -688,4 +738,113 @@
l_short revents;
};
-#endif /* !_I386_LINUX_LINUX_H_ */
+struct l_user_desc {
+ l_uint entry_number;
+ l_uint base_addr;
+ l_uint limit;
+ l_uint seg_32bit:1;
+ l_uint contents:2;
+ l_uint read_exec_only:1;
+ l_uint limit_in_pages:1;
+ l_uint seg_not_present:1;
+ l_uint useable:1;
+};
+
+struct l_desc_struct {
+ unsigned long a, b;
+};
+
+
+#define LINUX_LOWERWORD 0x0000ffff
+
+/*
+ * Macros which does the same thing as those in Linux include/asm-um/ldt-i386.h.
+ * These convert Linux user space descriptor to machine one.
+ */
+#define LINUX_LDT_entry_a(info) \
+ ((((info)->base_addr & LINUX_LOWERWORD) << 16) | \
+ ((info)->limit & LINUX_LOWERWORD))
+
+#define LINUX_ENTRY_B_READ_EXEC_ONLY 9
+#define LINUX_ENTRY_B_CONTENTS 10
+#define LINUX_ENTRY_B_SEG_NOT_PRESENT 15
+#define LINUX_ENTRY_B_BASE_ADDR 16
+#define LINUX_ENTRY_B_USEABLE 20
+#define LINUX_ENTRY_B_SEG32BIT 22
+#define LINUX_ENTRY_B_LIMIT 23
+
+#define LINUX_LDT_entry_b(info) \
+ (((info)->base_addr & 0xff000000) | \
+ ((info)->limit & 0xf0000) | \
+ ((info)->contents << LINUX_ENTRY_B_CONTENTS) | \
+ (((info)->seg_not_present == 0) << LINUX_ENTRY_B_SEG_NOT_PRESENT) | \
+ (((info)->base_addr & 0x00ff0000) >> LINUX_ENTRY_B_BASE_ADDR) | \
+ (((info)->read_exec_only == 0) << LINUX_ENTRY_B_READ_EXEC_ONLY) | \
+ ((info)->seg_32bit << LINUX_ENTRY_B_SEG32BIT) | \
+ ((info)->useable << LINUX_ENTRY_B_USEABLE) | \
+ ((info)->limit_in_pages << LINUX_ENTRY_B_LIMIT) | 0x7000)
+
+#define LINUX_LDT_empty(info) \
+ ((info)->base_addr == 0 && \
+ (info)->limit == 0 && \
+ (info)->contents == 0 && \
+ (info)->seg_not_present == 1 && \
+ (info)->read_exec_only == 1 && \
+ (info)->seg_32bit == 0 && \
+ (info)->limit_in_pages == 0 && \
+ (info)->useable == 0)
+
+/*
+ * Macros for converting segments.
+ * They do the same as those in arch/i386/kernel/process.c in Linux.
+ */
+#define LINUX_GET_BASE(desc) \
+ ((((desc)->a >> 16) & LINUX_LOWERWORD) | \
+ (((desc)->b << 16) & 0x00ff0000) | \
+ ((desc)->b & 0xff000000))
+
+#define LINUX_GET_LIMIT(desc) \
+ (((desc)->a & LINUX_LOWERWORD) | \
+ ((desc)->b & 0xf0000))
+
+#define LINUX_GET_32BIT(desc) \
+ (((desc)->b >> LINUX_ENTRY_B_SEG32BIT) & 1)
+#define LINUX_GET_CONTENTS(desc) \
+ (((desc)->b >> LINUX_ENTRY_B_CONTENTS) & 3)
+#define LINUX_GET_WRITABLE(desc) \
+ (((desc)->b >> LINUX_ENTRY_B_READ_EXEC_ONLY) & 1)
+#define LINUX_GET_LIMIT_PAGES(desc) \
+ (((desc)->b >> LINUX_ENTRY_B_LIMIT) & 1)
+#define LINUX_GET_PRESENT(desc) \
+ (((desc)->b >> LINUX_ENTRY_B_SEG_NOT_PRESENT) & 1)
+#define LINUX_GET_USEABLE(desc) \
+ (((desc)->b >> LINUX_ENTRY_B_USEABLE) & 1)
+
+#define LINUX_CLOCK_REALTIME 0
+#define LINUX_CLOCK_MONOTONIC 1
+#define LINUX_CLOCK_PROCESS_CPUTIME_ID 2
+#define LINUX_CLOCK_THREAD_CPUTIME_ID 3
+#define LINUX_CLOCK_REALTIME_HR 4
+#define LINUX_CLOCK_MONOTONIC_HR 5
+
+typedef int l_timer_t;
+typedef int l_mqd_t;
+
+#define LINUX_CLONE_VM 0x00000100
+#define LINUX_CLONE_FS 0x00000200
+#define LINUX_CLONE_FILES 0x00000400
+#define LINUX_CLONE_SIGHAND 0x00000800
+#define LINUX_CLONE_PID 0x00001000 /* No longer exist in Linux */
+#define LINUX_CLONE_VFORK 0x00004000
+#define LINUX_CLONE_PARENT 0x00008000
+#define LINUX_CLONE_THREAD 0x00010000
+#define LINUX_CLONE_SETTLS 0x00080000
+#define LINUX_CLONE_PARENT_SETTID 0x00100000
+#define LINUX_CLONE_CHILD_CLEARTID 0x00200000
+#define LINUX_CLONE_CHILD_SETTID 0x01000000
+
+#define LINUX_THREADING_FLAGS \
+ (LINUX_CLONE_VM | LINUX_CLONE_FS | LINUX_CLONE_FILES | \
+ LINUX_CLONE_SIGHAND | LINUX_CLONE_THREAD)
+
+#endif /* !_I386_LINUX_H_ */
More information about the Midnightbsd-cvs
mailing list