diff options
author | marcel <marcel@FreeBSD.org> | 2001-09-08 19:07:04 +0000 |
---|---|---|
committer | marcel <marcel@FreeBSD.org> | 2001-09-08 19:07:04 +0000 |
commit | df61d9eb64550a7afc1b41ccc9e0261af45c98c1 (patch) | |
tree | 684b7cfa2a29ef6b8c2244d13f69d58e1e89c819 | |
parent | bc484946ce384f7bb29f0d6da97f0d3eb7084574 (diff) | |
download | FreeBSD-src-df61d9eb64550a7afc1b41ccc9e0261af45c98c1.zip FreeBSD-src-df61d9eb64550a7afc1b41ccc9e0261af45c98c1.tar.gz |
Round of cleanups and enhancements. These include (in random order):
o Introduce private types for use in linux syscalls for two reasons:
1. establish type independence for ease in porting and,
2. provide a visual queue as to which syscalls have proper
prototypes to further cleanup the i386/alpha split.
Linuxulator types are prefixed by 'l_'. void and char have not
been "virtualized".
o Provide dummy functions for all syscalls and remove dummy functions
or implementations of truely obsolete syscalls.
o Sanitize the shm*, sem* and msg* syscalls.
o Make a first attempt to implement the linux_sysctl syscall. At this
time it only returns one MIB (KERN_VERSION), but most importantly,
it tells us when we need to add additional sysctls :-)
o Bump the kenel version up to 2.4.2 (this is not the same as the
KERN_VERSION MIB, BTW).
o Implement new syscalls, of which most are specific to i386. Our
syscall table is now up to date with Linux 2.4.2. Some highlights:
- Implement the 32-bit uid_t and gid_t bases syscalls.
- Implement a couple of 64-bit file size/offset bases syscalls.
o Fix or improve numerous syscalls and prototypes.
o Reduce style(9) violations while I'm here. Especially indentation
inconsistencies within the same file are addressed. Re-indenting
did not obfuscate actual changes to the extend that it could not
be combined.
NOTE: I spend some time testing these changes and found that if there
were regressions, they were not caused by these changes AFAICT.
It was observed that installing a RH 7.1 runtime environment
did make matters worse. Hangs and/or reboots have been observed
with and without these changes, so when it failed to make life
better in cases it doesn't look like it made it worse.
27 files changed, 3655 insertions, 2748 deletions
diff --git a/sys/alpha/linux/linux.h b/sys/alpha/linux/linux.h index af3f3ac..6ea22e6 100644 --- a/sys/alpha/linux/linux.h +++ b/sys/alpha/linux/linux.h @@ -38,19 +38,70 @@ */ extern u_char linux_debug_map[]; #define ldebug(name) isclr(linux_debug_map, LINUX_SYS_linux_ ## name) -#define ARGS(nm, fmt) "Linux-emul(%ld): "#nm"("fmt")\n", (long)p->p_pid -#define LMSG(fmt) "Linux-emul(%ld): "fmt"\n", (long)p->p_pid +#define ARGS(nm, fmt) "linux(%ld): "#nm"("fmt")\n", (long)p->p_pid +#define LMSG(fmt) "linux(%ld): "fmt"\n", (long)p->p_pid #ifdef MALLOC_DECLARE MALLOC_DECLARE(M_LINUX); #endif +typedef int l_int; +typedef int64_t l_long; +typedef int64_t l_longlong; +typedef short l_short; +typedef unsigned int l_uint; +typedef uint64_t l_ulong; +typedef uint64_t l_ulonglong; +typedef unsigned short l_ushort; + +typedef char *l_caddr_t; +typedef l_long l_clock_t; +typedef l_int l_daddr_t; +typedef l_uint l_dev_t; +typedef l_uint l_gid_t; +typedef l_ushort l_gid16_t; +typedef l_uint l_ino_t; +typedef l_int l_key_t; +typedef l_long l_loff_t; +typedef l_uint l_mode_t; +typedef l_long l_off_t; +typedef l_int l_pid_t; +typedef l_ulong l_size_t; +typedef l_long l_suseconds_t; +typedef l_long l_time_t; +typedef l_uint l_uid_t; +typedef l_ushort l_uid16_t; + +typedef struct { + l_int val[2]; +} l_fsid_t; + +typedef struct { + l_time_t tv_sec; + l_suseconds_t tv_usec; +} l_timeval; + +#define l_fd_set fd_set + /* * Miscellaneous */ #define LINUX_NAME_MAX 255 #define LINUX_MAX_UTSNAME 65 +#define LINUX_CTL_MAXNAME 10 + +struct l___sysctl_args +{ + l_int *name; + l_int nlen; + void *oldval; + l_size_t *oldlenp; + void *newval; + l_size_t newlen; + l_ulong __spare[4]; +}; + /* Scheduling policies */ #define LINUX_SCHED_OTHER 0 #define LINUX_SCHED_FIFO 1 @@ -77,25 +128,32 @@ MALLOC_DECLARE(M_LINUX); #define LINUX_MAP_FIXED 0x0100 #define LINUX_MAP_GROWSDOWN 0x1000 -typedef char * linux_caddr_t; -typedef long linux_clock_t; -typedef u_short linux_dev_t; -typedef u_short linux_gid_t; -typedef u_long linux_ino_t; -typedef int linux_key_t; /* XXX */ -typedef u_short linux_mode_t; -typedef u_short linux_nlink_t; -typedef long linux_off_t; -typedef int linux_pid_t; -/*typedef u_int linux_size_t; */ -typedef long linux_time_t; -typedef u_short linux_uid_t; +/* + * stat family of syscalls + */ +struct l_timespec { + l_ulong tv_sec; +}; -typedef struct { - int val[2]; -} linux_fsid_t; +struct l_newstat { + l_uint st_dev; + l_uint st_ino; + l_uint st_mode; + l_uint st_nlink; + l_uint st_uid; + l_uint st_gid; + l_uint st_rdev; + l_long st_size; + struct l_timespec st_atimespec; + struct l_timespec st_mtimespec; + struct l_timespec st_ctimespec; + l_uint st_blksize; + l_int st_blocks; + l_uint st_flags; + l_uint st_gen; +}; -struct linux_new_utsname { +struct l_new_utsname { char sysname[LINUX_MAX_UTSNAME]; char nodename[LINUX_MAX_UTSNAME]; char release[LINUX_MAX_UTSNAME]; @@ -139,10 +197,12 @@ struct linux_new_utsname { #define LINUX_SIGIO 29 #define LINUX_SIGPOLL LINUX_SIGIO #define LINUX_SIGPWR 30 -#define LINUX_SIGTBLSZ 31 -#define LINUX_SIGUNUSED LINUX_SIGTBLSZ +#define LINUX_SIGUNUSED 31 -#define LINUX_NSIG 64 +#define LINUX_SIGTBLSZ 31 +#define LINUX_NSIG_WORDS 2 +#define LINUX_NBPW 32 +#define LINUX_NSIG (LINUX_NBPW * LINUX_NSIG_WORDS) /* sigaction flags */ #define LINUX_SA_ONSTACK 0x00000001 @@ -169,58 +229,49 @@ struct linux_new_utsname { #define LINUX_MINSIGSTKSZ 4096 -typedef void (*linux_handler_t)(int); -typedef u_long linux_osigset_t; +typedef void (*l_handler_t)(l_int); +typedef l_ulong l_osigset_t; typedef struct { - u_int __bits[2]; -/* u_long __bits[1];*/ -} linux_sigset_t; + l_uint __bits[LINUX_NSIG_WORDS]; +} l_sigset_t; typedef struct { - linux_handler_t lsa_handler; - linux_osigset_t lsa_mask; - u_long lsa_flags; + l_handler_t lsa_handler; + l_osigset_t lsa_mask; + l_ulong lsa_flags; void (*lsa_restorer)(void); -} linux_osigaction_t; +} l_osigaction_t; typedef struct { - linux_handler_t lsa_handler; - u_long lsa_flags; + l_handler_t lsa_handler; + l_ulong lsa_flags; void (*lsa_restorer)(void); - linux_sigset_t lsa_mask; -} linux_sigaction_t; - -#if 0 -typedef struct { - void *ss_sp; - int ss_flags; - linux_size_t ss_size; -} linux_stack_t; -#endif + l_sigset_t lsa_mask; +} l_sigaction_t; /* * The Linux sigcontext */ -struct linux_sigcontext { - long sc_onstack; - long sc_mask; - long sc_pc; - long sc_ps; - long sc_regs[32]; - long sc_ownedfp; - long sc_fpregs[32]; - u_long sc_fpcr; - u_long sc_fp_control; - u_long sc_reserved1, sc_reserved2; - u_long sc_ssize; - char * sc_sbase; - u_long sc_traparg_a0; - u_long sc_traparg_a1; - u_long sc_traparg_a2; - u_long sc_fp_trap_pc; - u_long sc_fp_trigger_sum; - u_long sc_fp_trigger_inst; +struct l_sigcontext { + l_long sc_onstack; + l_long sc_mask; + l_long sc_pc; + l_long sc_ps; + l_long sc_regs[32]; + l_long sc_ownedfp; + l_long sc_fpregs[32]; + l_ulong sc_fpcr; + l_ulong sc_fp_control; + l_ulong sc_reserved1, sc_reserved2; + l_ulong sc_ssize; + char *sc_sbase; + l_ulong sc_traparg_a0; + l_ulong sc_traparg_a1; + l_ulong sc_traparg_a2; + l_ulong sc_fp_trap_pc; + l_ulong sc_fp_trigger_sum; + l_ulong sc_fp_trigger_inst; }; /* @@ -229,10 +280,10 @@ struct linux_sigcontext { * This means that we need to pass the pointer to the handler too. * It is appended to the frame to not interfere with the rest of it. */ -struct linux_sigframe { - int sf_sig; - struct linux_sigcontext sf_sc; - linux_handler_t sf_handler; +struct l_sigframe { + l_int sf_sig; + struct l_sigcontext sf_sc; + l_handler_t sf_handler; }; /* @@ -333,6 +384,14 @@ int linux_ioctl_unregister_handler(struct linux_ioctl_handler *h); #define LINUX_SETVAL 16 #define LINUX_SETALL 17 +union l_semun { + l_int val; + struct l_semid_ds *buf; + l_ushort *array; + struct l_seminfo *__buf; + void *__pad; +}; + /* * Socket defines */ @@ -393,41 +452,40 @@ int linux_ioctl_unregister_handler(struct linux_ioctl_handler *h); #define LINUX_IP_ADD_MEMBERSHIP 35 #define LINUX_IP_DROP_MEMBERSHIP 36 -struct linux_sockaddr { - u_short sa_family; - char sa_data[14]; +struct l_sockaddr { + l_ushort sa_family; + char sa_data[14]; }; -struct linux_ifmap { - u_long mem_start; - u_long mem_end; - u_short base_addr; - u_char irq; - u_char dma; - u_char port; +struct l_ifmap { + l_ulong mem_start; + l_ulong mem_end; + l_ushort base_addr; + u_char irq; + u_char dma; + u_char port; }; #define LINUX_IFHWADDRLEN 6 #define LINUX_IFNAMSIZ 16 -struct linux_ifreq { +struct l_ifreq { union { char ifrn_name[LINUX_IFNAMSIZ]; /* if name, e.g. "en0" */ } ifr_ifrn; union { - struct linux_sockaddr ifru_addr; - struct linux_sockaddr ifru_dstaddr; - struct linux_sockaddr ifru_broadaddr; - struct linux_sockaddr ifru_netmask; - struct linux_sockaddr ifru_hwaddr; - short ifru_flags; - int ifru_metric; - int ifru_mtu; - struct linux_ifmap ifru_map; - char ifru_slave[LINUX_IFNAMSIZ]; /* Just fits the size */ - /* linux_caddr_t ifru_data; */ - caddr_t ifru_data; + struct l_sockaddr ifru_addr; + struct l_sockaddr ifru_dstaddr; + struct l_sockaddr ifru_broadaddr; + struct l_sockaddr ifru_netmask; + struct l_sockaddr ifru_hwaddr; + l_short ifru_flags; + l_int ifru_metric; + l_int ifru_mtu; + struct l_ifmap ifru_map; + char ifru_slave[LINUX_IFNAMSIZ]; + l_caddr_t ifru_data; } ifr_ifru; }; @@ -437,7 +495,6 @@ struct linux_ifreq { extern char linux_sigcode[]; extern int linux_szsigcode; -/*extern const char linux_emul_path[];*/ extern struct sysent linux_sysent[LINUX_SYS_MAXSYSCALL]; extern struct sysentvec linux_sysvec; @@ -447,4 +504,25 @@ extern struct sysentvec elf_linux_sysvec; struct image_params; struct trapframe; +/* + * poll() + */ +#define LINUX_POLLIN 0x0001 +#define LINUX_POLLPRI 0x0002 +#define LINUX_POLLOUT 0x0004 +#define LINUX_POLLERR 0x0008 +#define LINUX_POLLHUP 0x0010 +#define LINUX_POLLNVAL 0x0020 +#define LINUX_POLLRDNORM 0x0040 +#define LINUX_POLLRDBAND 0x0080 +#define LINUX_POLLWRNORM 0x0100 +#define LINUX_POLLWRBAND 0x0200 +#define LINUX_POLLMSG 0x0400 + +struct l_pollfd { + l_int fd; + l_short events; + l_short revents; +}; + #endif /* !_ALPHA_LINUX_LINUX_H_ */ diff --git a/sys/alpha/linux/linux_dummy.c b/sys/alpha/linux/linux_dummy.c index 820c7ab..39fb142 100644 --- a/sys/alpha/linux/linux_dummy.c +++ b/sys/alpha/linux/linux_dummy.c @@ -37,11 +37,9 @@ #include <alpha/linux/linux_proto.h> #include <compat/linux/linux_util.h> - DUMMY(ptrace); -DUMMY(ksyslog); +DUMMY(syslog); DUMMY(vhangup); -DUMMY(idle); DUMMY(swapoff); DUMMY(sysinfo); DUMMY(adjtimex); @@ -52,14 +50,11 @@ DUMMY(get_kernel_syms); DUMMY(quotactl); DUMMY(bdflush); DUMMY(sysfs); -DUMMY(afs_syscall); DUMMY(setfsuid); DUMMY(setfsgid); DUMMY(getsid); -DUMMY(sysctl); DUMMY(query_module); DUMMY(nfsservctl); -DUMMY(getresgid); DUMMY(prctl); DUMMY(rt_sigpending); DUMMY(rt_sigtimedwait); @@ -67,3 +62,24 @@ DUMMY(rt_sigqueueinfo); DUMMY(capget); DUMMY(capset); DUMMY(sendfile); + +DUMMY(chown); +DUMMY(getdtablesize); +DUMMY(gethostname); +DUMMY(getpagesize); +DUMMY(lchown); +DUMMY(madvise); +DUMMY(mincore); +DUMMY(old_adjtimex); +DUMMY(pciconfig_iobase); +DUMMY(pciconfig_read); +DUMMY(pciconfig_write); +DUMMY(pivot_root); +DUMMY(recvmsg); +DUMMY(sendmsg); +DUMMY(sethae); +DUMMY(sigaltstack); +DUMMY(sigpending); +DUMMY(socketpair); +DUMMY(utimes); + diff --git a/sys/alpha/linux/linux_genassym.c b/sys/alpha/linux/linux_genassym.c index d66e6f2..654456f 100644 --- a/sys/alpha/linux/linux_genassym.c +++ b/sys/alpha/linux/linux_genassym.c @@ -7,7 +7,5 @@ #include <alpha/linux/linux.h> -ASSYM(LINUX_SIGF_HANDLER, offsetof(struct linux_sigframe, sf_handler)); -ASSYM(LINUX_SIGF_SC, offsetof(struct linux_sigframe, sf_sc)); -/* ASSYM(LINUX_SC_GS, offsetof(struct linux_sigcontext, sc_gs)); */ -/* ASSYM(LINUX_SC_EFLAGS, offsetof(struct linux_sigcontext, sc_eflags)); */ +ASSYM(LINUX_SIGF_HANDLER, offsetof(struct l_sigframe, sf_handler)); +ASSYM(LINUX_SIGF_SC, offsetof(struct l_sigframe, sf_sc)); diff --git a/sys/alpha/linux/linux_machdep.c b/sys/alpha/linux/linux_machdep.c index 40740b4..d2310c2 100644 --- a/sys/alpha/linux/linux_machdep.c +++ b/sys/alpha/linux/linux_machdep.c @@ -247,7 +247,7 @@ linux_mmap(struct proc *p, struct linux_mmap_args *linux_args) */ /* This gives us TOS */ - bsd_args.addr = linux_args->addr + linux_args->len; + bsd_args.addr = (caddr_t)(linux_args->addr + linux_args->len); /* This gives us our maximum stack size */ if (linux_args->len > STACK_SIZE - GUARD_SIZE) @@ -264,7 +264,7 @@ linux_mmap(struct proc *p, struct linux_mmap_args *linux_args) bsd_args.addr -= bsd_args.len; bsd_args.addr = (caddr_t)round_page(bsd_args.addr); /* XXXX */ } else { - bsd_args.addr = linux_args->addr; + bsd_args.addr = (caddr_t)linux_args->addr; bsd_args.len = linux_args->len; } @@ -299,7 +299,7 @@ linux_rt_sigsuspend(p, uap) struct linux_rt_sigsuspend_args *uap; { int error; - linux_sigset_t lmask; + l_sigset_t lmask; sigset_t *bmask; struct sigsuspend_args bsd; caddr_t sg; @@ -311,10 +311,10 @@ linux_rt_sigsuspend(p, uap) printf(ARGS(rt_sigsuspend, "%p, %d"), (void *)uap->newset, uap->sigsetsize); #endif - if (uap->sigsetsize != sizeof(linux_sigset_t)) + if (uap->sigsetsize != sizeof(l_sigset_t)) return (EINVAL); - error = copyin(uap->newset, &lmask, sizeof(linux_sigset_t)); + error = copyin(uap->newset, &lmask, sizeof(l_sigset_t)); if (error) return (error); @@ -373,8 +373,6 @@ static unsigned int linux_to_bsd_resource[LINUX_RLIM_NLIMITS] = { RLIMIT_NPROC, RLIMIT_MEMLOCK }; -int dosetrlimit __P((struct proc *p, u_int which, struct rlimit *limp)); - int linux_setrlimit(p, uap) struct proc *p; diff --git a/sys/alpha/linux/linux_proto.h b/sys/alpha/linux/linux_proto.h index 63829ab..9caa5ea 100644 --- a/sys/alpha/linux/linux_proto.h +++ b/sys/alpha/linux/linux_proto.h @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: src/sys/alpha/linux/syscalls.master,v 1.45 2001/02/20 03:47:59 gallatin Exp + * created from FreeBSD: src/sys/alpha/linux/syscalls.master,v 1.48 2001/09/08 18:49:31 marcel Exp */ #ifndef _LINUX_SYSPROTO_H_ @@ -18,517 +18,581 @@ struct proc; #define PAD_(t) (sizeof(register_t) <= sizeof(t) ? \ 0 : sizeof(register_t) - sizeof(t)) -struct linux_fork_args { +#if BYTE_ORDER == LITTLE_ENDIAN +#define PADL_(t) 0 +#define PADR_(t) PAD_(t) +#else +#define PADL_(t) PAD_(t) +#define PADR_(t) 0 +#endif + +struct linux_fork_args { register_t dummy; }; -struct osf1_wait4_args { - int pid; char pid_[PAD_(int)]; - int * status; char status_[PAD_(int *)]; - int options; char options_[PAD_(int)]; - struct osf1_rusage * rusage; char rusage_[PAD_(struct osf1_rusage *)]; -}; -struct linux_link_args { - char * path; char path_[PAD_(char *)]; - char * to; char to_[PAD_(char *)]; +struct osf1_wait4_args { + char pid_l_[PADL_(int)]; int pid; char pid_r_[PADR_(int)]; + char status_l_[PADL_(int *)]; int * status; char status_r_[PADR_(int *)]; + char options_l_[PADL_(int)]; int options; char options_r_[PADR_(int)]; + char rusage_l_[PADL_(struct osf1_rusage *)]; struct osf1_rusage * rusage; char rusage_r_[PADR_(struct osf1_rusage *)]; }; -struct linux_unlink_args { - char * path; char path_[PAD_(char *)]; +struct linux_link_args { + 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_chdir_args { - char * path; char path_[PAD_(char *)]; +struct linux_unlink_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; }; -struct linux_mknod_args { - char * path; char path_[PAD_(char *)]; - int mode; char mode_[PAD_(int)]; - int dev; char dev_[PAD_(int)]; +struct linux_chdir_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; }; -struct linux_chmod_args { - char * path; char path_[PAD_(char *)]; - int mode; char mode_[PAD_(int)]; +struct linux_mknod_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char mode_l_[PADL_(l_int)]; l_int mode; char mode_r_[PADR_(l_int)]; + char dev_l_[PADL_(l_dev_t)]; l_dev_t dev; char dev_r_[PADR_(l_dev_t)]; }; -struct linux_chown_args { - char * path; char path_[PAD_(char *)]; - int uid; char uid_[PAD_(int)]; - int gid; char gid_[PAD_(int)]; +struct linux_chmod_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char mode_l_[PADL_(l_mode_t)]; l_mode_t mode; char mode_r_[PADR_(l_mode_t)]; }; -struct linux_brk_args { - char * dsend; char dsend_[PAD_(char *)]; +struct linux_chown_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char uid_l_[PADL_(l_uid_t)]; l_uid_t uid; char uid_r_[PADR_(l_uid_t)]; + char gid_l_[PADL_(l_gid_t)]; l_gid_t gid; char gid_r_[PADR_(l_gid_t)]; }; -struct linux_lseek_args { - int fdes; char fdes_[PAD_(int)]; - long off; char off_[PAD_(long)]; - int whence; char whence_[PAD_(int)]; +struct linux_brk_args { + char dsend_l_[PADL_(l_ulong)]; l_ulong dsend; char dsend_r_[PADR_(l_ulong)]; }; -struct linux_umount2_args { - char * path; char path_[PAD_(char *)]; - int flags; char flags_[PAD_(int)]; +struct linux_lseek_args { + char fdes_l_[PADL_(l_uint)]; l_uint fdes; char fdes_r_[PADR_(l_uint)]; + char off_l_[PADL_(l_off_t)]; l_off_t off; char off_r_[PADR_(l_off_t)]; + char whence_l_[PADL_(l_int)]; l_int whence; char whence_r_[PADR_(l_int)]; }; -struct linux_ptrace_args { +struct linux_getpid_args { register_t dummy; }; -struct linux_access_args { - char * path; char path_[PAD_(char *)]; - int flags; char flags_[PAD_(int)]; +struct linux_umount_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char flags_l_[PADL_(l_int)]; l_int flags; char flags_r_[PADR_(l_int)]; }; -struct linux_kill_args { - int pid; char pid_[PAD_(int)]; - int signum; char signum_[PAD_(int)]; +struct linux_getuid_args { + register_t dummy; }; -struct linux_open_args { - char * path; char path_[PAD_(char *)]; - int flags; char flags_[PAD_(int)]; - int mode; char mode_[PAD_(int)]; +struct linux_ptrace_args { + register_t dummy; }; -struct osf1_sigprocmask_args { - int how; char how_[PAD_(int)]; - u_long mask; char mask_[PAD_(u_long)]; +struct linux_access_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char flags_l_[PADL_(l_int)]; l_int flags; char flags_r_[PADR_(l_int)]; }; -struct linux_ioctl_args { - int fd; char fd_[PAD_(int)]; - u_long cmd; char cmd_[PAD_(u_long)]; - u_long arg; char arg_[PAD_(u_long)]; +struct linux_kill_args { + char pid_l_[PADL_(l_int)]; l_int pid; char pid_r_[PADR_(l_int)]; + char signum_l_[PADL_(l_int)]; l_int signum; char signum_r_[PADR_(l_int)]; }; -struct linux_symlink_args { - char * path; char path_[PAD_(char *)]; - char * to; char to_[PAD_(char *)]; +struct linux_open_args { + char path_l_[PADL_(char *)]; char * path; char path_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_readlink_args { - char * name; char name_[PAD_(char *)]; - char * buf; char buf_[PAD_(char *)]; - int count; char count_[PAD_(int)]; +struct linux_getgid_args { + register_t dummy; }; -struct linux_execve_args { - char * path; char path_[PAD_(char *)]; - char ** argp; char argp_[PAD_(char **)]; - char ** envp; char envp_[PAD_(char **)]; +struct osf1_sigprocmask_args { + char how_l_[PADL_(int)]; int how; char how_r_[PADR_(int)]; + char mask_l_[PADL_(u_long)]; u_long mask; char mask_r_[PADR_(u_long)]; }; -struct linux_vfork_args { +struct linux_sigpending_args { register_t dummy; }; -struct linux_newstat_args { - char * path; char path_[PAD_(char *)]; - struct linux_newstat * buf; char buf_[PAD_(struct linux_newstat *)]; +struct linux_ioctl_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char cmd_l_[PADL_(l_uint)]; l_uint cmd; char cmd_r_[PADR_(l_uint)]; + char arg_l_[PADL_(l_ulong)]; l_ulong arg; char arg_r_[PADR_(l_ulong)]; }; -struct linux_newlstat_args { - char * path; char path_[PAD_(char *)]; - struct linux_newstat * buf; char buf_[PAD_(struct linux_newstat *)]; +struct linux_symlink_args { + 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_mmap_args { - caddr_t addr; char addr_[PAD_(caddr_t)]; - size_t len; char len_[PAD_(size_t)]; - int prot; char prot_[PAD_(int)]; - int flags; char flags_[PAD_(int)]; - int fd; char fd_[PAD_(int)]; - off_t pos; char pos_[PAD_(off_t)]; +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 *)]; + char count_l_[PADL_(l_int)]; l_int count; char count_r_[PADR_(l_int)]; }; -struct linux_munmap_args { - caddr_t addr; char addr_[PAD_(caddr_t)]; - u_long len; char len_[PAD_(u_long)]; +struct linux_execve_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char argp_l_[PADL_(char **)]; char ** argp; char argp_r_[PADR_(char **)]; + char envp_l_[PADL_(char **)]; char ** envp; char envp_r_[PADR_(char **)]; }; -struct linux_mprotect_args { - caddr_t addr; char addr_[PAD_(caddr_t)]; - size_t len; char len_[PAD_(size_t)]; - int prot; char prot_[PAD_(int)]; +struct linux_getpagesize_args { + register_t dummy; }; -struct linux_vhangup_args { +struct linux_vfork_args { register_t dummy; }; -struct linux_setgroups_args { - u_int gidsetsize; char gidsetsize_[PAD_(u_int)]; - linux_gid_t * gidset; char gidset_[PAD_(linux_gid_t *)]; +struct linux_newstat_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char buf_l_[PADL_(struct l_newstat *)]; struct l_newstat * buf; char buf_r_[PADR_(struct l_newstat *)]; }; -struct linux_getgroups_args { - u_int gidsetsize; char gidsetsize_[PAD_(u_int)]; - linux_gid_t * gidset; char gidset_[PAD_(linux_gid_t *)]; +struct linux_newlstat_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char buf_l_[PADL_(struct l_newstat *)]; struct l_newstat * buf; char buf_r_[PADR_(struct l_newstat *)]; }; -struct linux_setpgid_args { - int pid; char pid_[PAD_(int)]; - int pgid; char pgid_[PAD_(int)]; +struct linux_mmap_args { + char addr_l_[PADL_(l_ulong)]; l_ulong addr; char addr_r_[PADR_(l_ulong)]; + char len_l_[PADL_(l_ulong)]; l_ulong len; char len_r_[PADR_(l_ulong)]; + char prot_l_[PADL_(l_ulong)]; l_ulong prot; char prot_r_[PADR_(l_ulong)]; + char flags_l_[PADL_(l_ulong)]; l_ulong flags; char flags_r_[PADR_(l_ulong)]; + char fd_l_[PADL_(l_ulong)]; l_ulong fd; char fd_r_[PADR_(l_ulong)]; + char pos_l_[PADL_(l_ulong)]; l_ulong pos; char pos_r_[PADR_(l_ulong)]; }; -struct osf1_setitimer_args { - u_int which; char which_[PAD_(u_int)]; - struct itimerval * itv; char itv_[PAD_(struct itimerval *)]; - struct itimerval * oitv; char oitv_[PAD_(struct itimerval *)]; -}; -struct linux_newfstat_args { - int fd; char fd_[PAD_(int)]; - struct linux_newstat * buf; char buf_[PAD_(struct linux_newstat *)]; -}; -struct linux_fcntl_args { - int fd; char fd_[PAD_(int)]; - int cmd; char cmd_[PAD_(int)]; - u_long arg; char arg_[PAD_(u_long)]; -}; -struct osf1_select_args { - u_int nd; char nd_[PAD_(u_int)]; - fd_set * in; char in_[PAD_(fd_set *)]; - fd_set * ou; char ou_[PAD_(fd_set *)]; - fd_set * ex; char ex_[PAD_(fd_set *)]; - struct timeval * tv; char tv_[PAD_(struct timeval *)]; -}; -struct osf1_socket_args { - int domain; char domain_[PAD_(int)]; - int type; char type_[PAD_(int)]; - int protocol; char protocol_[PAD_(int)]; -}; -struct linux_connect_args { - int s; char s_[PAD_(int)]; - caddr_t name; char name_[PAD_(caddr_t)]; - int namelen; char namelen_[PAD_(int)]; -}; -struct osf1_sigreturn_args { - struct osigcontext * sigcntxp; char sigcntxp_[PAD_(struct osigcontext *)]; -}; -struct osf1_sigsuspend_args { - unsigned long ss; char ss_[PAD_(unsigned long)]; -}; -struct osf1_gettimeofday_args { - struct timeval * tp; char tp_[PAD_(struct timeval *)]; - struct timezone * tzp; char tzp_[PAD_(struct timezone *)]; -}; -struct osf1_getrusage_args { - long who; char who_[PAD_(long)]; - void * rusage; char rusage_[PAD_(void *)]; -}; -struct linux_rename_args { - char * from; char from_[PAD_(char *)]; - char * to; char to_[PAD_(char *)]; -}; -struct linux_truncate_args { - char * path; char path_[PAD_(char *)]; - long length; char length_[PAD_(long)]; -}; -struct osf1_sendto_args { - int s; char s_[PAD_(int)]; - caddr_t buf; char buf_[PAD_(caddr_t)]; - size_t len; char len_[PAD_(size_t)]; - int flags; char flags_[PAD_(int)]; - struct sockaddr * to; char to_[PAD_(struct sockaddr *)]; - int tolen; char tolen_[PAD_(int)]; -}; -struct linux_mkdir_args { - char * path; char path_[PAD_(char *)]; - int mode; char mode_[PAD_(int)]; -}; -struct linux_rmdir_args { - char * path; char path_[PAD_(char *)]; -}; -struct linux_getrlimit_args { - u_int resource; char resource_[PAD_(u_int)]; - struct rlimit * rlim; char rlim_[PAD_(struct rlimit *)]; -}; -struct linux_setrlimit_args { - u_int resource; char resource_[PAD_(u_int)]; - struct rlimit * rlim; char rlim_[PAD_(struct rlimit *)]; -}; -struct linux_quotactl_args { - register_t dummy; -}; -struct osf1_sigaction_args { - int sig; char sig_[PAD_(int)]; - struct osf1_sigaction * nsa; char nsa_[PAD_(struct osf1_sigaction *)]; - struct osf1_sigaction * osa; char osa_[PAD_(struct osf1_sigaction *)]; -}; -struct linux_msgctl_args { - int arg1; char arg1_[PAD_(int)]; - int arg2; char arg2_[PAD_(int)]; - caddr_t ptr; char ptr_[PAD_(caddr_t)]; -}; -struct linux_msgget_args { - int arg1; char arg1_[PAD_(int)]; - int arg2; char arg2_[PAD_(int)]; -}; -struct linux_msgrcv_args { - int arg1; char arg1_[PAD_(int)]; - caddr_t ptr; char ptr_[PAD_(caddr_t)]; - size_t arg2; char arg2_[PAD_(size_t)]; - long arg3; char arg3_[PAD_(long)]; - int arg4; char arg4_[PAD_(int)]; -}; -struct linux_msgsnd_args { - int arg1; char arg1_[PAD_(int)]; - caddr_t ptr; char ptr_[PAD_(caddr_t)]; - size_t arg2; char arg2_[PAD_(size_t)]; - long arg3; char arg3_[PAD_(long)]; - int arg4; char arg4_[PAD_(int)]; -}; -struct linux_semctl_args { - int arg1; char arg1_[PAD_(int)]; - int arg2; char arg2_[PAD_(int)]; - int arg3; char arg3_[PAD_(int)]; - caddr_t ptr; char ptr_[PAD_(caddr_t)]; +struct linux_munmap_args { + char addr_l_[PADL_(l_ulong)]; l_ulong addr; char addr_r_[PADR_(l_ulong)]; + char len_l_[PADL_(l_size_t)]; l_size_t len; char len_r_[PADR_(l_size_t)]; }; -struct linux_semget_args { - int arg1; char arg1_[PAD_(int)]; - int arg2; char arg2_[PAD_(int)]; - int arg3; char arg3_[PAD_(int)]; +struct linux_mprotect_args { + char addr_l_[PADL_(l_ulong)]; l_ulong addr; char addr_r_[PADR_(l_ulong)]; + char len_l_[PADL_(l_size_t)]; l_size_t len; char len_r_[PADR_(l_size_t)]; + char prot_l_[PADL_(l_ulong)]; l_ulong prot; char prot_r_[PADR_(l_ulong)]; }; -struct linux_semop_args { - int arg1; char arg1_[PAD_(int)]; - caddr_t ptr; char ptr_[PAD_(caddr_t)]; - int arg2; char arg2_[PAD_(int)]; +struct linux_madvise_args { + register_t dummy; }; -struct linux_lchown_args { - char * path; char path_[PAD_(char *)]; - int uid; char uid_[PAD_(int)]; - int gid; char gid_[PAD_(int)]; +struct linux_vhangup_args { + register_t dummy; }; -struct linux_shmat_args { - int arg1; char arg1_[PAD_(int)]; - caddr_t ptr; char ptr_[PAD_(caddr_t)]; - int arg2; char arg2_[PAD_(int)]; - caddr_t arg3; char arg3_[PAD_(caddr_t)]; +struct linux_setgroups_args { + char gidsetsize_l_[PADL_(l_int)]; l_int gidsetsize; char gidsetsize_r_[PADR_(l_int)]; + char grouplist_l_[PADL_(l_gid_t *)]; l_gid_t * grouplist; char grouplist_r_[PADR_(l_gid_t *)]; }; -struct linux_shmctl_args { - int arg1; char arg1_[PAD_(int)]; - int arg2; char arg2_[PAD_(int)]; - caddr_t ptr; char ptr_[PAD_(caddr_t)]; +struct linux_getgroups_args { + char gidsetsize_l_[PADL_(l_int)]; l_int gidsetsize; char gidsetsize_r_[PADR_(l_int)]; + char grouplist_l_[PADL_(l_gid_t *)]; l_gid_t * grouplist; char grouplist_r_[PADR_(l_gid_t *)]; }; -struct linux_shmdt_args { - caddr_t ptr; char ptr_[PAD_(caddr_t)]; +struct linux_setpgid_args { + char pid_l_[PADL_(l_pid_t)]; l_pid_t pid; char pid_r_[PADR_(l_pid_t)]; + char pgid_l_[PADL_(l_pid_t)]; l_pid_t pgid; char pgid_r_[PADR_(l_pid_t)]; }; -struct linux_shmget_args { - int arg1; char arg1_[PAD_(int)]; - size_t arg2; char arg2_[PAD_(size_t)]; - int arg3; char arg3_[PAD_(int)]; +struct osf1_setitimer_args { + char which_l_[PADL_(u_int)]; u_int which; char which_r_[PADR_(u_int)]; + char itv_l_[PADL_(struct itimerval *)]; struct itimerval * itv; char itv_r_[PADR_(struct itimerval *)]; + char oitv_l_[PADL_(struct itimerval *)]; struct itimerval * oitv; char oitv_r_[PADR_(struct itimerval *)]; }; -struct linux_msync_args { - caddr_t addr; char addr_[PAD_(caddr_t)]; - int len; char len_[PAD_(int)]; - int fl; char fl_[PAD_(int)]; +struct linux_gethostname_args { + register_t dummy; +}; +struct linux_getdtablesize_args { + register_t dummy; }; -struct linux_getpgid_args { - int pid; char pid_[PAD_(int)]; +struct linux_newfstat_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char buf_l_[PADL_(struct l_newstat *)]; struct l_newstat * buf; char buf_r_[PADR_(struct l_newstat *)]; }; -struct linux_getsid_args { - linux_pid_t pid; char pid_[PAD_(linux_pid_t)]; +struct linux_fcntl_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char cmd_l_[PADL_(l_uint)]; l_uint cmd; char cmd_r_[PADR_(l_uint)]; + char arg_l_[PADL_(l_ulong)]; l_ulong arg; char arg_r_[PADR_(l_ulong)]; }; -struct osf1_sysinfo_args { - int cmd; char cmd_[PAD_(int)]; - char * buf; char buf_[PAD_(char *)]; - long count; char count_[PAD_(long)]; +struct osf1_select_args { + char nd_l_[PADL_(u_int)]; u_int nd; char nd_r_[PADR_(u_int)]; + char in_l_[PADL_(fd_set *)]; fd_set * in; char in_r_[PADR_(fd_set *)]; + char ou_l_[PADL_(fd_set *)]; fd_set * ou; char ou_r_[PADR_(fd_set *)]; + char ex_l_[PADL_(fd_set *)]; fd_set * ex; char ex_r_[PADR_(fd_set *)]; + char tv_l_[PADL_(struct timeval *)]; struct timeval * tv; char tv_r_[PADR_(struct timeval *)]; }; -struct linux_sysfs_args { - int option; char option_[PAD_(int)]; - u_long arg1; char arg1_[PAD_(u_long)]; - u_long arg2; char arg2_[PAD_(u_long)]; +struct osf1_socket_args { + char domain_l_[PADL_(int)]; int domain; char domain_r_[PADR_(int)]; + char type_l_[PADL_(int)]; int type; char type_r_[PADR_(int)]; + char protocol_l_[PADL_(int)]; int protocol; char protocol_r_[PADR_(int)]; }; -struct osf1_getsysinfo_args { - u_long op; char op_[PAD_(u_long)]; - caddr_t buffer; char buffer_[PAD_(caddr_t)]; - u_long nbytes; char nbytes_[PAD_(u_long)]; - caddr_t arg; char arg_[PAD_(caddr_t)]; - u_long flag; char flag_[PAD_(u_long)]; +struct linux_connect_args { + char s_l_[PADL_(l_int)]; l_int s; char s_r_[PADR_(l_int)]; + char name_l_[PADL_(struct l_sockaddr *)]; struct l_sockaddr * name; char name_r_[PADR_(struct l_sockaddr *)]; + char namelen_l_[PADL_(l_int)]; l_int namelen; char namelen_r_[PADR_(l_int)]; }; -struct osf1_setsysinfo_args { - u_long op; char op_[PAD_(u_long)]; - caddr_t buffer; char buffer_[PAD_(caddr_t)]; - u_long nbytes; char nbytes_[PAD_(u_long)]; - caddr_t arg; char arg_[PAD_(caddr_t)]; - u_long flag; char flag_[PAD_(u_long)]; +struct osf1_sigreturn_args { + char sigcntxp_l_[PADL_(struct osigcontext *)]; struct osigcontext * sigcntxp; char sigcntxp_r_[PADR_(struct osigcontext *)]; }; -struct linux_afs_syscall_args { +struct osf1_sigsuspend_args { + char ss_l_[PADL_(unsigned long)]; unsigned long ss; char ss_r_[PADR_(unsigned long)]; +}; +struct linux_recvmsg_args { register_t dummy; }; -struct linux_bdflush_args { +struct linux_sendmsg_args { register_t dummy; }; -struct linux_mount_args { - char * specialfile; char specialfile_[PAD_(char *)]; - char * dir; char dir_[PAD_(char *)]; - char * filesystemtype; char filesystemtype_[PAD_(char *)]; - u_long rwflag; char rwflag_[PAD_(u_long)]; - void * data; char data_[PAD_(void *)]; +struct osf1_gettimeofday_args { + char tp_l_[PADL_(struct timeval *)]; struct timeval * tp; char tp_r_[PADR_(struct timeval *)]; + char tzp_l_[PADL_(struct timezone *)]; struct timezone * tzp; char tzp_r_[PADR_(struct timezone *)]; +}; +struct osf1_getrusage_args { + char who_l_[PADL_(long)]; long who; char who_r_[PADR_(long)]; + char rusage_l_[PADL_(void *)]; void * rusage; char rusage_r_[PADR_(void *)]; +}; +struct linux_rename_args { + char from_l_[PADL_(char *)]; char * from; char from_r_[PADR_(char *)]; + char to_l_[PADL_(char *)]; char * to; char to_r_[PADR_(char *)]; +}; +struct linux_truncate_args { + 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 osf1_sendto_args { + char s_l_[PADL_(int)]; int s; char s_r_[PADR_(int)]; + char buf_l_[PADL_(caddr_t)]; caddr_t buf; char buf_r_[PADR_(caddr_t)]; + char len_l_[PADL_(size_t)]; size_t len; char len_r_[PADR_(size_t)]; + char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)]; + char to_l_[PADL_(struct sockaddr *)]; struct sockaddr * to; char to_r_[PADR_(struct sockaddr *)]; + char tolen_l_[PADL_(int)]; int tolen; char tolen_r_[PADR_(int)]; }; -struct linux_swapoff_args { +struct linux_socketpair_args { register_t dummy; }; -struct linux_getdents_args { - int fd; char fd_[PAD_(int)]; - void * dent; char dent_[PAD_(void *)]; - unsigned count; char count_[PAD_(unsigned)]; +struct linux_mkdir_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char mode_l_[PADL_(l_int)]; l_int mode; char mode_r_[PADR_(l_int)]; +}; +struct linux_rmdir_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; +}; +struct linux_getrlimit_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 *)]; +}; +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 *)]; +}; +struct linux_quotactl_args { + register_t dummy; }; -struct linux_create_module_args { +struct osf1_sigaction_args { + char sig_l_[PADL_(int)]; int sig; char sig_r_[PADR_(int)]; + char nsa_l_[PADL_(struct osf1_sigaction *)]; struct osf1_sigaction * nsa; char nsa_r_[PADR_(struct osf1_sigaction *)]; + char osa_l_[PADL_(struct osf1_sigaction *)]; struct osf1_sigaction * osa; char osa_r_[PADR_(struct osf1_sigaction *)]; +}; +struct linux_msgctl_args { + char msqid_l_[PADL_(l_int)]; l_int msqid; char msqid_r_[PADR_(l_int)]; + char cmd_l_[PADL_(l_int)]; l_int cmd; char cmd_r_[PADR_(l_int)]; + char buf_l_[PADL_(struct l_msqid_ds *)]; struct l_msqid_ds * buf; char buf_r_[PADR_(struct l_msqid_ds *)]; +}; +struct linux_msgget_args { + char key_l_[PADL_(l_key_t)]; l_key_t key; char key_r_[PADR_(l_key_t)]; + char msgflg_l_[PADL_(l_int)]; l_int msgflg; char msgflg_r_[PADR_(l_int)]; +}; +struct linux_msgrcv_args { + char msqid_l_[PADL_(l_int)]; l_int msqid; char msqid_r_[PADR_(l_int)]; + char msgp_l_[PADL_(struct l_msgbuf *)]; struct l_msgbuf * msgp; char msgp_r_[PADR_(struct l_msgbuf *)]; + char msgsz_l_[PADL_(l_size_t)]; l_size_t msgsz; char msgsz_r_[PADR_(l_size_t)]; + char msgtyp_l_[PADL_(l_long)]; l_long msgtyp; char msgtyp_r_[PADR_(l_long)]; + char msgflg_l_[PADL_(l_int)]; l_int msgflg; char msgflg_r_[PADR_(l_int)]; +}; +struct linux_msgsnd_args { + char msqid_l_[PADL_(l_int)]; l_int msqid; char msqid_r_[PADR_(l_int)]; + char msgp_l_[PADL_(struct l_msgbuf *)]; struct l_msgbuf * msgp; char msgp_r_[PADR_(struct l_msgbuf *)]; + char msgsz_l_[PADL_(l_size_t)]; l_size_t msgsz; char msgsz_r_[PADR_(l_size_t)]; + char msgflg_l_[PADL_(l_int)]; l_int msgflg; char msgflg_r_[PADR_(l_int)]; +}; +struct linux_semctl_args { + char semid_l_[PADL_(l_int)]; l_int semid; char semid_r_[PADR_(l_int)]; + char semnum_l_[PADL_(l_int)]; l_int semnum; char semnum_r_[PADR_(l_int)]; + char cmd_l_[PADL_(l_int)]; l_int cmd; char cmd_r_[PADR_(l_int)]; + char arg_l_[PADL_(union l_semun)]; union l_semun arg; char arg_r_[PADR_(union l_semun)]; +}; +struct linux_semget_args { + char key_l_[PADL_(l_key_t)]; l_key_t key; char key_r_[PADR_(l_key_t)]; + char nsems_l_[PADL_(l_int)]; l_int nsems; char nsems_r_[PADR_(l_int)]; + char semflg_l_[PADL_(l_int)]; l_int semflg; char semflg_r_[PADR_(l_int)]; +}; +struct linux_semop_args { + char semid_l_[PADL_(l_int)]; l_int semid; char semid_r_[PADR_(l_int)]; + char tsops_l_[PADL_(struct l_sembuf *)]; struct l_sembuf * tsops; char tsops_r_[PADR_(struct l_sembuf *)]; + char nsops_l_[PADL_(l_uint)]; l_uint nsops; char nsops_r_[PADR_(l_uint)]; +}; +struct linux_lchown_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char uid_l_[PADL_(l_uid_t)]; l_uid_t uid; char uid_r_[PADR_(l_uid_t)]; + char gid_l_[PADL_(l_gid_t)]; l_gid_t gid; char gid_r_[PADR_(l_gid_t)]; +}; +struct linux_shmat_args { + char shmid_l_[PADL_(l_int)]; l_int shmid; char shmid_r_[PADR_(l_int)]; + char shmaddr_l_[PADL_(char *)]; char * shmaddr; char shmaddr_r_[PADR_(char *)]; + char shmflg_l_[PADL_(l_int)]; l_int shmflg; char shmflg_r_[PADR_(l_int)]; +}; +struct linux_shmctl_args { + char shmid_l_[PADL_(l_int)]; l_int shmid; char shmid_r_[PADR_(l_int)]; + char cmd_l_[PADL_(l_int)]; l_int cmd; char cmd_r_[PADR_(l_int)]; + char buf_l_[PADL_(struct l_shmid_ds *)]; struct l_shmid_ds * buf; char buf_r_[PADR_(struct l_shmid_ds *)]; +}; +struct linux_shmdt_args { + char shmaddr_l_[PADL_(char *)]; char * shmaddr; char shmaddr_r_[PADR_(char *)]; +}; +struct linux_shmget_args { + char key_l_[PADL_(l_key_t)]; l_key_t key; char key_r_[PADR_(l_key_t)]; + char size_l_[PADL_(l_size_t)]; l_size_t size; char size_r_[PADR_(l_size_t)]; + char shmflg_l_[PADL_(l_int)]; l_int shmflg; char shmflg_r_[PADR_(l_int)]; +}; +struct linux_msync_args { + char addr_l_[PADL_(l_ulong)]; l_ulong addr; char addr_r_[PADR_(l_ulong)]; + char len_l_[PADL_(l_size_t)]; l_size_t len; char len_r_[PADR_(l_size_t)]; + char fl_l_[PADL_(l_int)]; l_int fl; char fl_r_[PADR_(l_int)]; +}; +struct linux_getpgid_args { + char pid_l_[PADL_(l_pid_t)]; l_pid_t pid; char pid_r_[PADR_(l_pid_t)]; +}; +struct linux_getsid_args { + char pid_l_[PADL_(l_pid_t)]; l_pid_t pid; char pid_r_[PADR_(l_pid_t)]; +}; +struct linux_sigaltstack_args { register_t dummy; }; -struct linux_init_module_args { +struct osf1_sysinfo_args { + char cmd_l_[PADL_(int)]; int cmd; char cmd_r_[PADR_(int)]; + char buf_l_[PADL_(char *)]; char * buf; char buf_r_[PADR_(char *)]; + char count_l_[PADL_(long)]; long count; char count_r_[PADR_(long)]; +}; +struct linux_sysfs_args { + char option_l_[PADL_(l_int)]; l_int option; char option_r_[PADR_(l_int)]; + char arg1_l_[PADL_(l_ulong)]; l_ulong arg1; char arg1_r_[PADR_(l_ulong)]; + char arg2_l_[PADL_(l_ulong)]; l_ulong arg2; char arg2_r_[PADR_(l_ulong)]; +}; +struct osf1_getsysinfo_args { + char op_l_[PADL_(u_long)]; u_long op; char op_r_[PADR_(u_long)]; + char buffer_l_[PADL_(caddr_t)]; caddr_t buffer; char buffer_r_[PADR_(caddr_t)]; + char nbytes_l_[PADL_(u_long)]; u_long nbytes; char nbytes_r_[PADR_(u_long)]; + char arg_l_[PADL_(caddr_t)]; caddr_t arg; char arg_r_[PADR_(caddr_t)]; + char flag_l_[PADL_(u_long)]; u_long flag; char flag_r_[PADR_(u_long)]; +}; +struct osf1_setsysinfo_args { + char op_l_[PADL_(u_long)]; u_long op; char op_r_[PADR_(u_long)]; + char buffer_l_[PADL_(caddr_t)]; caddr_t buffer; char buffer_r_[PADR_(caddr_t)]; + char nbytes_l_[PADL_(u_long)]; u_long nbytes; char nbytes_r_[PADR_(u_long)]; + char arg_l_[PADL_(caddr_t)]; caddr_t arg; char arg_r_[PADR_(caddr_t)]; + char flag_l_[PADL_(u_long)]; u_long flag; char flag_r_[PADR_(u_long)]; +}; +struct linux_bdflush_args { register_t dummy; }; -struct linux_delete_module_args { +struct linux_sethae_args { register_t dummy; }; -struct linux_get_kernel_syms_args { +struct linux_mount_args { + char specialfile_l_[PADL_(char *)]; char * specialfile; char specialfile_r_[PADR_(char *)]; + char dir_l_[PADL_(char *)]; char * dir; char dir_r_[PADR_(char *)]; + char filesystemtype_l_[PADL_(char *)]; char * filesystemtype; char filesystemtype_r_[PADR_(char *)]; + char rwflag_l_[PADL_(l_ulong)]; l_ulong rwflag; char rwflag_r_[PADR_(l_ulong)]; + char data_l_[PADL_(void *)]; void * data; char data_r_[PADR_(void *)]; +}; +struct linux_old_adjtimex_args { register_t dummy; }; -struct linux_ksyslog_args { - int what; char what_[PAD_(int)]; +struct linux_swapoff_args { + register_t dummy; }; -struct linux_reboot_args { - int magic1; char magic1_[PAD_(int)]; - int magic2; char magic2_[PAD_(int)]; - int opt; char opt_[PAD_(int)]; +struct linux_getdents_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char dent_l_[PADL_(void *)]; void * dent; char dent_r_[PADR_(void *)]; + char count_l_[PADL_(l_uint)]; l_uint count; char count_r_[PADR_(l_uint)]; }; -struct linux_clone_args { - int flags; char flags_[PAD_(int)]; - void * stack; char stack_[PAD_(void *)]; +struct linux_create_module_args { + register_t dummy; }; -struct linux_uselib_args { - char * library; char library_[PAD_(char *)]; +struct linux_init_module_args { + register_t dummy; }; -struct linux_sysinfo_args { +struct linux_delete_module_args { register_t dummy; }; -struct linux_sysctl_args { +struct linux_get_kernel_syms_args { register_t dummy; }; -struct linux_idle_args { +struct linux_syslog_args { + char type_l_[PADL_(l_int)]; l_int type; char type_r_[PADR_(l_int)]; + char buf_l_[PADL_(char *)]; char * buf; char buf_r_[PADR_(char *)]; + char len_l_[PADL_(l_int)]; l_int len; char len_r_[PADR_(l_int)]; +}; +struct linux_reboot_args { + char magic1_l_[PADL_(l_int)]; l_int magic1; char magic1_r_[PADR_(l_int)]; + char magic2_l_[PADL_(l_int)]; l_int magic2; char magic2_r_[PADR_(l_int)]; + char cmd_l_[PADL_(l_uint)]; l_uint cmd; char cmd_r_[PADR_(l_uint)]; + char arg_l_[PADL_(void *)]; void * arg; char arg_r_[PADR_(void *)]; +}; +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 *)]; +}; +struct linux_uselib_args { + char library_l_[PADL_(char *)]; char * library; char library_r_[PADR_(char *)]; +}; +struct linux_sysinfo_args { register_t dummy; }; -struct linux_umount_args { - char * path; char path_[PAD_(char *)]; +struct linux_sysctl_args { + char args_l_[PADL_(struct l___sysctl_args *)]; struct l___sysctl_args * args; char args_r_[PADR_(struct l___sysctl_args *)]; +}; +struct linux_oldumount_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; }; -struct linux_times_args { - struct linux_times_argv * buf; char buf_[PAD_(struct linux_times_argv *)]; +struct linux_times_args { + char buf_l_[PADL_(struct l_times_argv *)]; struct l_times_argv * buf; char buf_r_[PADR_(struct l_times_argv *)]; }; -struct linux_personality_args { - int per; char per_[PAD_(int)]; +struct linux_personality_args { + char per_l_[PADL_(l_ulong)]; l_ulong per; char per_r_[PADR_(l_ulong)]; }; -struct linux_setfsuid_args { - linux_uid_t uid; char uid_[PAD_(linux_uid_t)]; +struct linux_setfsuid_args { + char uid_l_[PADL_(l_uid_t)]; l_uid_t uid; char uid_r_[PADR_(l_uid_t)]; }; -struct linux_setfsgid_args { - linux_gid_t gid; char gid_[PAD_(linux_gid_t)]; +struct linux_setfsgid_args { + char gid_l_[PADL_(l_gid_t)]; l_gid_t gid; char gid_r_[PADR_(l_gid_t)]; }; -struct linux_ustat_args { - linux_dev_t dev; char dev_[PAD_(linux_dev_t)]; - struct linux_ustat * ubuf; char ubuf_[PAD_(struct linux_ustat *)]; +struct linux_ustat_args { + 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_statfs_args { - char * path; char path_[PAD_(char *)]; - struct linux_statfs_buf * buf; char buf_[PAD_(struct linux_statfs_buf *)]; +struct linux_statfs_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char buf_l_[PADL_(struct l_statfs_buf *)]; struct l_statfs_buf * buf; char buf_r_[PADR_(struct l_statfs_buf *)]; }; -struct linux_fstatfs_args { - int fd; char fd_[PAD_(int)]; - struct linux_statfs_buf * buf; char buf_[PAD_(struct linux_statfs_buf *)]; +struct linux_fstatfs_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char buf_l_[PADL_(struct l_statfs_buf *)]; struct l_statfs_buf * buf; char buf_r_[PADR_(struct l_statfs_buf *)]; }; -struct linux_sched_setscheduler_args { - pid_t pid; char pid_[PAD_(pid_t)]; - int policy; char policy_[PAD_(int)]; - const struct sched_param * param; char param_[PAD_(const struct sched_param *)]; +struct linux_sched_setscheduler_args { + char pid_l_[PADL_(l_pid_t)]; l_pid_t pid; char pid_r_[PADR_(l_pid_t)]; + char policy_l_[PADL_(l_int)]; l_int policy; char policy_r_[PADR_(l_int)]; + char param_l_[PADL_(struct l_sched_param *)]; struct l_sched_param * param; char param_r_[PADR_(struct l_sched_param *)]; }; -struct linux_sched_getscheduler_args { - pid_t pid; char pid_[PAD_(pid_t)]; +struct linux_sched_getscheduler_args { + char pid_l_[PADL_(l_pid_t)]; l_pid_t pid; char pid_r_[PADR_(l_pid_t)]; }; -struct linux_sched_get_priority_max_args { - int policy; char policy_[PAD_(int)]; +struct linux_sched_get_priority_max_args { + char policy_l_[PADL_(l_int)]; l_int policy; char policy_r_[PADR_(l_int)]; }; -struct linux_sched_get_priority_min_args { - int policy; char policy_[PAD_(int)]; +struct linux_sched_get_priority_min_args { + char policy_l_[PADL_(l_int)]; l_int policy; char policy_r_[PADR_(l_int)]; }; -struct linux_newuname_args { - struct linux_newuname_t * buf; char buf_[PAD_(struct linux_newuname_t *)]; +struct linux_newuname_args { + char buf_l_[PADL_(struct l_newuname_t *)]; struct l_newuname_t * buf; char buf_r_[PADR_(struct l_newuname_t *)]; }; -struct linux_mremap_args { - caddr_t addr; char addr_[PAD_(caddr_t)]; - u_long old_len; char old_len_[PAD_(u_long)]; - u_long new_len; char new_len_[PAD_(u_long)]; - u_long flags; char flags_[PAD_(u_long)]; +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)]; + char new_len_l_[PADL_(l_ulong)]; l_ulong new_len; char new_len_r_[PADR_(l_ulong)]; + char flags_l_[PADL_(l_ulong)]; l_ulong flags; char flags_r_[PADR_(l_ulong)]; + char new_addr_l_[PADL_(l_ulong)]; l_ulong new_addr; char new_addr_r_[PADR_(l_ulong)]; }; -struct linux_nfsservctl_args { +struct linux_nfsservctl_args { register_t dummy; }; -struct linux_getresgid_args { - linux_gid_t * rgid; char rgid_[PAD_(linux_gid_t *)]; - linux_gid_t * egid; char egid_[PAD_(linux_gid_t *)]; - linux_gid_t * sgid; char sgid_[PAD_(linux_gid_t *)]; +struct linux_pciconfig_read_args { + register_t dummy; }; -struct linux_query_module_args { +struct linux_pciconfig_write_args { register_t dummy; }; -struct linux_prctl_args { +struct linux_query_module_args { register_t dummy; }; -struct linux_pread_args { - int fd; char fd_[PAD_(int)]; - char * buf; char buf_[PAD_(char *)]; - size_t nbyte; char nbyte_[PAD_(size_t)]; - off_t offset; char offset_[PAD_(off_t)]; +struct linux_prctl_args { + register_t dummy; }; -struct linux_pwrite_args { - int fd; char fd_[PAD_(int)]; - const char * buf; char buf_[PAD_(const char *)]; - size_t nbyte; char nbyte_[PAD_(size_t)]; - off_t offset; char offset_[PAD_(off_t)]; +struct linux_pread_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char buf_l_[PADL_(char *)]; char * buf; char buf_r_[PADR_(char *)]; + char nbyte_l_[PADL_(l_size_t)]; l_size_t nbyte; char nbyte_r_[PADR_(l_size_t)]; + char offset_l_[PADL_(l_loff_t)]; l_loff_t offset; char offset_r_[PADR_(l_loff_t)]; }; -struct linux_rt_sigreturn_args { +struct linux_pwrite_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char buf_l_[PADL_(char *)]; char * buf; char buf_r_[PADR_(char *)]; + char nbyte_l_[PADL_(l_size_t)]; l_size_t nbyte; char nbyte_r_[PADR_(l_size_t)]; + char offset_l_[PADL_(l_loff_t)]; l_loff_t offset; char offset_r_[PADR_(l_loff_t)]; +}; +struct linux_rt_sigreturn_args { register_t dummy; }; -struct linux_rt_sigaction_args { - int sig; char sig_[PAD_(int)]; - linux_sigaction_t * act; char act_[PAD_(linux_sigaction_t *)]; - linux_sigaction_t * oact; char oact_[PAD_(linux_sigaction_t *)]; - size_t sigsetsize; char sigsetsize_[PAD_(size_t)]; +struct linux_rt_sigaction_args { + char sig_l_[PADL_(l_int)]; l_int sig; char sig_r_[PADR_(l_int)]; + char act_l_[PADL_(l_sigaction_t *)]; l_sigaction_t * act; char act_r_[PADR_(l_sigaction_t *)]; + char oact_l_[PADL_(l_sigaction_t *)]; l_sigaction_t * oact; char oact_r_[PADR_(l_sigaction_t *)]; + char sigsetsize_l_[PADL_(l_size_t)]; l_size_t sigsetsize; char sigsetsize_r_[PADR_(l_size_t)]; }; -struct linux_rt_sigprocmask_args { - int how; char how_[PAD_(int)]; - linux_sigset_t * mask; char mask_[PAD_(linux_sigset_t *)]; - linux_sigset_t * omask; char omask_[PAD_(linux_sigset_t *)]; - size_t sigsetsize; char sigsetsize_[PAD_(size_t)]; +struct linux_rt_sigprocmask_args { + char how_l_[PADL_(l_int)]; l_int how; char how_r_[PADR_(l_int)]; + char mask_l_[PADL_(l_sigset_t *)]; l_sigset_t * mask; char mask_r_[PADR_(l_sigset_t *)]; + char omask_l_[PADL_(l_sigset_t *)]; l_sigset_t * omask; char omask_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_sigpending_args { +struct linux_rt_sigpending_args { register_t dummy; }; -struct linux_rt_sigtimedwait_args { +struct linux_rt_sigtimedwait_args { register_t dummy; }; -struct linux_rt_sigqueueinfo_args { +struct linux_rt_sigqueueinfo_args { register_t dummy; }; -struct linux_rt_sigsuspend_args { - linux_sigset_t * newset; char newset_[PAD_(linux_sigset_t *)]; - size_t sigsetsize; char sigsetsize_[PAD_(size_t)]; -}; -struct linux_newselect_args { - int nfds; char nfds_[PAD_(int)]; - fd_set * readfds; char readfds_[PAD_(fd_set *)]; - fd_set * writefds; char writefds_[PAD_(fd_set *)]; - fd_set * exceptfds; char exceptfds_[PAD_(fd_set *)]; - struct timeval * timeout; char timeout_[PAD_(struct timeval *)]; -}; -struct linux_getitimer_args { - u_int which; char which_[PAD_(u_int)]; - struct itimerval * itv; char itv_[PAD_(struct itimerval *)]; +struct linux_rt_sigsuspend_args { + char newset_l_[PADL_(l_sigset_t *)]; l_sigset_t * newset; char newset_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_select_args { + char nfds_l_[PADL_(l_int)]; l_int nfds; char nfds_r_[PADR_(l_int)]; + char readfds_l_[PADL_(l_fd_set *)]; l_fd_set * readfds; char readfds_r_[PADR_(l_fd_set *)]; + char writefds_l_[PADL_(l_fd_set *)]; l_fd_set * writefds; char writefds_r_[PADR_(l_fd_set *)]; + char exceptfds_l_[PADL_(l_fd_set *)]; l_fd_set * exceptfds; char exceptfds_r_[PADR_(l_fd_set *)]; + char timeout_l_[PADL_(struct l_timeval *)]; struct l_timeval * timeout; char timeout_r_[PADR_(struct l_timeval *)]; +}; +struct linux_getitimer_args { + char which_l_[PADL_(l_int)]; l_int which; char which_r_[PADR_(l_int)]; + char itv_l_[PADL_(struct l_itimerval *)]; struct l_itimerval * itv; char itv_r_[PADR_(struct l_itimerval *)]; +}; +struct linux_setitimer_args { + char which_l_[PADL_(l_int)]; l_int which; char which_r_[PADR_(l_int)]; + char itv_l_[PADL_(struct l_itimerval *)]; struct l_itimerval * itv; char itv_r_[PADR_(struct l_itimerval *)]; + char oitv_l_[PADL_(struct l_itimerval *)]; struct l_itimerval * oitv; char oitv_r_[PADR_(struct l_itimerval *)]; +}; +struct linux_utimes_args { + char fname_l_[PADL_(char *)]; char * fname; char fname_r_[PADR_(char *)]; + char times_l_[PADL_(struct l_timeval *)]; struct l_timeval * times; char times_r_[PADR_(struct l_timeval *)]; +}; +struct linux_wait4_args { + char pid_l_[PADL_(l_pid_t)]; l_pid_t pid; char pid_r_[PADR_(l_pid_t)]; + char status_l_[PADL_(l_uint *)]; l_uint * status; char status_r_[PADR_(l_uint *)]; + char options_l_[PADL_(l_int)]; l_int options; char options_r_[PADR_(l_int)]; + char rusage_l_[PADL_(struct l_rusage *)]; struct l_rusage * rusage; char rusage_r_[PADR_(struct l_rusage *)]; +}; +struct linux_adjtimex_args { + register_t dummy; }; -struct linux_setitimer_args { - u_int which; char which_[PAD_(u_int)]; - struct itimerval * itv; char itv_[PAD_(struct itimerval *)]; - struct itimerval * oitv; char oitv_[PAD_(struct itimerval *)]; +struct linux_getcwd_args { + char buf_l_[PADL_(char *)]; char * buf; char buf_r_[PADR_(char *)]; + char bufsize_l_[PADL_(l_ulong)]; l_ulong bufsize; char bufsize_r_[PADR_(l_ulong)]; }; -struct linux_utime_args { - char * fname; char fname_[PAD_(char *)]; - struct linux_utimbuf * times; char times_[PAD_(struct linux_utimbuf *)]; +struct linux_capget_args { + register_t dummy; }; -struct linux_wait4_args { - int pid; char pid_[PAD_(int)]; - int * status; char status_[PAD_(int *)]; - int options; char options_[PAD_(int)]; - struct rusage * rusage; char rusage_[PAD_(struct rusage *)]; +struct linux_capset_args { + register_t dummy; }; -struct linux_adjtimex_args { +struct linux_sendfile_args { register_t dummy; }; -struct linux_getcwd_args { - char * buf; char buf_[PAD_(char *)]; - unsigned long bufsize; char bufsize_[PAD_(unsigned long)]; +struct linux_pivot_root_args { + char new_root_l_[PADL_(char *)]; char * new_root; char new_root_r_[PADR_(char *)]; + char put_old_l_[PADL_(char *)]; char * put_old; char put_old_r_[PADR_(char *)]; }; -struct linux_capget_args { - register_t dummy; +struct linux_mincore_args { + char start_l_[PADL_(l_ulong)]; l_ulong start; char start_r_[PADR_(l_ulong)]; + char len_l_[PADL_(l_size_t)]; l_size_t len; char len_r_[PADR_(l_size_t)]; + char vec_l_[PADL_(u_char *)]; u_char * vec; char vec_r_[PADR_(u_char *)]; }; -struct linux_capset_args { +struct linux_pciconfig_iobase_args { register_t dummy; }; -struct linux_sendfile_args { - register_t dummy; +struct linux_getdents64_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char dirent_l_[PADL_(void *)]; void * dirent; char dirent_r_[PADR_(void *)]; + char count_l_[PADL_(l_uint)]; l_uint count; char count_r_[PADR_(l_uint)]; }; int linux_fork __P((struct proc *, struct linux_fork_args *)); int osf1_wait4 __P((struct proc *, struct osf1_wait4_args *)); @@ -540,27 +604,35 @@ int linux_chmod __P((struct proc *, struct linux_chmod_args *)); int linux_chown __P((struct proc *, struct linux_chown_args *)); int linux_brk __P((struct proc *, struct linux_brk_args *)); int linux_lseek __P((struct proc *, struct linux_lseek_args *)); -int linux_umount2 __P((struct proc *, struct linux_umount2_args *)); +int linux_getpid __P((struct proc *, struct linux_getpid_args *)); +int linux_umount __P((struct proc *, struct linux_umount_args *)); +int linux_getuid __P((struct proc *, struct linux_getuid_args *)); int linux_ptrace __P((struct proc *, struct linux_ptrace_args *)); int linux_access __P((struct proc *, struct linux_access_args *)); int linux_kill __P((struct proc *, struct linux_kill_args *)); int linux_open __P((struct proc *, struct linux_open_args *)); +int linux_getgid __P((struct proc *, struct linux_getgid_args *)); int osf1_sigprocmask __P((struct proc *, struct osf1_sigprocmask_args *)); +int linux_sigpending __P((struct proc *, struct linux_sigpending_args *)); int linux_ioctl __P((struct proc *, struct linux_ioctl_args *)); int linux_symlink __P((struct proc *, struct linux_symlink_args *)); int linux_readlink __P((struct proc *, struct linux_readlink_args *)); int linux_execve __P((struct proc *, struct linux_execve_args *)); +int linux_getpagesize __P((struct proc *, struct linux_getpagesize_args *)); int linux_vfork __P((struct proc *, struct linux_vfork_args *)); int linux_newstat __P((struct proc *, struct linux_newstat_args *)); int linux_newlstat __P((struct proc *, struct linux_newlstat_args *)); int linux_mmap __P((struct proc *, struct linux_mmap_args *)); int linux_munmap __P((struct proc *, struct linux_munmap_args *)); int linux_mprotect __P((struct proc *, struct linux_mprotect_args *)); +int linux_madvise __P((struct proc *, struct linux_madvise_args *)); int linux_vhangup __P((struct proc *, struct linux_vhangup_args *)); int linux_setgroups __P((struct proc *, struct linux_setgroups_args *)); int linux_getgroups __P((struct proc *, struct linux_getgroups_args *)); int linux_setpgid __P((struct proc *, struct linux_setpgid_args *)); int osf1_setitimer __P((struct proc *, struct osf1_setitimer_args *)); +int linux_gethostname __P((struct proc *, struct linux_gethostname_args *)); +int linux_getdtablesize __P((struct proc *, struct linux_getdtablesize_args *)); int linux_newfstat __P((struct proc *, struct linux_newfstat_args *)); int linux_fcntl __P((struct proc *, struct linux_fcntl_args *)); int osf1_select __P((struct proc *, struct osf1_select_args *)); @@ -568,11 +640,14 @@ int osf1_socket __P((struct proc *, struct osf1_socket_args *)); int linux_connect __P((struct proc *, struct linux_connect_args *)); int osf1_sigreturn __P((struct proc *, struct osf1_sigreturn_args *)); int osf1_sigsuspend __P((struct proc *, struct osf1_sigsuspend_args *)); +int linux_recvmsg __P((struct proc *, struct linux_recvmsg_args *)); +int linux_sendmsg __P((struct proc *, struct linux_sendmsg_args *)); int osf1_gettimeofday __P((struct proc *, struct osf1_gettimeofday_args *)); int osf1_getrusage __P((struct proc *, struct osf1_getrusage_args *)); int linux_rename __P((struct proc *, struct linux_rename_args *)); int linux_truncate __P((struct proc *, struct linux_truncate_args *)); int osf1_sendto __P((struct proc *, struct osf1_sendto_args *)); +int linux_socketpair __P((struct proc *, struct linux_socketpair_args *)); int linux_mkdir __P((struct proc *, struct linux_mkdir_args *)); int linux_rmdir __P((struct proc *, struct linux_rmdir_args *)); int linux_getrlimit __P((struct proc *, struct linux_getrlimit_args *)); @@ -594,27 +669,28 @@ int linux_shmget __P((struct proc *, struct linux_shmget_args *)); int linux_msync __P((struct proc *, struct linux_msync_args *)); int linux_getpgid __P((struct proc *, struct linux_getpgid_args *)); int linux_getsid __P((struct proc *, struct linux_getsid_args *)); +int linux_sigaltstack __P((struct proc *, struct linux_sigaltstack_args *)); int osf1_sysinfo __P((struct proc *, struct osf1_sysinfo_args *)); int linux_sysfs __P((struct proc *, struct linux_sysfs_args *)); int osf1_getsysinfo __P((struct proc *, struct osf1_getsysinfo_args *)); int osf1_setsysinfo __P((struct proc *, struct osf1_setsysinfo_args *)); -int linux_afs_syscall __P((struct proc *, struct linux_afs_syscall_args *)); int linux_bdflush __P((struct proc *, struct linux_bdflush_args *)); +int linux_sethae __P((struct proc *, struct linux_sethae_args *)); int linux_mount __P((struct proc *, struct linux_mount_args *)); +int linux_old_adjtimex __P((struct proc *, struct linux_old_adjtimex_args *)); int linux_swapoff __P((struct proc *, struct linux_swapoff_args *)); int linux_getdents __P((struct proc *, struct linux_getdents_args *)); int linux_create_module __P((struct proc *, struct linux_create_module_args *)); int linux_init_module __P((struct proc *, struct linux_init_module_args *)); int linux_delete_module __P((struct proc *, struct linux_delete_module_args *)); int linux_get_kernel_syms __P((struct proc *, struct linux_get_kernel_syms_args *)); -int linux_ksyslog __P((struct proc *, struct linux_ksyslog_args *)); +int linux_syslog __P((struct proc *, struct linux_syslog_args *)); int linux_reboot __P((struct proc *, struct linux_reboot_args *)); int linux_clone __P((struct proc *, struct linux_clone_args *)); int linux_uselib __P((struct proc *, struct linux_uselib_args *)); int linux_sysinfo __P((struct proc *, struct linux_sysinfo_args *)); int linux_sysctl __P((struct proc *, struct linux_sysctl_args *)); -int linux_idle __P((struct proc *, struct linux_idle_args *)); -int linux_umount __P((struct proc *, struct linux_umount_args *)); +int linux_oldumount __P((struct proc *, struct linux_oldumount_args *)); int linux_times __P((struct proc *, struct linux_times_args *)); int linux_personality __P((struct proc *, struct linux_personality_args *)); int linux_setfsuid __P((struct proc *, struct linux_setfsuid_args *)); @@ -629,7 +705,8 @@ int linux_sched_get_priority_min __P((struct proc *, struct linux_sched_get_prio int linux_newuname __P((struct proc *, struct linux_newuname_args *)); int linux_mremap __P((struct proc *, struct linux_mremap_args *)); int linux_nfsservctl __P((struct proc *, struct linux_nfsservctl_args *)); -int linux_getresgid __P((struct proc *, struct linux_getresgid_args *)); +int linux_pciconfig_read __P((struct proc *, struct linux_pciconfig_read_args *)); +int linux_pciconfig_write __P((struct proc *, struct linux_pciconfig_write_args *)); int linux_query_module __P((struct proc *, struct linux_query_module_args *)); int linux_prctl __P((struct proc *, struct linux_prctl_args *)); int linux_pread __P((struct proc *, struct linux_pread_args *)); @@ -641,16 +718,20 @@ int linux_rt_sigpending __P((struct proc *, struct linux_rt_sigpending_args *)); int linux_rt_sigtimedwait __P((struct proc *, struct linux_rt_sigtimedwait_args *)); int linux_rt_sigqueueinfo __P((struct proc *, struct linux_rt_sigqueueinfo_args *)); int linux_rt_sigsuspend __P((struct proc *, struct linux_rt_sigsuspend_args *)); -int linux_newselect __P((struct proc *, struct linux_newselect_args *)); +int linux_select __P((struct proc *, struct linux_select_args *)); int linux_getitimer __P((struct proc *, struct linux_getitimer_args *)); int linux_setitimer __P((struct proc *, struct linux_setitimer_args *)); -int linux_utime __P((struct proc *, struct linux_utime_args *)); +int linux_utimes __P((struct proc *, struct linux_utimes_args *)); int linux_wait4 __P((struct proc *, struct linux_wait4_args *)); int linux_adjtimex __P((struct proc *, struct linux_adjtimex_args *)); int linux_getcwd __P((struct proc *, struct linux_getcwd_args *)); int linux_capget __P((struct proc *, struct linux_capget_args *)); int linux_capset __P((struct proc *, struct linux_capset_args *)); int linux_sendfile __P((struct proc *, struct linux_sendfile_args *)); +int linux_pivot_root __P((struct proc *, struct linux_pivot_root_args *)); +int linux_mincore __P((struct proc *, struct linux_mincore_args *)); +int linux_pciconfig_iobase __P((struct proc *, struct linux_pciconfig_iobase_args *)); +int linux_getdents64 __P((struct proc *, struct linux_getdents64_args *)); #ifdef COMPAT_43 @@ -658,5 +739,7 @@ int linux_sendfile __P((struct proc *, struct linux_sendfile_args *)); #endif /* COMPAT_43 */ #undef PAD_ +#undef PADL_ +#undef PADR_ #endif /* !_LINUX_SYSPROTO_H_ */ diff --git a/sys/alpha/linux/linux_syscall.h b/sys/alpha/linux/linux_syscall.h index 6a6de7f..b2c1b28 100644 --- a/sys/alpha/linux/linux_syscall.h +++ b/sys/alpha/linux/linux_syscall.h @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: src/sys/alpha/linux/syscalls.master,v 1.45 2001/02/20 03:47:59 gallatin Exp + * created from FreeBSD: src/sys/alpha/linux/syscalls.master,v 1.48 2001/09/08 18:49:31 marcel Exp */ #define LINUX_SYS_exit 1 @@ -21,10 +21,10 @@ #define LINUX_SYS_linux_chown 16 #define LINUX_SYS_linux_brk 17 #define LINUX_SYS_linux_lseek 19 -#define LINUX_SYS_getpid 20 -#define LINUX_SYS_linux_umount2 22 +#define LINUX_SYS_linux_getpid 20 +#define LINUX_SYS_linux_umount 22 #define LINUX_SYS_setuid 23 -#define LINUX_SYS_getuid 24 +#define LINUX_SYS_linux_getuid 24 #define LINUX_SYS_linux_ptrace 26 #define LINUX_SYS_linux_access 33 #define LINUX_SYS_sync 36 @@ -33,9 +33,10 @@ #define LINUX_SYS_dup 41 #define LINUX_SYS_pipe 42 #define LINUX_SYS_linux_open 45 -#define LINUX_SYS_getgid 47 +#define LINUX_SYS_linux_getgid 47 #define LINUX_SYS_osf1_sigprocmask 48 #define LINUX_SYS_acct 51 +#define LINUX_SYS_linux_sigpending 52 #define LINUX_SYS_linux_ioctl 54 #define LINUX_SYS_linux_symlink 57 #define LINUX_SYS_linux_readlink 58 @@ -43,18 +44,22 @@ #define LINUX_SYS_umask 60 #define LINUX_SYS_chroot 61 #define LINUX_SYS_getpgrp 63 +#define LINUX_SYS_linux_getpagesize 64 #define LINUX_SYS_linux_vfork 66 #define LINUX_SYS_linux_newstat 67 #define LINUX_SYS_linux_newlstat 68 #define LINUX_SYS_linux_mmap 71 #define LINUX_SYS_linux_munmap 73 #define LINUX_SYS_linux_mprotect 74 +#define LINUX_SYS_linux_madvise 75 #define LINUX_SYS_linux_vhangup 76 #define LINUX_SYS_linux_setgroups 79 #define LINUX_SYS_linux_getgroups 80 #define LINUX_SYS_linux_setpgid 82 #define LINUX_SYS_osf1_setitimer 83 +#define LINUX_SYS_linux_gethostname 87 #define LINUX_SYS_osethostname 88 +#define LINUX_SYS_linux_getdtablesize 89 #define LINUX_SYS_dup2 90 #define LINUX_SYS_linux_newfstat 91 #define LINUX_SYS_linux_fcntl 92 @@ -72,6 +77,8 @@ #define LINUX_SYS_setsockopt 105 #define LINUX_SYS_listen 106 #define LINUX_SYS_osf1_sigsuspend 111 +#define LINUX_SYS_linux_recvmsg 113 +#define LINUX_SYS_linux_sendmsg 114 #define LINUX_SYS_osf1_gettimeofday 116 #define LINUX_SYS_osf1_getrusage 117 #define LINUX_SYS_getsockopt 118 @@ -89,6 +96,7 @@ #define LINUX_SYS_setgid 132 #define LINUX_SYS_osf1_sendto 133 #define LINUX_SYS_shutdown 134 +#define LINUX_SYS_linux_socketpair 135 #define LINUX_SYS_linux_mkdir 136 #define LINUX_SYS_linux_rmdir 137 #define LINUX_SYS_utimes 138 @@ -115,20 +123,22 @@ #define LINUX_SYS_linux_msync 217 #define LINUX_SYS_linux_getpgid 233 #define LINUX_SYS_linux_getsid 234 +#define LINUX_SYS_linux_sigaltstack 235 #define LINUX_SYS_osf1_sysinfo 241 -#define LINUX_SYS_linux_sysfs 255 +#define LINUX_SYS_linux_sysfs 254 #define LINUX_SYS_osf1_getsysinfo 256 #define LINUX_SYS_osf1_setsysinfo 257 -#define LINUX_SYS_linux_afs_syscall 258 #define LINUX_SYS_linux_bdflush 300 +#define LINUX_SYS_linux_sethae 301 #define LINUX_SYS_linux_mount 302 +#define LINUX_SYS_linux_old_adjtimex 303 #define LINUX_SYS_linux_swapoff 304 #define LINUX_SYS_linux_getdents 305 #define LINUX_SYS_linux_create_module 306 #define LINUX_SYS_linux_init_module 307 #define LINUX_SYS_linux_delete_module 308 #define LINUX_SYS_linux_get_kernel_syms 309 -#define LINUX_SYS_linux_ksyslog 310 +#define LINUX_SYS_linux_syslog 310 #define LINUX_SYS_linux_reboot 311 #define LINUX_SYS_linux_clone 312 #define LINUX_SYS_linux_uselib 313 @@ -138,8 +148,7 @@ #define LINUX_SYS_munlockall 317 #define LINUX_SYS_linux_sysinfo 318 #define LINUX_SYS_linux_sysctl 319 -#define LINUX_SYS_linux_idle 320 -#define LINUX_SYS_linux_umount 321 +#define LINUX_SYS_linux_oldumount 321 #define LINUX_SYS_swapon 322 #define LINUX_SYS_linux_times 323 #define LINUX_SYS_linux_personality 324 @@ -160,8 +169,10 @@ #define LINUX_SYS_nanosleep 340 #define LINUX_SYS_linux_mremap 341 #define LINUX_SYS_linux_nfsservctl 342 -#define LINUX_SYS_setresgid 343 -#define LINUX_SYS_linux_getresgid 344 +#define LINUX_SYS_setresuid 343 +#define LINUX_SYS_getresuid 344 +#define LINUX_SYS_linux_pciconfig_read 345 +#define LINUX_SYS_linux_pciconfig_write 346 #define LINUX_SYS_linux_query_module 347 #define LINUX_SYS_linux_prctl 348 #define LINUX_SYS_linux_pread 349 @@ -173,12 +184,12 @@ #define LINUX_SYS_linux_rt_sigtimedwait 355 #define LINUX_SYS_linux_rt_sigqueueinfo 356 #define LINUX_SYS_linux_rt_sigsuspend 357 -#define LINUX_SYS_linux_newselect 358 +#define LINUX_SYS_linux_select 358 #define LINUX_SYS_gettimeofday 359 #define LINUX_SYS_settimeofday 360 #define LINUX_SYS_linux_getitimer 361 #define LINUX_SYS_linux_setitimer 362 -#define LINUX_SYS_linux_utime 363 +#define LINUX_SYS_linux_utimes 363 #define LINUX_SYS_getrusage 364 #define LINUX_SYS_linux_wait4 365 #define LINUX_SYS_linux_adjtimex 366 @@ -186,4 +197,10 @@ #define LINUX_SYS_linux_capget 368 #define LINUX_SYS_linux_capset 369 #define LINUX_SYS_linux_sendfile 370 -#define LINUX_SYS_MAXSYSCALL 371 +#define LINUX_SYS_setresgid 371 +#define LINUX_SYS_getresgid 372 +#define LINUX_SYS_linux_pivot_root 374 +#define LINUX_SYS_linux_mincore 375 +#define LINUX_SYS_linux_pciconfig_iobase 376 +#define LINUX_SYS_linux_getdents64 377 +#define LINUX_SYS_MAXSYSCALL 378 diff --git a/sys/alpha/linux/linux_sysent.c b/sys/alpha/linux/linux_sysent.c index 04d2185..c6f87bf 100644 --- a/sys/alpha/linux/linux_sysent.c +++ b/sys/alpha/linux/linux_sysent.c @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: src/sys/alpha/linux/syscalls.master,v 1.45 2001/02/20 03:47:59 gallatin Exp + * created from FreeBSD: src/sys/alpha/linux/syscalls.master,v 1.48 2001/09/08 18:49:31 marcel Exp */ #include "opt_compat.h" @@ -18,8 +18,8 @@ /* The casts are bogus but will do for now. */ struct sysent linux_sysent[] = { { 0, (sy_call_t *)nosys }, /* 0 = */ - { AS(sys_exit_args), (sy_call_t *)sys_exit }, /* 1 = exit */ - { 0, (sy_call_t *)linux_fork }, /* 2 = linux_fork */ + { SYF_MPSAFE | AS(sys_exit_args), (sy_call_t *)sys_exit }, /* 1 = exit */ + { SYF_MPSAFE | 0, (sy_call_t *)linux_fork }, /* 2 = linux_fork */ { AS(read_args), (sy_call_t *)read }, /* 3 = read */ { AS(write_args), (sy_call_t *)write }, /* 4 = write */ { 0, (sy_call_t *)nosys }, /* 5 = */ @@ -37,11 +37,11 @@ struct sysent linux_sysent[] = { { AS(linux_brk_args), (sy_call_t *)linux_brk }, /* 17 = linux_brk */ { 0, (sy_call_t *)nosys }, /* 18 = */ { AS(linux_lseek_args), (sy_call_t *)linux_lseek }, /* 19 = linux_lseek */ - { 0, (sy_call_t *)getpid }, /* 20 = getpid */ + { 0, (sy_call_t *)linux_getpid }, /* 20 = linux_getpid */ { 0, (sy_call_t *)nosys }, /* 21 = osf1_mount */ - { AS(linux_umount2_args), (sy_call_t *)linux_umount2 }, /* 22 = linux_umount2 */ + { AS(linux_umount_args), (sy_call_t *)linux_umount }, /* 22 = linux_umount */ { AS(setuid_args), (sy_call_t *)setuid }, /* 23 = setuid */ - { 0, (sy_call_t *)getuid }, /* 24 = getuid */ + { 0, (sy_call_t *)linux_getuid }, /* 24 = linux_getuid */ { 0, (sy_call_t *)nosys }, /* 25 = */ { 0, (sy_call_t *)linux_ptrace }, /* 26 = linux_ptrace */ { 0, (sy_call_t *)nosys }, /* 27 = */ @@ -60,16 +60,16 @@ struct sysent linux_sysent[] = { { 0, (sy_call_t *)nosys }, /* 40 = */ { AS(dup_args), (sy_call_t *)dup }, /* 41 = dup */ { 0, (sy_call_t *)pipe }, /* 42 = pipe */ - { 0, (sy_call_t *)nosys }, /* 43 = */ + { 0, (sy_call_t *)nosys }, /* 43 = osf_set_program_attributes */ { 0, (sy_call_t *)nosys }, /* 44 = */ { AS(linux_open_args), (sy_call_t *)linux_open }, /* 45 = linux_open */ { 0, (sy_call_t *)nosys }, /* 46 = */ - { 0, (sy_call_t *)getgid }, /* 47 = getgid */ + { 0, (sy_call_t *)linux_getgid }, /* 47 = linux_getgid */ { AS(osf1_sigprocmask_args), (sy_call_t *)osf1_sigprocmask }, /* 48 = osf1_sigprocmask */ { 0, (sy_call_t *)nosys }, /* 49 = */ { 0, (sy_call_t *)nosys }, /* 50 = */ { AS(acct_args), (sy_call_t *)acct }, /* 51 = acct */ - { 0, (sy_call_t *)nosys }, /* 52 = sigpending */ + { 0, (sy_call_t *)linux_sigpending }, /* 52 = linux_sigpending */ { 0, (sy_call_t *)nosys }, /* 53 = */ { AS(linux_ioctl_args), (sy_call_t *)linux_ioctl }, /* 54 = linux_ioctl */ { 0, (sy_call_t *)nosys }, /* 55 = */ @@ -81,9 +81,9 @@ struct sysent linux_sysent[] = { { AS(chroot_args), (sy_call_t *)chroot }, /* 61 = chroot */ { 0, (sy_call_t *)nosys }, /* 62 = */ { 0, (sy_call_t *)getpgrp }, /* 63 = getpgrp */ - { 0, (sy_call_t *)nosys }, /* 64 = getpagesize */ + { 0, (sy_call_t *)linux_getpagesize }, /* 64 = linux_getpagesize */ { 0, (sy_call_t *)nosys }, /* 65 = */ - { 0, (sy_call_t *)linux_vfork }, /* 66 = linux_vfork */ + { SYF_MPSAFE | 0, (sy_call_t *)linux_vfork }, /* 66 = linux_vfork */ { AS(linux_newstat_args), (sy_call_t *)linux_newstat }, /* 67 = linux_newstat */ { AS(linux_newlstat_args), (sy_call_t *)linux_newlstat }, /* 68 = linux_newlstat */ { 0, (sy_call_t *)nosys }, /* 69 = */ @@ -92,7 +92,7 @@ struct sysent linux_sysent[] = { { 0, (sy_call_t *)nosys }, /* 72 = */ { AS(linux_munmap_args), (sy_call_t *)linux_munmap }, /* 73 = linux_munmap */ { AS(linux_mprotect_args), (sy_call_t *)linux_mprotect }, /* 74 = linux_mprotect */ - { 0, (sy_call_t *)nosys }, /* 75 = madvise */ + { 0, (sy_call_t *)linux_madvise }, /* 75 = linux_madvise */ { 0, (sy_call_t *)linux_vhangup }, /* 76 = linux_vhangup */ { 0, (sy_call_t *)nosys }, /* 77 = */ { 0, (sy_call_t *)nosys }, /* 78 = */ @@ -103,10 +103,10 @@ struct sysent linux_sysent[] = { { AS(osf1_setitimer_args), (sy_call_t *)osf1_setitimer }, /* 83 = osf1_setitimer */ { 0, (sy_call_t *)nosys }, /* 84 = */ { 0, (sy_call_t *)nosys }, /* 85 = */ - { 0, (sy_call_t *)nosys }, /* 86 = */ - { 0, (sy_call_t *)nosys }, /* 87 = gethostname */ - { AS(sethostname_args), (sy_call_t *)osethostname }, /* 88 = osethostname */ - { 0, (sy_call_t *)nosys }, /* 89 = getdtablesize */ + { 0, (sy_call_t *)nosys }, /* 86 = osf_getitimer */ + { 0, (sy_call_t *)linux_gethostname }, /* 87 = linux_gethostname */ + { SYF_MPSAFE | AS(sethostname_args), (sy_call_t *)osethostname }, /* 88 = osethostname */ + { 0, (sy_call_t *)linux_getdtablesize }, /* 89 = linux_getdtablesize */ { AS(dup2_args), (sy_call_t *)dup2 }, /* 90 = dup2 */ { AS(linux_newfstat_args), (sy_call_t *)linux_newfstat }, /* 91 = linux_newfstat */ { AS(linux_fcntl_args), (sy_call_t *)linux_fcntl }, /* 92 = linux_fcntl */ @@ -117,7 +117,7 @@ struct sysent linux_sysent[] = { { AS(osf1_socket_args), (sy_call_t *)osf1_socket }, /* 97 = osf1_socket */ { AS(linux_connect_args), (sy_call_t *)linux_connect }, /* 98 = linux_connect */ { AS(accept_args), (sy_call_t *)oaccept }, /* 99 = accept */ - { 0, (sy_call_t *)nosys }, /* 100 = */ + { 0, (sy_call_t *)nosys }, /* 100 = osf_getpriority */ { AS(osend_args), (sy_call_t *)osend }, /* 101 = osend */ { AS(orecv_args), (sy_call_t *)orecv }, /* 102 = orecv */ { AS(osf1_sigreturn_args), (sy_call_t *)osf1_sigreturn }, /* 103 = osf1_sigreturn */ @@ -129,9 +129,9 @@ struct sysent linux_sysent[] = { { 0, (sy_call_t *)nosys }, /* 109 = */ { 0, (sy_call_t *)nosys }, /* 110 = */ { AS(osf1_sigsuspend_args), (sy_call_t *)osf1_sigsuspend }, /* 111 = osf1_sigsuspend */ - { 0, (sy_call_t *)nosys }, /* 112 = */ - { 0, (sy_call_t *)nosys }, /* 113 = recvmsg */ - { 0, (sy_call_t *)nosys }, /* 114 = sendmsg */ + { 0, (sy_call_t *)nosys }, /* 112 = osf_sigstack */ + { 0, (sy_call_t *)linux_recvmsg }, /* 113 = linux_recvmsg */ + { 0, (sy_call_t *)linux_sendmsg }, /* 114 = linux_sendmsg */ { 0, (sy_call_t *)nosys }, /* 115 = */ { AS(osf1_gettimeofday_args), (sy_call_t *)osf1_gettimeofday }, /* 116 = osf1_gettimeofday */ { AS(osf1_getrusage_args), (sy_call_t *)osf1_getrusage }, /* 117 = osf1_getrusage */ @@ -139,7 +139,7 @@ struct sysent linux_sysent[] = { { 0, (sy_call_t *)nosys }, /* 119 = */ { AS(readv_args), (sy_call_t *)readv }, /* 120 = readv */ { AS(writev_args), (sy_call_t *)writev }, /* 121 = writev */ - { 0, (sy_call_t *)nosys }, /* 122 = */ + { 0, (sy_call_t *)nosys }, /* 122 = osf_settimeofday */ { AS(fchown_args), (sy_call_t *)fchown }, /* 123 = fchown */ { AS(fchmod_args), (sy_call_t *)fchmod }, /* 124 = fchmod */ { AS(recvfrom_args), (sy_call_t *)orecvfrom }, /* 125 = recvfrom */ @@ -152,7 +152,7 @@ struct sysent linux_sysent[] = { { AS(setgid_args), (sy_call_t *)setgid }, /* 132 = setgid */ { AS(osf1_sendto_args), (sy_call_t *)osf1_sendto }, /* 133 = osf1_sendto */ { AS(shutdown_args), (sy_call_t *)shutdown }, /* 134 = shutdown */ - { 0, (sy_call_t *)nosys }, /* 135 = socketpair */ + { 0, (sy_call_t *)linux_socketpair }, /* 135 = linux_socketpair */ { AS(linux_mkdir_args), (sy_call_t *)linux_mkdir }, /* 136 = linux_mkdir */ { AS(linux_rmdir_args), (sy_call_t *)linux_rmdir }, /* 137 = linux_rmdir */ { AS(utimes_args), (sy_call_t *)utimes }, /* 138 = utimes */ @@ -176,14 +176,14 @@ struct sysent linux_sysent[] = { { AS(osf1_sigaction_args), (sy_call_t *)osf1_sigaction }, /* 156 = osf1_sigaction */ { 0, (sy_call_t *)nosys }, /* 157 = */ { 0, (sy_call_t *)nosys }, /* 158 = */ - { 0, (sy_call_t *)nosys }, /* 159 = */ - { 0, (sy_call_t *)nosys }, /* 160 = */ - { 0, (sy_call_t *)nosys }, /* 161 = */ + { 0, (sy_call_t *)nosys }, /* 159 = osf_getdirentries */ + { 0, (sy_call_t *)nosys }, /* 160 = osf_statfs */ + { 0, (sy_call_t *)nosys }, /* 161 = osf_fstatfs */ { 0, (sy_call_t *)nosys }, /* 162 = */ { 0, (sy_call_t *)nosys }, /* 163 = */ { 0, (sy_call_t *)nosys }, /* 164 = */ - { 0, (sy_call_t *)nosys }, /* 165 = */ - { AS(setdomainname_args), (sy_call_t *)setdomainname }, /* 166 = setdomainname */ + { 0, (sy_call_t *)nosys }, /* 165 = osf_getdomainname */ + { SYF_MPSAFE | AS(setdomainname_args), (sy_call_t *)setdomainname }, /* 166 = setdomainname */ { 0, (sy_call_t *)nosys }, /* 167 = */ { 0, (sy_call_t *)nosys }, /* 168 = */ { 0, (sy_call_t *)nosys }, /* 169 = */ @@ -216,7 +216,7 @@ struct sysent linux_sysent[] = { { 0, (sy_call_t *)nosys }, /* 196 = */ { 0, (sy_call_t *)nosys }, /* 197 = */ { 0, (sy_call_t *)nosys }, /* 198 = */ - { 0, (sy_call_t *)nosys }, /* 199 = */ + { 0, (sy_call_t *)nosys }, /* 199 = osf_swapon */ { AS(linux_msgctl_args), (sy_call_t *)linux_msgctl }, /* 200 = linux_msgctl */ { AS(linux_msgget_args), (sy_call_t *)linux_msgget }, /* 201 = linux_msgget */ { AS(linux_msgrcv_args), (sy_call_t *)linux_msgrcv }, /* 202 = linux_msgrcv */ @@ -224,7 +224,7 @@ struct sysent linux_sysent[] = { { AS(linux_semctl_args), (sy_call_t *)linux_semctl }, /* 204 = linux_semctl */ { AS(linux_semget_args), (sy_call_t *)linux_semget }, /* 205 = linux_semget */ { AS(linux_semop_args), (sy_call_t *)linux_semop }, /* 206 = linux_semop */ - { 0, (sy_call_t *)nosys }, /* 207 = */ + { 0, (sy_call_t *)nosys }, /* 207 = osf_utsname */ { AS(linux_lchown_args), (sy_call_t *)linux_lchown }, /* 208 = linux_lchown */ { AS(linux_shmat_args), (sy_call_t *)linux_shmat }, /* 209 = linux_shmat */ { AS(linux_shmctl_args), (sy_call_t *)linux_shmctl }, /* 210 = linux_shmctl */ @@ -252,7 +252,7 @@ struct sysent linux_sysent[] = { { 0, (sy_call_t *)nosys }, /* 232 = */ { AS(linux_getpgid_args), (sy_call_t *)linux_getpgid }, /* 233 = linux_getpgid */ { AS(linux_getsid_args), (sy_call_t *)linux_getsid }, /* 234 = linux_getsid */ - { 0, (sy_call_t *)nosys }, /* 235 = sigaltstack */ + { 0, (sy_call_t *)linux_sigaltstack }, /* 235 = linux_sigaltstack */ { 0, (sy_call_t *)nosys }, /* 236 = */ { 0, (sy_call_t *)nosys }, /* 237 = */ { 0, (sy_call_t *)nosys }, /* 238 = */ @@ -261,21 +261,21 @@ struct sysent linux_sysent[] = { { AS(osf1_sysinfo_args), (sy_call_t *)osf1_sysinfo }, /* 241 = osf1_sysinfo */ { 0, (sy_call_t *)nosys }, /* 242 = */ { 0, (sy_call_t *)nosys }, /* 243 = */ - { 0, (sy_call_t *)nosys }, /* 244 = */ + { 0, (sy_call_t *)nosys }, /* 244 = osf_proplist_syscall */ { 0, (sy_call_t *)nosys }, /* 245 = */ { 0, (sy_call_t *)nosys }, /* 246 = */ { 0, (sy_call_t *)nosys }, /* 247 = */ { 0, (sy_call_t *)nosys }, /* 248 = */ { 0, (sy_call_t *)nosys }, /* 249 = */ { 0, (sy_call_t *)nosys }, /* 250 = */ - { 0, (sy_call_t *)nosys }, /* 251 = */ + { 0, (sy_call_t *)nosys }, /* 251 = osf_usleep_thread */ { 0, (sy_call_t *)nosys }, /* 252 = */ { 0, (sy_call_t *)nosys }, /* 253 = */ - { 0, (sy_call_t *)nosys }, /* 254 = */ - { AS(linux_sysfs_args), (sy_call_t *)linux_sysfs }, /* 255 = linux_sysfs */ + { AS(linux_sysfs_args), (sy_call_t *)linux_sysfs }, /* 254 = linux_sysfs */ + { 0, (sy_call_t *)nosys }, /* 255 = */ { AS(osf1_getsysinfo_args), (sy_call_t *)osf1_getsysinfo }, /* 256 = osf1_getsysinfo */ { AS(osf1_setsysinfo_args), (sy_call_t *)osf1_setsysinfo }, /* 257 = osf1_setsysinfo */ - { 0, (sy_call_t *)linux_afs_syscall }, /* 258 = linux_afs_syscall */ + { 0, (sy_call_t *)nosys }, /* 258 = */ { 0, (sy_call_t *)nosys }, /* 259 = */ { 0, (sy_call_t *)nosys }, /* 260 = */ { 0, (sy_call_t *)nosys }, /* 261 = */ @@ -318,16 +318,16 @@ struct sysent linux_sysent[] = { { 0, (sy_call_t *)nosys }, /* 298 = */ { 0, (sy_call_t *)nosys }, /* 299 = */ { 0, (sy_call_t *)linux_bdflush }, /* 300 = linux_bdflush */ - { 0, (sy_call_t *)nosys }, /* 301 = sethae */ + { 0, (sy_call_t *)linux_sethae }, /* 301 = linux_sethae */ { AS(linux_mount_args), (sy_call_t *)linux_mount }, /* 302 = linux_mount */ - { 0, (sy_call_t *)nosys }, /* 303 = old_adjtimex */ + { 0, (sy_call_t *)linux_old_adjtimex }, /* 303 = linux_old_adjtimex */ { 0, (sy_call_t *)linux_swapoff }, /* 304 = linux_swapoff */ { AS(linux_getdents_args), (sy_call_t *)linux_getdents }, /* 305 = linux_getdents */ { 0, (sy_call_t *)linux_create_module }, /* 306 = linux_create_module */ { 0, (sy_call_t *)linux_init_module }, /* 307 = linux_init_module */ { 0, (sy_call_t *)linux_delete_module }, /* 308 = linux_delete_module */ { 0, (sy_call_t *)linux_get_kernel_syms }, /* 309 = linux_get_kernel_syms */ - { AS(linux_ksyslog_args), (sy_call_t *)linux_ksyslog }, /* 310 = linux_ksyslog */ + { AS(linux_syslog_args), (sy_call_t *)linux_syslog }, /* 310 = linux_syslog */ { AS(linux_reboot_args), (sy_call_t *)linux_reboot }, /* 311 = linux_reboot */ { AS(linux_clone_args), (sy_call_t *)linux_clone }, /* 312 = linux_clone */ { AS(linux_uselib_args), (sy_call_t *)linux_uselib }, /* 313 = linux_uselib */ @@ -336,9 +336,9 @@ struct sysent linux_sysent[] = { { AS(mlockall_args), (sy_call_t *)mlockall }, /* 316 = mlockall */ { 0, (sy_call_t *)munlockall }, /* 317 = munlockall */ { 0, (sy_call_t *)linux_sysinfo }, /* 318 = linux_sysinfo */ - { 0, (sy_call_t *)linux_sysctl }, /* 319 = linux_sysctl */ - { 0, (sy_call_t *)linux_idle }, /* 320 = linux_idle */ - { AS(linux_umount_args), (sy_call_t *)linux_umount }, /* 321 = linux_umount */ + { AS(linux_sysctl_args), (sy_call_t *)linux_sysctl }, /* 319 = linux_sysctl */ + { 0, (sy_call_t *)nosys }, /* 320 = sys_idle */ + { AS(linux_oldumount_args), (sy_call_t *)linux_oldumount }, /* 321 = linux_oldumount */ { AS(swapon_args), (sy_call_t *)swapon }, /* 322 = swapon */ { AS(linux_times_args), (sy_call_t *)linux_times }, /* 323 = linux_times */ { AS(linux_personality_args), (sy_call_t *)linux_personality }, /* 324 = linux_personality */ @@ -351,19 +351,19 @@ struct sysent linux_sysent[] = { { AS(sched_getparam_args), (sy_call_t *)sched_getparam }, /* 331 = sched_getparam */ { AS(linux_sched_setscheduler_args), (sy_call_t *)linux_sched_setscheduler }, /* 332 = linux_sched_setscheduler */ { AS(linux_sched_getscheduler_args), (sy_call_t *)linux_sched_getscheduler }, /* 333 = linux_sched_getscheduler */ - { 0, (sy_call_t *)sched_yield }, /* 334 = sched_yield */ + { SYF_MPSAFE | 0, (sy_call_t *)sched_yield }, /* 334 = sched_yield */ { AS(linux_sched_get_priority_max_args), (sy_call_t *)linux_sched_get_priority_max }, /* 335 = linux_sched_get_priority_max */ { AS(linux_sched_get_priority_min_args), (sy_call_t *)linux_sched_get_priority_min }, /* 336 = linux_sched_get_priority_min */ { AS(sched_rr_get_interval_args), (sy_call_t *)sched_rr_get_interval }, /* 337 = sched_rr_get_interval */ - { 0, (sy_call_t *)nosys }, /* 338 = afs_syscall */ + { 0, (sy_call_t *)nosys }, /* 338 = sys_afs_syscall */ { AS(linux_newuname_args), (sy_call_t *)linux_newuname }, /* 339 = linux_newuname */ - { AS(nanosleep_args), (sy_call_t *)nanosleep }, /* 340 = nanosleep */ + { SYF_MPSAFE | AS(nanosleep_args), (sy_call_t *)nanosleep }, /* 340 = nanosleep */ { AS(linux_mremap_args), (sy_call_t *)linux_mremap }, /* 341 = linux_mremap */ { 0, (sy_call_t *)linux_nfsservctl }, /* 342 = linux_nfsservctl */ - { AS(setresgid_args), (sy_call_t *)setresgid }, /* 343 = setresgid */ - { AS(linux_getresgid_args), (sy_call_t *)linux_getresgid }, /* 344 = linux_getresgid */ - { 0, (sy_call_t *)nosys }, /* 345 = pciconfig_read */ - { 0, (sy_call_t *)nosys }, /* 346 = pciconfig_write */ + { AS(setresuid_args), (sy_call_t *)setresuid }, /* 343 = setresuid */ + { AS(getresuid_args), (sy_call_t *)getresuid }, /* 344 = getresuid */ + { 0, (sy_call_t *)linux_pciconfig_read }, /* 345 = linux_pciconfig_read */ + { 0, (sy_call_t *)linux_pciconfig_write }, /* 346 = linux_pciconfig_write */ { 0, (sy_call_t *)linux_query_module }, /* 347 = linux_query_module */ { 0, (sy_call_t *)linux_prctl }, /* 348 = linux_prctl */ { AS(linux_pread_args), (sy_call_t *)linux_pread }, /* 349 = linux_pread */ @@ -375,12 +375,12 @@ struct sysent linux_sysent[] = { { 0, (sy_call_t *)linux_rt_sigtimedwait }, /* 355 = linux_rt_sigtimedwait */ { 0, (sy_call_t *)linux_rt_sigqueueinfo }, /* 356 = linux_rt_sigqueueinfo */ { AS(linux_rt_sigsuspend_args), (sy_call_t *)linux_rt_sigsuspend }, /* 357 = linux_rt_sigsuspend */ - { AS(linux_newselect_args), (sy_call_t *)linux_newselect }, /* 358 = linux_newselect */ + { AS(linux_select_args), (sy_call_t *)linux_select }, /* 358 = linux_select */ { AS(gettimeofday_args), (sy_call_t *)gettimeofday }, /* 359 = gettimeofday */ - { AS(settimeofday_args), (sy_call_t *)settimeofday }, /* 360 = settimeofday */ + { SYF_MPSAFE | AS(settimeofday_args), (sy_call_t *)settimeofday }, /* 360 = settimeofday */ { AS(linux_getitimer_args), (sy_call_t *)linux_getitimer }, /* 361 = linux_getitimer */ { AS(linux_setitimer_args), (sy_call_t *)linux_setitimer }, /* 362 = linux_setitimer */ - { AS(linux_utime_args), (sy_call_t *)linux_utime }, /* 363 = linux_utime */ + { AS(linux_utimes_args), (sy_call_t *)linux_utimes }, /* 363 = linux_utimes */ { AS(getrusage_args), (sy_call_t *)getrusage }, /* 364 = getrusage */ { AS(linux_wait4_args), (sy_call_t *)linux_wait4 }, /* 365 = linux_wait4 */ { 0, (sy_call_t *)linux_adjtimex }, /* 366 = linux_adjtimex */ @@ -388,4 +388,11 @@ struct sysent linux_sysent[] = { { 0, (sy_call_t *)linux_capget }, /* 368 = linux_capget */ { 0, (sy_call_t *)linux_capset }, /* 369 = linux_capset */ { 0, (sy_call_t *)linux_sendfile }, /* 370 = linux_sendfile */ + { AS(setresgid_args), (sy_call_t *)setresgid }, /* 371 = setresgid */ + { AS(getresgid_args), (sy_call_t *)getresgid }, /* 372 = getresgid */ + { 0, (sy_call_t *)nosys }, /* 373 = sys_dipc */ + { AS(linux_pivot_root_args), (sy_call_t *)linux_pivot_root }, /* 374 = linux_pivot_root */ + { AS(linux_mincore_args), (sy_call_t *)linux_mincore }, /* 375 = linux_mincore */ + { 0, (sy_call_t *)linux_pciconfig_iobase }, /* 376 = linux_pciconfig_iobase */ + { AS(linux_getdents64_args), (sy_call_t *)linux_getdents64 }, /* 377 = linux_getdents64 */ }; diff --git a/sys/compat/linux/linux_file.c b/sys/compat/linux/linux_file.c index 2a5d673..3d16a94 100644 --- a/sys/compat/linux/linux_file.c +++ b/sys/compat/linux/linux_file.c @@ -149,175 +149,6 @@ linux_open(struct proc *p, struct linux_open_args *args) return error; } -struct linux_flock { - short l_type; - short l_whence; - linux_off_t l_start; - linux_off_t l_len; - linux_pid_t l_pid; -}; - -static void -linux_to_bsd_flock(struct linux_flock *linux_flock, struct flock *bsd_flock) -{ - switch (linux_flock->l_type) { - case LINUX_F_RDLCK: - bsd_flock->l_type = F_RDLCK; - break; - case LINUX_F_WRLCK: - bsd_flock->l_type = F_WRLCK; - break; - case LINUX_F_UNLCK: - bsd_flock->l_type = F_UNLCK; - break; - default: - bsd_flock->l_type = -1; - break; - } - bsd_flock->l_whence = linux_flock->l_whence; - bsd_flock->l_start = (off_t)linux_flock->l_start; - bsd_flock->l_len = (off_t)linux_flock->l_len; - bsd_flock->l_pid = (pid_t)linux_flock->l_pid; -} - -static void -bsd_to_linux_flock(struct flock *bsd_flock, struct linux_flock *linux_flock) -{ - switch (bsd_flock->l_type) { - case F_RDLCK: - linux_flock->l_type = LINUX_F_RDLCK; - break; - case F_WRLCK: - linux_flock->l_type = LINUX_F_WRLCK; - break; - case F_UNLCK: - linux_flock->l_type = LINUX_F_UNLCK; - break; - } - linux_flock->l_whence = bsd_flock->l_whence; - linux_flock->l_start = (linux_off_t)bsd_flock->l_start; - linux_flock->l_len = (linux_off_t)bsd_flock->l_len; - linux_flock->l_pid = (linux_pid_t)bsd_flock->l_pid; -} - -int -linux_fcntl(struct proc *p, struct linux_fcntl_args *args) -{ - int error, result; - struct fcntl_args /* { - int fd; - int cmd; - long arg; - } */ fcntl_args; - struct linux_flock linux_flock; - struct flock *bsd_flock; - struct filedesc *fdp; - struct file *fp; - caddr_t sg; - - sg = stackgap_init(); - bsd_flock = (struct flock *)stackgap_alloc(&sg, sizeof(struct flock)); - -#ifdef DEBUG - if (ldebug(fcntl)) - printf(ARGS(fcntl, "%d, %08x, *"), args->fd, args->cmd); -#endif - fcntl_args.fd = args->fd; - - switch (args->cmd) { - case LINUX_F_DUPFD: - fcntl_args.cmd = F_DUPFD; - fcntl_args.arg = args->arg; - return fcntl(p, &fcntl_args); - - case LINUX_F_GETFD: - fcntl_args.cmd = F_GETFD; - return fcntl(p, &fcntl_args); - - case LINUX_F_SETFD: - fcntl_args.cmd = F_SETFD; - fcntl_args.arg = args->arg; - return fcntl(p, &fcntl_args); - - case LINUX_F_GETFL: - fcntl_args.cmd = F_GETFL; - error = fcntl(p, &fcntl_args); - result = p->p_retval[0]; - p->p_retval[0] = 0; - if (result & O_RDONLY) p->p_retval[0] |= LINUX_O_RDONLY; - if (result & O_WRONLY) p->p_retval[0] |= LINUX_O_WRONLY; - if (result & O_RDWR) p->p_retval[0] |= LINUX_O_RDWR; - if (result & O_NDELAY) p->p_retval[0] |= LINUX_O_NONBLOCK; - if (result & O_APPEND) p->p_retval[0] |= LINUX_O_APPEND; - if (result & O_FSYNC) p->p_retval[0] |= LINUX_O_SYNC; - if (result & O_ASYNC) p->p_retval[0] |= LINUX_FASYNC; - return error; - - case LINUX_F_SETFL: - fcntl_args.arg = 0; - if (args->arg & LINUX_O_NDELAY) fcntl_args.arg |= O_NONBLOCK; - if (args->arg & LINUX_O_APPEND) fcntl_args.arg |= O_APPEND; - if (args->arg & LINUX_O_SYNC) fcntl_args.arg |= O_FSYNC; - if (args->arg & LINUX_FASYNC) fcntl_args.arg |= O_ASYNC; - fcntl_args.cmd = F_SETFL; - return fcntl(p, &fcntl_args); - - case LINUX_F_GETLK: - if ((error = copyin((caddr_t)args->arg, (caddr_t)&linux_flock, - sizeof(struct linux_flock)))) - return error; - linux_to_bsd_flock(&linux_flock, bsd_flock); - fcntl_args.cmd = F_GETLK; - fcntl_args.arg = (long)bsd_flock; - error = fcntl(p, &fcntl_args); - if (error) - return error; - bsd_to_linux_flock(bsd_flock, &linux_flock); - return copyout((caddr_t)&linux_flock, (caddr_t)args->arg, - sizeof(struct linux_flock)); - - case LINUX_F_SETLK: - if ((error = copyin((caddr_t)args->arg, (caddr_t)&linux_flock, - sizeof(struct linux_flock)))) - return error; - linux_to_bsd_flock(&linux_flock, bsd_flock); - fcntl_args.cmd = F_SETLK; - fcntl_args.arg = (long)bsd_flock; - return fcntl(p, &fcntl_args); - - case LINUX_F_SETLKW: - if ((error = copyin((caddr_t)args->arg, (caddr_t)&linux_flock, - sizeof(struct linux_flock)))) - return error; - linux_to_bsd_flock(&linux_flock, bsd_flock); - fcntl_args.cmd = F_SETLKW; - fcntl_args.arg = (long)bsd_flock; - return fcntl(p, &fcntl_args); - - case LINUX_F_GETOWN: - fcntl_args.cmd = F_GETOWN; - return fcntl(p, &fcntl_args); - - case LINUX_F_SETOWN: - /* - * XXX some Linux applications depend on F_SETOWN having no - * significant effect for pipes (SIGIO is not delivered for - * pipes under Linux-2.2.35 at least). - */ - fdp = p->p_fd; - if ((u_int)args->fd >= fdp->fd_nfiles || - (fp = fdp->fd_ofiles[args->fd]) == NULL) - return EBADF; - if (fp->f_type == DTYPE_PIPE) - return EINVAL; - - fcntl_args.cmd = F_SETOWN; - fcntl_args.arg = args->arg; - return fcntl(p, &fcntl_args); - } - return EINVAL; -} - int linux_lseek(struct proc *p, struct linux_lseek_args *args) { @@ -333,7 +164,7 @@ linux_lseek(struct proc *p, struct linux_lseek_args *args) #ifdef DEBUG if (ldebug(lseek)) printf(ARGS(lseek, "%d, %ld, %d"), - args->fdes, args->off, args->whence); + args->fdes, (long)args->off, args->whence); #endif tmp_args.fd = args->fdes; tmp_args.offset = (off_t)args->off; @@ -372,17 +203,6 @@ linux_llseek(struct proc *p, struct linux_llseek_args *args) } #endif /*!__alpha__*/ - -struct linux_dirent { - long dino; - linux_off_t doff; - unsigned short dreclen; - char dname[LINUX_NAME_MAX + 1]; -}; - -#define LINUX_RECLEN(de,namlen) \ - ALIGN((((char *)&(de)->dname - (char *)de) + (namlen) + 1)) - #ifndef __alpha__ int linux_readdir(struct proc *p, struct linux_readdir_args *args) @@ -396,178 +216,250 @@ linux_readdir(struct proc *p, struct linux_readdir_args *args) } #endif /*!__alpha__*/ -int -linux_getdents(struct proc *p, struct linux_getdents_args *args) -{ - register struct dirent *bdp; - struct vnode *vp; - caddr_t inp, buf; /* BSD-format */ - int len, reclen; /* BSD-format */ - caddr_t outp; /* Linux-format */ - int resid, linuxreclen=0; /* Linux-format */ - struct file *fp; - struct uio auio; - struct iovec aiov; - struct vattr va; - off_t off; - struct linux_dirent linux_dirent; - int buflen, error, eofflag, nbytes, justone; - u_long *cookies = NULL, *cookiep; - int ncookies; +/* + * Note that linux_getdents(2) and linux_getdents64(2) have the same + * arguments. They only differ in the definition of struct dirent they + * operate on. We use this to common the code, with the exception of + * accessing struct dirent. Note that linux_readdir(2) is implemented + * by means of linux_getdents(2). In this case we never operate on + * struct dirent64 and thus don't need to handle it... + */ -#ifdef DEBUG - if (ldebug(getdents)) - printf(ARGS(getdents, "%d, *, %d"), args->fd, args->count); -#endif - if ((error = getvnode(p->p_fd, args->fd, &fp)) != 0) { - return (error); - } +struct l_dirent { + l_long d_ino; + l_off_t d_off; + l_ushort d_reclen; + char d_name[LINUX_NAME_MAX + 1]; +}; - if ((fp->f_flag & FREAD) == 0) - return (EBADF); +struct l_dirent64 { + uint64_t d_ino; + int64_t d_off; + l_ushort d_reclen; + u_char d_type; + char d_name[LINUX_NAME_MAX + 1]; +}; - vp = (struct vnode *) fp->f_data; +#define LINUX_RECLEN(de,namlen) \ + ALIGN((((char *)&(de)->d_name - (char *)de) + (namlen) + 1)) - if (vp->v_type != VDIR) - return (EINVAL); +#define LINUX_DIRBLKSIZ 512 - if ((error = VOP_GETATTR(vp, &va, p->p_ucred, p))) { - return error; - } +static int +getdents_common(struct proc *p, struct linux_getdents64_args *args, + int is64bit) +{ + register struct dirent *bdp; + struct vnode *vp; + caddr_t inp, buf; /* BSD-format */ + int len, reclen; /* BSD-format */ + caddr_t outp; /* Linux-format */ + int resid, linuxreclen=0; /* Linux-format */ + struct file *fp; + struct uio auio; + struct iovec aiov; + struct vattr va; + off_t off; + struct l_dirent linux_dirent; + struct l_dirent64 linux_dirent64; + int buflen, error, eofflag, nbytes, justone; + u_long *cookies = NULL, *cookiep; + int ncookies; + + if ((error = getvnode(p->p_fd, args->fd, &fp)) != 0) + return (error); + + if ((fp->f_flag & FREAD) == 0) + return (EBADF); + + vp = (struct vnode *) fp->f_data; + if (vp->v_type != VDIR) + return (EINVAL); + + if ((error = VOP_GETATTR(vp, &va, p->p_ucred, p))) + return (error); + + nbytes = args->count; + if (nbytes == 1) { + /* readdir(2) case. Always struct dirent. */ + if (is64bit) + return (EINVAL); + nbytes = sizeof(linux_dirent); + justone = 1; + } else + justone = 0; + + off = fp->f_offset; + + buflen = max(LINUX_DIRBLKSIZ, nbytes); + buflen = min(buflen, MAXBSIZE); + buf = malloc(buflen, M_TEMP, M_WAITOK); + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p); - nbytes = args->count; - if (nbytes == 1) { - nbytes = sizeof (struct linux_dirent); - justone = 1; - } - else - justone = 0; - - off = fp->f_offset; -#define DIRBLKSIZ 512 /* XXX we used to use ufs's DIRBLKSIZ */ - buflen = max(DIRBLKSIZ, nbytes); - buflen = min(buflen, MAXBSIZE); - buf = malloc(buflen, M_TEMP, M_WAITOK); - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p); again: - aiov.iov_base = buf; - aiov.iov_len = buflen; - auio.uio_iov = &aiov; - auio.uio_iovcnt = 1; - auio.uio_rw = UIO_READ; - auio.uio_segflg = UIO_SYSSPACE; - auio.uio_procp = p; - auio.uio_resid = buflen; - auio.uio_offset = off; - - if (cookies) { - free(cookies, M_TEMP); - cookies = NULL; - } - - error = VOP_READDIR(vp, &auio, fp->f_cred, &eofflag, &ncookies, &cookies); - if (error) { - goto out; - } - - inp = buf; - outp = (caddr_t) args->dent; - resid = nbytes; - if ((len = buflen - auio.uio_resid) <= 0) { - goto eof; - } - - cookiep = cookies; - - if (cookies) { - /* - * When using cookies, the vfs has the option of reading from - * a different offset than that supplied (UFS truncates the - * offset to a block boundary to make sure that it never reads - * partway through a directory entry, even if the directory - * has been compacted). - */ - while (len > 0 && ncookies > 0 && *cookiep <= off) { - bdp = (struct dirent *) inp; - len -= bdp->d_reclen; - inp += bdp->d_reclen; - cookiep++; - ncookies--; - } - } - - while (len > 0) { - if (cookiep && ncookies == 0) - break; - bdp = (struct dirent *) inp; - reclen = bdp->d_reclen; - if (reclen & 3) { - printf("linux_readdir: reclen=%d\n", reclen); - error = EFAULT; - goto out; - } - - if (bdp->d_fileno == 0) { - inp += reclen; - if (cookiep) { - off = *cookiep++; - ncookies--; - } else - off += reclen; - len -= reclen; - continue; - } - linuxreclen = LINUX_RECLEN(&linux_dirent, bdp->d_namlen); - if (reclen > len || resid < linuxreclen) { - outp++; - break; + aiov.iov_base = buf; + aiov.iov_len = buflen; + auio.uio_iov = &aiov; + auio.uio_iovcnt = 1; + auio.uio_rw = UIO_READ; + auio.uio_segflg = UIO_SYSSPACE; + auio.uio_procp = p; + auio.uio_resid = buflen; + auio.uio_offset = off; + + if (cookies) { + free(cookies, M_TEMP); + cookies = NULL; } - linux_dirent.dino = (long) bdp->d_fileno; - if (justone) { - /* - * old linux-style readdir usage. - */ - linux_dirent.doff = (linux_off_t) linuxreclen; - linux_dirent.dreclen = (u_short) bdp->d_namlen; - } else { - if (cookiep) - linux_dirent.doff = (linux_off_t)*cookiep; - else - linux_dirent.doff = (linux_off_t)(off + reclen); - linux_dirent.dreclen = (u_short) linuxreclen; + + if ((error = VOP_READDIR(vp, &auio, fp->f_cred, &eofflag, &ncookies, + &cookies))) + goto out; + + inp = buf; + outp = (caddr_t)args->dirent; + resid = nbytes; + if ((len = buflen - auio.uio_resid) <= 0) + goto eof; + + cookiep = cookies; + + if (cookies) { + /* + * When using cookies, the vfs has the option of reading from + * a different offset than that supplied (UFS truncates the + * offset to a block boundary to make sure that it never reads + * partway through a directory entry, even if the directory + * has been compacted). + */ + while (len > 0 && ncookies > 0 && *cookiep <= off) { + bdp = (struct dirent *) inp; + len -= bdp->d_reclen; + inp += bdp->d_reclen; + cookiep++; + ncookies--; + } } - strcpy(linux_dirent.dname, bdp->d_name); - if ((error = copyout((caddr_t)&linux_dirent, outp, linuxreclen))) { - goto out; + + while (len > 0) { + if (cookiep && ncookies == 0) + break; + bdp = (struct dirent *) inp; + reclen = bdp->d_reclen; + if (reclen & 3) { + error = EFAULT; + goto out; + } + + if (bdp->d_fileno == 0) { + inp += reclen; + if (cookiep) { + off = *cookiep++; + ncookies--; + } else + off += reclen; + + len -= reclen; + continue; + } + + linuxreclen = (is64bit) + ? LINUX_RECLEN(&linux_dirent64, bdp->d_namlen) + : LINUX_RECLEN(&linux_dirent, bdp->d_namlen); + + if (reclen > len || resid < linuxreclen) { + outp++; + break; + } + + if (justone) { + /* readdir(2) case. */ + linux_dirent.d_ino = (l_long)bdp->d_fileno; + linux_dirent.d_off = (l_off_t)linuxreclen; + linux_dirent.d_reclen = (l_ushort)bdp->d_namlen; + strcpy(linux_dirent.d_name, bdp->d_name); + error = copyout(&linux_dirent, outp, linuxreclen); + } else { + if (is64bit) { + linux_dirent64.d_ino = bdp->d_fileno; + linux_dirent64.d_off = (cookiep) + ? (l_off_t)*cookiep + : (l_off_t)(off + reclen); + linux_dirent64.d_reclen = + (l_ushort)linuxreclen; + linux_dirent64.d_type = bdp->d_type; + strcpy(linux_dirent64.d_name, bdp->d_name); + error = copyout(&linux_dirent64, outp, + linuxreclen); + } else { + linux_dirent.d_ino = bdp->d_fileno; + linux_dirent.d_off = (cookiep) + ? (l_off_t)*cookiep + : (l_off_t)(off + reclen); + linux_dirent.d_reclen = (l_ushort)linuxreclen; + strcpy(linux_dirent.d_name, bdp->d_name); + error = copyout(&linux_dirent, outp, + linuxreclen); + } + } + if (error) + goto out; + + inp += reclen; + if (cookiep) { + off = *cookiep++; + ncookies--; + } else + off += reclen; + + outp += linuxreclen; + resid -= linuxreclen; + len -= reclen; + if (justone) + break; } - inp += reclen; - if (cookiep) { - off = *cookiep++; - ncookies--; - } else - off += reclen; - outp += linuxreclen; - resid -= linuxreclen; - len -= reclen; - if (justone) - break; - } - if (outp == (caddr_t) args->dent) - goto again; - fp->f_offset = off; + if (outp == (caddr_t)args->dirent) + goto again; - if (justone) - nbytes = resid + linuxreclen; + fp->f_offset = off; + if (justone) + nbytes = resid + linuxreclen; eof: - p->p_retval[0] = nbytes - resid; + p->p_retval[0] = nbytes - resid; + out: - if (cookies) - free(cookies, M_TEMP); - VOP_UNLOCK(vp, 0, p); - free(buf, M_TEMP); - return error; + if (cookies) + free(cookies, M_TEMP); + + VOP_UNLOCK(vp, 0, p); + free(buf, M_TEMP); + return (error); +} + +int +linux_getdents(struct proc *p, struct linux_getdents_args *args) +{ + +#ifdef DEBUG + if (ldebug(getdents)) + printf(ARGS(getdents, "%d, *, %d"), args->fd, args->count); +#endif + + return (getdents_common(p, (struct linux_getdents64_args*)args, 0)); +} + +int +linux_getdents64(struct proc *p, struct linux_getdents64_args *args) +{ + +#ifdef DEBUG + if (ldebug(getdents64)) + printf(ARGS(getdents64, "%d, *, %d"), args->fd, args->count); +#endif + + return (getdents_common(p, args, 1)); } /* @@ -649,50 +541,6 @@ linux_chmod(struct proc *p, struct linux_chmod_args *args) } int -linux_chown(struct proc *p, struct linux_chown_args *args) -{ - struct chown_args bsd; - caddr_t sg; - - sg = stackgap_init(); - CHECKALTEXIST(p, &sg, args->path); - -#ifdef DEBUG - if (ldebug(chown)) - printf(ARGS(chown, "%s, %d, %d"), - args->path, args->uid, args->gid); -#endif - bsd.path = args->path; - /* XXX size casts here */ - bsd.uid = args->uid; - bsd.gid = args->gid; - - return chown(p, &bsd); -} - -int -linux_lchown(struct proc *p, struct linux_lchown_args *args) -{ - struct lchown_args bsd; - caddr_t sg; - - sg = stackgap_init(); - CHECKALTEXIST(p, &sg, args->path); - -#ifdef DEBUG - if (ldebug(lchown)) - printf(ARGS(lchown, "%s, %d, %d"), - args->path, args->uid, args->gid); -#endif - bsd.path = args->path; - /* XXX size casts here */ - bsd.uid = args->uid; - bsd.gid = args->gid; - - return lchown(p, &bsd); -} - -int linux_mkdir(struct proc *p, struct linux_mkdir_args *args) { struct mkdir_args bsd; @@ -801,7 +649,8 @@ linux_truncate(struct proc *p, struct linux_truncate_args *args) #ifdef DEBUG if (ldebug(truncate)) - printf(ARGS(truncate, "%s, %ld"), args->path, args->length); + printf(ARGS(truncate, "%s, %ld"), args->path, + (long)args->length); #endif bsd.path = args->path; bsd.length = args->length; @@ -937,17 +786,17 @@ linux_mount(struct proc *p, struct linux_mount_args *args) } int -linux_umount(struct proc *p, struct linux_umount_args *args) +linux_oldumount(struct proc *p, struct linux_oldumount_args *args) { - struct linux_umount2_args args2; + struct linux_umount_args args2; args2.path = args->path; args2.flags = 0; - return (linux_umount2(p, &args2)); + return (linux_umount(p, &args2)); } int -linux_umount2(struct proc *p, struct linux_umount2_args *args) +linux_umount(struct proc *p, struct linux_umount_args *args) { struct unmount_args bsd; @@ -955,3 +804,325 @@ linux_umount2(struct proc *p, struct linux_umount2_args *args) bsd.flags = args->flags; /* XXX correct? */ return (unmount(p, &bsd)); } + +/* + * fcntl family of syscalls + */ + +struct l_flock { + l_short l_type; + l_short l_whence; + l_off_t l_start; + l_off_t l_len; + l_pid_t l_pid; +}; + +static void +linux_to_bsd_flock(struct l_flock *linux_flock, struct flock *bsd_flock) +{ + switch (linux_flock->l_type) { + case LINUX_F_RDLCK: + bsd_flock->l_type = F_RDLCK; + break; + case LINUX_F_WRLCK: + bsd_flock->l_type = F_WRLCK; + break; + case LINUX_F_UNLCK: + bsd_flock->l_type = F_UNLCK; + break; + default: + bsd_flock->l_type = -1; + break; + } + bsd_flock->l_whence = linux_flock->l_whence; + bsd_flock->l_start = (off_t)linux_flock->l_start; + bsd_flock->l_len = (off_t)linux_flock->l_len; + bsd_flock->l_pid = (pid_t)linux_flock->l_pid; +} + +static void +bsd_to_linux_flock(struct flock *bsd_flock, struct l_flock *linux_flock) +{ + switch (bsd_flock->l_type) { + case F_RDLCK: + linux_flock->l_type = LINUX_F_RDLCK; + break; + case F_WRLCK: + linux_flock->l_type = LINUX_F_WRLCK; + break; + case F_UNLCK: + linux_flock->l_type = LINUX_F_UNLCK; + break; + } + linux_flock->l_whence = bsd_flock->l_whence; + linux_flock->l_start = (l_off_t)bsd_flock->l_start; + linux_flock->l_len = (l_off_t)bsd_flock->l_len; + linux_flock->l_pid = (l_pid_t)bsd_flock->l_pid; +} + +#if defined(__i386__) +struct l_flock64 { + l_short l_type; + l_short l_whence; + l_loff_t l_start; + l_loff_t l_len; + l_pid_t l_pid; +}; + +static void +linux_to_bsd_flock64(struct l_flock64 *linux_flock, struct flock *bsd_flock) +{ + switch (linux_flock->l_type) { + case LINUX_F_RDLCK: + bsd_flock->l_type = F_RDLCK; + break; + case LINUX_F_WRLCK: + bsd_flock->l_type = F_WRLCK; + break; + case LINUX_F_UNLCK: + bsd_flock->l_type = F_UNLCK; + break; + default: + bsd_flock->l_type = -1; + break; + } + bsd_flock->l_whence = linux_flock->l_whence; + bsd_flock->l_start = (off_t)linux_flock->l_start; + bsd_flock->l_len = (off_t)linux_flock->l_len; + bsd_flock->l_pid = (pid_t)linux_flock->l_pid; +} + +static void +bsd_to_linux_flock64(struct flock *bsd_flock, struct l_flock64 *linux_flock) +{ + switch (bsd_flock->l_type) { + case F_RDLCK: + linux_flock->l_type = LINUX_F_RDLCK; + break; + case F_WRLCK: + linux_flock->l_type = LINUX_F_WRLCK; + break; + case F_UNLCK: + linux_flock->l_type = LINUX_F_UNLCK; + break; + } + linux_flock->l_whence = bsd_flock->l_whence; + linux_flock->l_start = (l_loff_t)bsd_flock->l_start; + linux_flock->l_len = (l_loff_t)bsd_flock->l_len; + linux_flock->l_pid = (l_pid_t)bsd_flock->l_pid; +} +#endif /* __i386__ */ + +#if defined(__alpha__) +#define linux_fcntl64_args linux_fcntl_args +#endif + +static int +fcntl_common(struct proc *p, struct linux_fcntl64_args *args) +{ + struct fcntl_args fcntl_args; + struct filedesc *fdp; + struct file *fp; + int error, result; + + fcntl_args.fd = args->fd; + + switch (args->cmd) { + case LINUX_F_DUPFD: + fcntl_args.cmd = F_DUPFD; + fcntl_args.arg = args->arg; + return (fcntl(p, &fcntl_args)); + + case LINUX_F_GETFD: + fcntl_args.cmd = F_GETFD; + return (fcntl(p, &fcntl_args)); + + case LINUX_F_SETFD: + fcntl_args.cmd = F_SETFD; + fcntl_args.arg = args->arg; + return (fcntl(p, &fcntl_args)); + + case LINUX_F_GETFL: + fcntl_args.cmd = F_GETFL; + error = fcntl(p, &fcntl_args); + result = p->p_retval[0]; + p->p_retval[0] = 0; + if (result & O_RDONLY) + p->p_retval[0] |= LINUX_O_RDONLY; + if (result & O_WRONLY) + p->p_retval[0] |= LINUX_O_WRONLY; + if (result & O_RDWR) + p->p_retval[0] |= LINUX_O_RDWR; + if (result & O_NDELAY) + p->p_retval[0] |= LINUX_O_NONBLOCK; + if (result & O_APPEND) + p->p_retval[0] |= LINUX_O_APPEND; + if (result & O_FSYNC) + p->p_retval[0] |= LINUX_O_SYNC; + if (result & O_ASYNC) + p->p_retval[0] |= LINUX_FASYNC; + return (error); + + case LINUX_F_SETFL: + fcntl_args.arg = 0; + if (args->arg & LINUX_O_NDELAY) + fcntl_args.arg |= O_NONBLOCK; + if (args->arg & LINUX_O_APPEND) + fcntl_args.arg |= O_APPEND; + if (args->arg & LINUX_O_SYNC) + fcntl_args.arg |= O_FSYNC; + if (args->arg & LINUX_FASYNC) + fcntl_args.arg |= O_ASYNC; + fcntl_args.cmd = F_SETFL; + return (fcntl(p, &fcntl_args)); + + case LINUX_F_GETOWN: + fcntl_args.cmd = F_GETOWN; + return (fcntl(p, &fcntl_args)); + + case LINUX_F_SETOWN: + /* + * XXX some Linux applications depend on F_SETOWN having no + * significant effect for pipes (SIGIO is not delivered for + * pipes under Linux-2.2.35 at least). + */ + fdp = p->p_fd; + if ((u_int)args->fd >= fdp->fd_nfiles || + (fp = fdp->fd_ofiles[args->fd]) == NULL) + return (EBADF); + if (fp->f_type == DTYPE_PIPE) + return (EINVAL); + + fcntl_args.cmd = F_SETOWN; + fcntl_args.arg = args->arg; + return (fcntl(p, &fcntl_args)); + } + + return (EINVAL); +} + +int +linux_fcntl(struct proc *p, struct linux_fcntl_args *args) +{ + struct linux_fcntl64_args args64; + struct fcntl_args fcntl_args; + struct l_flock linux_flock; + struct flock *bsd_flock; + int error; + caddr_t sg; + + sg = stackgap_init(); + bsd_flock = (struct flock *)stackgap_alloc(&sg, sizeof(bsd_flock)); + +#ifdef DEBUG + if (ldebug(fcntl)) + printf(ARGS(fcntl, "%d, %08x, *"), args->fd, args->cmd); +#endif + + switch (args->cmd) { + case LINUX_F_GETLK: + error = copyin((caddr_t)args->arg, &linux_flock, + sizeof(linux_flock)); + if (error) + return (error); + linux_to_bsd_flock(&linux_flock, bsd_flock); + fcntl_args.fd = args->fd; + fcntl_args.cmd = F_GETLK; + fcntl_args.arg = (long)bsd_flock; + error = fcntl(p, &fcntl_args); + if (error) + return (error); + bsd_to_linux_flock(bsd_flock, &linux_flock); + return (copyout(&linux_flock, (caddr_t)args->arg, + sizeof(linux_flock))); + + case LINUX_F_SETLK: + error = copyin((caddr_t)args->arg, &linux_flock, + sizeof(linux_flock)); + if (error) + return (error); + linux_to_bsd_flock(&linux_flock, bsd_flock); + fcntl_args.fd = args->fd; + fcntl_args.cmd = F_SETLK; + fcntl_args.arg = (long)bsd_flock; + return (fcntl(p, &fcntl_args)); + + case LINUX_F_SETLKW: + error = copyin((caddr_t)args->arg, &linux_flock, + sizeof(linux_flock)); + if (error) + return (error); + linux_to_bsd_flock(&linux_flock, bsd_flock); + fcntl_args.fd = args->fd; + fcntl_args.cmd = F_SETLKW; + fcntl_args.arg = (long)bsd_flock; + return (fcntl(p, &fcntl_args)); + } + + args64.fd = args->fd; + args64.cmd = args->cmd; + args64.arg = args->arg; + return (fcntl_common(p, &args64)); +} + +#if defined(__i386__) +int +linux_fcntl64(struct proc *p, struct linux_fcntl64_args *args) +{ + struct fcntl_args fcntl_args; + struct l_flock64 linux_flock; + struct flock *bsd_flock; + int error; + caddr_t sg; + + sg = stackgap_init(); + bsd_flock = (struct flock *)stackgap_alloc(&sg, sizeof(bsd_flock)); + +#ifdef DEBUG + if (ldebug(fcntl64)) + printf(ARGS(fcntl64, "%d, %08x, *"), args->fd, args->cmd); +#endif + + switch (args->cmd) { + case LINUX_F_GETLK: + error = copyin((caddr_t)args->arg, &linux_flock, + sizeof(linux_flock)); + if (error) + return (error); + linux_to_bsd_flock64(&linux_flock, bsd_flock); + fcntl_args.fd = args->fd; + fcntl_args.cmd = F_GETLK; + fcntl_args.arg = (long)bsd_flock; + error = fcntl(p, &fcntl_args); + if (error) + return (error); + bsd_to_linux_flock64(bsd_flock, &linux_flock); + return (copyout(&linux_flock, (caddr_t)args->arg, + sizeof(linux_flock))); + + case LINUX_F_SETLK: + error = copyin((caddr_t)args->arg, &linux_flock, + sizeof(linux_flock)); + if (error) + return (error); + linux_to_bsd_flock64(&linux_flock, bsd_flock); + fcntl_args.fd = args->fd; + fcntl_args.cmd = F_SETLK; + fcntl_args.arg = (long)bsd_flock; + return (fcntl(p, &fcntl_args)); + + case LINUX_F_SETLKW: + error = copyin((caddr_t)args->arg, &linux_flock, + sizeof(linux_flock)); + if (error) + return (error); + linux_to_bsd_flock64(&linux_flock, bsd_flock); + fcntl_args.fd = args->fd; + fcntl_args.cmd = F_SETLKW; + fcntl_args.arg = (long)bsd_flock; + return (fcntl(p, &fcntl_args)); + } + + return (fcntl_common(p, args)); +} +#endif /* __i386__ */ diff --git a/sys/compat/linux/linux_ioctl.c b/sys/compat/linux/linux_ioctl.c index 2079fcd..b4fc8ce 100644 --- a/sys/compat/linux/linux_ioctl.c +++ b/sys/compat/linux/linux_ioctl.c @@ -1379,7 +1379,7 @@ linux_ioctl_socket(struct proc *p, struct linux_ioctl_args *args) struct ifnet *ifp; struct ifaddr *ifa; struct sockaddr_dl *sdl; - struct linux_ifreq *ifr = (struct linux_ifreq *)args->arg; + struct l_ifreq *ifr = (struct l_ifreq *)args->arg; /* Note that we don't actually respect the name in the ifreq * structure, as Linux interface names are all different. @@ -1424,7 +1424,7 @@ linux_ioctl_socket(struct proc *p, struct linux_ioctl_args *args) int linux_ioctl(struct proc *p, struct linux_ioctl_args *args) { - struct filedesc *fdp = p->p_fd; + struct filedesc *fdp; struct file *fp; struct handler_element *he; int error, cmd; @@ -1434,9 +1434,9 @@ linux_ioctl(struct proc *p, struct linux_ioctl_args *args) printf(ARGS(ioctl, "%d, %04lx, *"), args->fd, args->cmd); #endif + fdp = p->p_fd; if ((unsigned)args->fd >= fdp->fd_nfiles) return (EBADF); - fp = fdp->fd_ofiles[args->fd]; if (fp == NULL || (fp->f_flag & (FREAD|FWRITE)) == 0) return (EBADF); diff --git a/sys/compat/linux/linux_ipc.c b/sys/compat/linux/linux_ipc.c index e68580f..de9b47a 100644 --- a/sys/compat/linux/linux_ipc.c +++ b/sys/compat/linux/linux_ipc.c @@ -40,18 +40,18 @@ #include <compat/linux/linux_ipc.h> #include <compat/linux/linux_util.h> -struct linux_ipc_perm { - linux_key_t key; - unsigned short uid; - unsigned short gid; - unsigned short cuid; - unsigned short cgid; - unsigned short mode; - unsigned short seq; +struct l_ipc_perm { + l_key_t key; + l_uid16_t uid; + l_gid16_t gid; + l_uid16_t cuid; + l_gid16_t cgid; + l_ushort mode; + l_ushort seq; }; static void -linux_to_bsd_ipc_perm(struct linux_ipc_perm *lpp, struct ipc_perm *bpp) +linux_to_bsd_ipc_perm(struct l_ipc_perm *lpp, struct ipc_perm *bpp) { bpp->key = lpp->key; bpp->uid = lpp->uid; @@ -64,7 +64,7 @@ linux_to_bsd_ipc_perm(struct linux_ipc_perm *lpp, struct ipc_perm *bpp) static void -bsd_to_linux_ipc_perm(struct ipc_perm *bpp, struct linux_ipc_perm *lpp) +bsd_to_linux_ipc_perm(struct ipc_perm *bpp, struct l_ipc_perm *lpp) { lpp->key = bpp->key; lpp->uid = bpp->uid; @@ -75,33 +75,33 @@ bsd_to_linux_ipc_perm(struct ipc_perm *bpp, struct linux_ipc_perm *lpp) lpp->seq = bpp->seq; } -struct linux_semid_ds { - struct linux_ipc_perm sem_perm; - linux_time_t sem_otime; - linux_time_t sem_ctime; +struct l_semid_ds { + struct l_ipc_perm sem_perm; + l_time_t sem_otime; + l_time_t sem_ctime; void *sem_base; void *sem_pending; void *sem_pending_last; void *undo; - ushort sem_nsems; + l_ushort sem_nsems; }; -struct linux_shmid_ds { - struct linux_ipc_perm shm_perm; - int shm_segsz; - linux_time_t shm_atime; - linux_time_t shm_dtime; - linux_time_t shm_ctime; - ushort shm_cpid; - ushort shm_lpid; - short shm_nattch; - ushort private1; - void *private2; - void *private3; +struct l_shmid_ds { + struct l_ipc_perm shm_perm; + l_int shm_segsz; + l_time_t shm_atime; + l_time_t shm_dtime; + l_time_t shm_ctime; + l_ushort shm_cpid; + l_ushort shm_lpid; + l_short shm_nattch; + l_ushort private1; + void *private2; + void *private3; }; static void -linux_to_bsd_semid_ds(struct linux_semid_ds *lsp, struct semid_ds *bsp) +linux_to_bsd_semid_ds(struct l_semid_ds *lsp, struct semid_ds *bsp) { linux_to_bsd_ipc_perm(&lsp->sem_perm, &bsp->sem_perm); bsp->sem_otime = lsp->sem_otime; @@ -111,7 +111,7 @@ linux_to_bsd_semid_ds(struct linux_semid_ds *lsp, struct semid_ds *bsp) } static void -bsd_to_linux_semid_ds(struct semid_ds *bsp, struct linux_semid_ds *lsp) +bsd_to_linux_semid_ds(struct semid_ds *bsp, struct l_semid_ds *lsp) { bsd_to_linux_ipc_perm(&bsp->sem_perm, &lsp->sem_perm); lsp->sem_otime = bsp->sem_otime; @@ -121,7 +121,7 @@ bsd_to_linux_semid_ds(struct semid_ds *bsp, struct linux_semid_ds *lsp) } static void -linux_to_bsd_shmid_ds(struct linux_shmid_ds *lsp, struct shmid_ds *bsp) +linux_to_bsd_shmid_ds(struct l_shmid_ds *lsp, struct shmid_ds *bsp) { linux_to_bsd_ipc_perm(&lsp->shm_perm, &bsp->shm_perm); bsp->shm_segsz = lsp->shm_segsz; @@ -135,7 +135,7 @@ linux_to_bsd_shmid_ds(struct linux_shmid_ds *lsp, struct shmid_ds *bsp) } static void -bsd_to_linux_shmid_ds(struct shmid_ds *bsp, struct linux_shmid_ds *lsp) +bsd_to_linux_shmid_ds(struct shmid_ds *bsp, struct l_shmid_ds *lsp) { bsd_to_linux_ipc_perm(&bsp->shm_perm, &lsp->shm_perm); lsp->shm_segsz = bsp->shm_segsz; @@ -157,9 +157,9 @@ linux_semop(struct proc *p, struct linux_semop_args *args) int nsops; } */ bsd_args; - bsd_args.semid = args->arg1; - bsd_args.sops = (struct sembuf *)args->ptr; - bsd_args.nsops = args->arg2; + bsd_args.semid = args->semid; + bsd_args.sops = (struct sembuf *)args->tsops; + bsd_args.nsops = args->nsops; return semop(p, &bsd_args); } @@ -172,33 +172,32 @@ linux_semget(struct proc *p, struct linux_semget_args *args) int semflg; } */ bsd_args; - bsd_args.key = args->arg1; - bsd_args.nsems = args->arg2; - bsd_args.semflg = args->arg3; + bsd_args.key = args->key; + bsd_args.nsems = args->nsems; + bsd_args.semflg = args->semflg; return semget(p, &bsd_args); } int linux_semctl(struct proc *p, struct linux_semctl_args *args) { - struct linux_semid_ds linux_semid; - struct semid_ds bsd_semid; + struct l_semid_ds linux_semid; struct __semctl_args /* { - int semid; - int semnum; - int cmd; - union semun *arg; + int semid; + int semnum; + int cmd; + union semun *arg; } */ bsd_args; - int error; - caddr_t sg, unptr, dsp, ldsp; + int error; + union semun *unptr; + caddr_t sg; sg = stackgap_init(); - bsd_args.semid = args->arg1; - bsd_args.semnum = args->arg2; - bsd_args.cmd = args->arg3; - bsd_args.arg = (union semun *)args->ptr; + bsd_args.semid = args->semid; + bsd_args.semnum = args->semnum; + bsd_args.arg = (union semun *)&args->arg; - switch (args->arg3) { + switch (args->cmd) { case LINUX_IPC_RMID: bsd_args.cmd = IPC_RMID; break; @@ -219,48 +218,32 @@ linux_semctl(struct proc *p, struct linux_semctl_args *args) break; case LINUX_IPC_SET: bsd_args.cmd = IPC_SET; - error = copyin(args->ptr, &ldsp, sizeof(ldsp)); + error = copyin((caddr_t)args->arg.buf, &linux_semid, + sizeof(linux_semid)); if (error) - return error; - error = copyin(ldsp, (caddr_t)&linux_semid, sizeof(linux_semid)); - if (error) - return error; - linux_to_bsd_semid_ds(&linux_semid, &bsd_semid); + return (error); unptr = stackgap_alloc(&sg, sizeof(union semun)); - dsp = stackgap_alloc(&sg, sizeof(struct semid_ds)); - error = copyout((caddr_t)&bsd_semid, dsp, sizeof(bsd_semid)); - if (error) - return error; - error = copyout((caddr_t)&dsp, unptr, sizeof(dsp)); - if (error) - return error; - bsd_args.arg = (union semun *)unptr; + unptr->buf = stackgap_alloc(&sg, sizeof(struct semid_ds)); + linux_to_bsd_semid_ds(&linux_semid, unptr->buf); + bsd_args.arg = unptr; return __semctl(p, &bsd_args); case LINUX_IPC_STAT: bsd_args.cmd = IPC_STAT; - unptr = stackgap_alloc(&sg, sizeof(union semun *)); - dsp = stackgap_alloc(&sg, sizeof(struct semid_ds)); - error = copyout((caddr_t)&dsp, unptr, sizeof(dsp)); - if (error) - return error; - bsd_args.arg = (union semun *)unptr; + unptr = stackgap_alloc(&sg, sizeof(union semun)); + unptr->buf = stackgap_alloc(&sg, sizeof(struct semid_ds)); + bsd_args.arg = unptr; error = __semctl(p, &bsd_args); if (error) return error; - error = copyin(dsp, (caddr_t)&bsd_semid, sizeof(bsd_semid)); - if (error) - return error; - bsd_to_linux_semid_ds(&bsd_semid, &linux_semid); - error = copyin(args->ptr, &ldsp, sizeof(ldsp)); - if (error) - return error; - return copyout((caddr_t)&linux_semid, ldsp, sizeof(linux_semid)); + bsd_to_linux_semid_ds(unptr->buf, &linux_semid); + return copyout(&linux_semid, (caddr_t)args->arg.buf, + sizeof(linux_semid)); case LINUX_GETALL: /* FALLTHROUGH */ case LINUX_SETALL: /* FALLTHROUGH */ default: - uprintf("LINUX: 'ipc' typ=%d not implemented\n", args->arg3); + uprintf("linux: 'ipc' typ=%d not implemented\n", args->cmd); return EINVAL; } return __semctl(p, &bsd_args); @@ -276,10 +259,10 @@ linux_msgsnd(struct proc *p, struct linux_msgsnd_args *args) int msgflg; } */ bsd_args; - bsd_args.msqid = args->arg1; - bsd_args.msgp = args->ptr; - bsd_args.msgsz = args->arg2; - bsd_args.msgflg = args->arg3; + bsd_args.msqid = args->msqid; + bsd_args.msgp = args->msgp; + bsd_args.msgsz = args->msgsz; + bsd_args.msgflg = args->msgflg; return msgsnd(p, &bsd_args); } @@ -294,11 +277,11 @@ linux_msgrcv(struct proc *p, struct linux_msgrcv_args *args) int msgflg; } */ bsd_args; - bsd_args.msqid = args->arg1; - bsd_args.msgp = args->ptr; - bsd_args.msgsz = args->arg2; - bsd_args.msgtyp = 0; - bsd_args.msgflg = args->arg3; + bsd_args.msqid = args->msqid; + bsd_args.msgp = args->msgp; + bsd_args.msgsz = args->msgsz; + bsd_args.msgtyp = 0; /* XXX - args->msgtyp; */ + bsd_args.msgflg = args->msgflg; return msgrcv(p, &bsd_args); } @@ -310,8 +293,8 @@ linux_msgget(struct proc *p, struct linux_msgget_args *args) int msgflg; } */ bsd_args; - bsd_args.key = args->arg1; - bsd_args.msgflg = args->arg2; + bsd_args.key = args->key; + bsd_args.msgflg = args->msgflg; return msgget(p, &bsd_args); } @@ -325,11 +308,11 @@ linux_msgctl(struct proc *p, struct linux_msgctl_args *args) } */ bsd_args; int error; - bsd_args.msqid = args->arg1; - bsd_args.cmd = args->arg2; - bsd_args.buf = (struct msqid_ds *)args->ptr; + bsd_args.msqid = args->msqid; + bsd_args.cmd = args->cmd; + bsd_args.buf = (struct msqid_ds *)args->buf; error = msgctl(p, &bsd_args); - return ((args->arg2 == LINUX_IPC_RMID && error == EINVAL) ? 0 : error); + return ((args->cmd == LINUX_IPC_RMID && error == EINVAL) ? 0 : error); } int @@ -342,13 +325,13 @@ linux_shmat(struct proc *p, struct linux_shmat_args *args) } */ bsd_args; int error; - bsd_args.shmid = args->arg1; - bsd_args.shmaddr = args->ptr; - bsd_args.shmflg = args->arg2; + bsd_args.shmid = args->shmid; + bsd_args.shmaddr = args->shmaddr; + bsd_args.shmflg = args->shmflg; if ((error = shmat(p, &bsd_args))) return error; #ifdef __i386__ - if ((error = copyout(p->p_retval, (caddr_t)args->arg3, sizeof(int)))) + if ((error = copyout(p->p_retval, (caddr_t)args->raddr, sizeof(l_ulong)))) return error; p->p_retval[0] = 0; #endif @@ -362,7 +345,7 @@ linux_shmdt(struct proc *p, struct linux_shmdt_args *args) void *shmaddr; } */ bsd_args; - bsd_args.shmaddr = args->ptr; + bsd_args.shmaddr = args->shmaddr; return shmdt(p, &bsd_args); } @@ -375,17 +358,16 @@ linux_shmget(struct proc *p, struct linux_shmget_args *args) int shmflg; } */ bsd_args; - bsd_args.key = args->arg1; - bsd_args.size = args->arg2; - bsd_args.shmflg = args->arg3; + bsd_args.key = args->key; + bsd_args.size = args->size; + bsd_args.shmflg = args->shmflg; return shmget(p, &bsd_args); } int linux_shmctl(struct proc *p, struct linux_shmctl_args *args) { - struct shmid_ds bsd_shmid; - struct linux_shmid_ds linux_shmid; + struct l_shmid_ds linux_shmid; struct shmctl_args /* { int shmid; int cmd; @@ -394,46 +376,37 @@ linux_shmctl(struct proc *p, struct linux_shmctl_args *args) int error; caddr_t sg = stackgap_init(); - switch (args->arg2) { + switch (args->cmd) { case LINUX_IPC_STAT: - bsd_args.shmid = args->arg1; + bsd_args.shmid = args->shmid; bsd_args.cmd = IPC_STAT; bsd_args.buf = (struct shmid_ds*)stackgap_alloc(&sg, sizeof(struct shmid_ds)); if ((error = shmctl(p, &bsd_args))) return error; - if ((error = copyin((caddr_t)bsd_args.buf, (caddr_t)&bsd_shmid, - sizeof(struct shmid_ds)))) - return error; - bsd_to_linux_shmid_ds(&bsd_shmid, &linux_shmid); - return copyout((caddr_t)&linux_shmid, args->ptr, sizeof(linux_shmid)); + bsd_to_linux_shmid_ds(bsd_args.buf, &linux_shmid); + return copyout(&linux_shmid, (caddr_t)args->buf, sizeof(linux_shmid)); case LINUX_IPC_SET: - if ((error = copyin(args->ptr, (caddr_t)&linux_shmid, - sizeof(linux_shmid)))) + if ((error = copyin((caddr_t)args->buf, &linux_shmid, + sizeof(linux_shmid)))) return error; - linux_to_bsd_shmid_ds(&linux_shmid, &bsd_shmid); bsd_args.buf = (struct shmid_ds*)stackgap_alloc(&sg, sizeof(struct shmid_ds)); - if ((error = copyout((caddr_t)&bsd_shmid, (caddr_t)bsd_args.buf, - sizeof(struct shmid_ds)))) - return error; - bsd_args.shmid = args->arg1; + linux_to_bsd_shmid_ds(&linux_shmid, bsd_args.buf); + bsd_args.shmid = args->shmid; bsd_args.cmd = IPC_SET; return shmctl(p, &bsd_args); case LINUX_IPC_RMID: - bsd_args.shmid = args->arg1; + bsd_args.shmid = args->shmid; bsd_args.cmd = IPC_RMID; - if (NULL == args->ptr) + if (args->buf == NULL) bsd_args.buf = NULL; else { - if ((error = copyin(args->ptr, (caddr_t)&linux_shmid, + if ((error = copyin((caddr_t)args->buf, &linux_shmid, sizeof(linux_shmid)))) return error; - linux_to_bsd_shmid_ds(&linux_shmid, &bsd_shmid); bsd_args.buf = (struct shmid_ds*)stackgap_alloc(&sg, sizeof(struct shmid_ds)); - if ((error = copyout((caddr_t)&bsd_shmid, (caddr_t)bsd_args.buf, - sizeof(struct shmid_ds)))) - return error; + linux_to_bsd_shmid_ds(&linux_shmid, bsd_args.buf); } return shmctl(p, &bsd_args); @@ -443,7 +416,7 @@ linux_shmctl(struct proc *p, struct linux_shmctl_args *args) case LINUX_SHM_LOCK: case LINUX_SHM_UNLOCK: default: - uprintf("LINUX: 'ipc' typ=%d not implemented\n", args->arg2); + uprintf("linux: 'ipc' typ=%d not implemented\n", args->cmd); return EINVAL; } } diff --git a/sys/compat/linux/linux_ipc.h b/sys/compat/linux/linux_ipc.h index 946d963..d0db461 100644 --- a/sys/compat/linux/linux_ipc.h +++ b/sys/compat/linux/linux_ipc.h @@ -31,21 +31,86 @@ #ifndef _LINUX_IPC_H_ #define _LINUX_IPC_H_ -#ifndef __alpha__ +#ifdef __i386__ -#define linux_msgctl_args linux_ipc_args -#define linux_msgget_args linux_ipc_args -#define linux_msgrcv_args linux_ipc_args -#define linux_msgsnd_args linux_ipc_args +struct linux_msgctl_args +{ + l_int msqid; + l_int cmd; + struct l_msqid_ds *buf; +}; -#define linux_semctl_args linux_ipc_args -#define linux_semget_args linux_ipc_args -#define linux_semop_args linux_ipc_args +struct linux_msgget_args +{ + l_key_t key; + l_int msgflg; +}; -#define linux_shmat_args linux_ipc_args -#define linux_shmctl_args linux_ipc_args -#define linux_shmdt_args linux_ipc_args -#define linux_shmget_args linux_ipc_args +struct linux_msgrcv_args +{ + l_int msqid; + struct l_msgbuf *msgp; + l_size_t msgsz; + l_long msgtyp; + l_int msgflg; +}; + +struct linux_msgsnd_args +{ + l_int msqid; + struct l_msgbuf *msgp; + l_size_t msgsz; + l_int msgflg; +}; + +struct linux_semctl_args +{ + l_int semid; + l_int semnum; + l_int cmd; + union l_semun arg; +}; + +struct linux_semget_args +{ + l_key_t key; + l_int nsems; + l_int semflg; +}; + +struct linux_semop_args +{ + l_int semid; + struct l_sembuf *tsops; + l_uint nsops; +}; + +struct linux_shmat_args +{ + l_int shmid; + char *shmaddr; + l_int shmflg; + l_ulong *raddr; +}; + +struct linux_shmctl_args +{ + l_int shmid; + l_int cmd; + struct l_shmid_ds *buf; +}; + +struct linux_shmdt_args +{ + char *shmaddr; +}; + +struct linux_shmget_args +{ + l_key_t key; + l_size_t size; + l_int shmflg; +}; int linux_msgctl __P((struct proc *, struct linux_msgctl_args *)); int linux_msgget __P((struct proc *, struct linux_msgget_args *)); @@ -60,6 +125,7 @@ int linux_shmat __P((struct proc *, struct linux_shmat_args *)); int linux_shmctl __P((struct proc *, struct linux_shmctl_args *)); int linux_shmdt __P((struct proc *, struct linux_shmdt_args *)); int linux_shmget __P((struct proc *, struct linux_shmget_args *)); -#endif /*!__alpha__*/ + +#endif /* __i386__ */ #endif /* _LINUX_IPC_H_ */ diff --git a/sys/compat/linux/linux_mib.c b/sys/compat/linux/linux_mib.c index e15b2a4..fda251b 100644 --- a/sys/compat/linux/linux_mib.c +++ b/sys/compat/linux/linux_mib.c @@ -69,7 +69,7 @@ SYSCTL_PROC(_compat_linux, OID_AUTO, osname, 0, 0, linux_sysctl_osname, "A", "Linux kernel OS name"); -static char linux_osrelease[LINUX_MAX_UTSNAME] = "2.2.12"; +static char linux_osrelease[LINUX_MAX_UTSNAME] = "2.4.2"; static int linux_sysctl_osrelease(SYSCTL_HANDLER_ARGS) diff --git a/sys/compat/linux/linux_misc.c b/sys/compat/linux/linux_misc.c index 6c270fc..a717d81 100644 --- a/sys/compat/linux/linux_misc.c +++ b/sys/compat/linux/linux_misc.c @@ -40,6 +40,7 @@ #include <sys/mount.h> #include <sys/mutex.h> #include <sys/namei.h> +#include <sys/poll.h> #include <sys/proc.h> #include <sys/blist.h> #include <sys/reboot.h> @@ -85,87 +86,79 @@ (((sig) <= LINUX_SIGTBLSZ) ? bsd_to_linux_signal[_SIG_IDX(sig)] : sig) #endif -struct linux_rlimit { - unsigned long rlim_cur; - unsigned long rlim_max; -}; - #ifndef __alpha__ -static unsigned int linux_to_bsd_resource[LINUX_RLIM_NLIMITS] = -{ RLIMIT_CPU, RLIMIT_FSIZE, RLIMIT_DATA, RLIMIT_STACK, - RLIMIT_CORE, RLIMIT_RSS, RLIMIT_NPROC, RLIMIT_NOFILE, - RLIMIT_MEMLOCK, -1 +static unsigned int linux_to_bsd_resource[LINUX_RLIM_NLIMITS] = { + RLIMIT_CPU, RLIMIT_FSIZE, RLIMIT_DATA, RLIMIT_STACK, + RLIMIT_CORE, RLIMIT_RSS, RLIMIT_NPROC, RLIMIT_NOFILE, + RLIMIT_MEMLOCK, -1 }; #endif /*!__alpha__*/ -struct linux_sysinfo { - long uptime; /* Seconds since boot */ - unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ - unsigned long totalram; /* Total usable main memory size */ - unsigned long freeram; /* Available memory size */ - unsigned long sharedram; /* Amount of shared memory */ - unsigned long bufferram; /* Memory used by buffers */ - unsigned long totalswap; /* Total swap space size */ - unsigned long freeswap; /* swap space still available */ - unsigned short procs; /* Number of current processes */ - char _f[22]; /* Pads structure to 64 bytes */ +struct l_sysinfo { + l_long uptime; /* Seconds since boot */ + l_ulong loads[3]; /* 1, 5, and 15 minute load averages */ + l_ulong totalram; /* Total usable main memory size */ + l_ulong freeram; /* Available memory size */ + l_ulong sharedram; /* Amount of shared memory */ + l_ulong bufferram; /* Memory used by buffers */ + l_ulong totalswap; /* Total swap space size */ + l_ulong freeswap; /* swap space still available */ + l_ushort procs; /* Number of current processes */ + char _f[22]; /* Pads structure to 64 bytes */ }; - #ifndef __alpha__ int linux_sysinfo(struct proc *p, struct linux_sysinfo_args *args) { - struct linux_sysinfo sysinfo; - vm_object_t object; - int i; - struct timespec ts; - - /* Uptime is copied out of print_uptime() procedure in kern_shutdown.c */ - getnanouptime(&ts); - i = 0; - if (ts.tv_sec >= 86400) { - ts.tv_sec %= 86400; - i = 1; - } - if (i || ts.tv_sec >= 3600) { - ts.tv_sec %= 3600; - i = 1; - } - if (i || ts.tv_sec >= 60) { - ts.tv_sec %= 60; - i = 1; - } - sysinfo.uptime=ts.tv_sec; - - /* Use the information from the mib to get our load averages */ - for (i = 0; i < 3; i++) - sysinfo.loads[i] = averunnable.ldavg[i]; - - sysinfo.totalram = physmem * PAGE_SIZE; - sysinfo.freeram = sysinfo.totalram - cnt.v_wire_count * PAGE_SIZE; - - sysinfo.sharedram = 0; - for (object = TAILQ_FIRST(&vm_object_list); object != NULL; - object = TAILQ_NEXT(object, object_list)) - if (object->shadow_count > 1) - sysinfo.sharedram += object->resident_page_count; - - sysinfo.sharedram *= PAGE_SIZE; - - sysinfo.bufferram = 0; - - if (swapblist == NULL) { - sysinfo.totalswap= 0; - sysinfo.freeswap = 0; - } else { - sysinfo.totalswap = swapblist->bl_blocks * 1024; - sysinfo.freeswap = swapblist->bl_root->u.bmu_avail * PAGE_SIZE; - } - - sysinfo.procs = 20; /* Hack */ - - return copyout((caddr_t)&sysinfo, (caddr_t)args->info, - sizeof(struct linux_sysinfo)); + struct l_sysinfo sysinfo; + vm_object_t object; + int i; + struct timespec ts; + + /* Uptime is copied out of print_uptime() in kern_shutdown.c */ + getnanouptime(&ts); + i = 0; + if (ts.tv_sec >= 86400) { + ts.tv_sec %= 86400; + i = 1; + } + if (i || ts.tv_sec >= 3600) { + ts.tv_sec %= 3600; + i = 1; + } + if (i || ts.tv_sec >= 60) { + ts.tv_sec %= 60; + i = 1; + } + sysinfo.uptime=ts.tv_sec; + + /* Use the information from the mib to get our load averages */ + for (i = 0; i < 3; i++) + sysinfo.loads[i] = averunnable.ldavg[i]; + + sysinfo.totalram = physmem * PAGE_SIZE; + sysinfo.freeram = sysinfo.totalram - cnt.v_wire_count * PAGE_SIZE; + + sysinfo.sharedram = 0; + for (object = TAILQ_FIRST(&vm_object_list); object != NULL; + object = TAILQ_NEXT(object, object_list)) + if (object->shadow_count > 1) + sysinfo.sharedram += object->resident_page_count; + + sysinfo.sharedram *= PAGE_SIZE; + sysinfo.bufferram = 0; + + if (swapblist == NULL) { + sysinfo.totalswap= 0; + sysinfo.freeswap = 0; + } else { + sysinfo.totalswap = swapblist->bl_blocks * 1024; + sysinfo.freeswap = swapblist->bl_root->u.bmu_avail * PAGE_SIZE; + } + + sysinfo.procs = 20; /* Hack */ + + return copyout(&sysinfo, (caddr_t)args->info, sizeof(sysinfo)); } #endif /*!__alpha__*/ @@ -173,475 +166,427 @@ linux_sysinfo(struct proc *p, struct linux_sysinfo_args *args) int linux_alarm(struct proc *p, struct linux_alarm_args *args) { - struct itimerval it, old_it; - struct timeval tv; - int s; + struct itimerval it, old_it; + struct timeval tv; + int s; #ifdef DEBUG if (ldebug(alarm)) printf(ARGS(alarm, "%u"), args->secs); #endif - if (args->secs > 100000000) - return EINVAL; - it.it_value.tv_sec = (long)args->secs; - it.it_value.tv_usec = 0; - it.it_interval.tv_sec = 0; - it.it_interval.tv_usec = 0; - s = splsoftclock(); - old_it = p->p_realtimer; - getmicrouptime(&tv); - if (timevalisset(&old_it.it_value)) - callout_stop(&p->p_itcallout); - if (it.it_value.tv_sec != 0) { - callout_reset(&p->p_itcallout, tvtohz(&it.it_value), realitexpire, p); - timevaladd(&it.it_value, &tv); - } - p->p_realtimer = it; - splx(s); - if (timevalcmp(&old_it.it_value, &tv, >)) { - timevalsub(&old_it.it_value, &tv); - if (old_it.it_value.tv_usec != 0) - old_it.it_value.tv_sec++; - p->p_retval[0] = old_it.it_value.tv_sec; - } - return 0; + + if (args->secs > 100000000) + return EINVAL; + + it.it_value.tv_sec = (long)args->secs; + it.it_value.tv_usec = 0; + it.it_interval.tv_sec = 0; + it.it_interval.tv_usec = 0; + s = splsoftclock(); + old_it = p->p_realtimer; + getmicrouptime(&tv); + if (timevalisset(&old_it.it_value)) + callout_stop(&p->p_itcallout); + if (it.it_value.tv_sec != 0) { + callout_reset(&p->p_itcallout, tvtohz(&it.it_value), + realitexpire, p); + timevaladd(&it.it_value, &tv); + } + p->p_realtimer = it; + splx(s); + if (timevalcmp(&old_it.it_value, &tv, >)) { + timevalsub(&old_it.it_value, &tv); + if (old_it.it_value.tv_usec != 0) + old_it.it_value.tv_sec++; + p->p_retval[0] = old_it.it_value.tv_sec; + } + return 0; } #endif /*!__alpha__*/ int linux_brk(struct proc *p, struct linux_brk_args *args) { -#if 0 - struct vmspace *vm = p->p_vmspace; - vm_offset_t new, old; - int error; - - if ((vm_offset_t)args->dsend < (vm_offset_t)vm->vm_daddr) - return EINVAL; - if (((caddr_t)args->dsend - (caddr_t)vm->vm_daddr) - > p->p_rlimit[RLIMIT_DATA].rlim_cur) - return ENOMEM; - - old = round_page((vm_offset_t)vm->vm_daddr) + ctob(vm->vm_dsize); - new = round_page((vm_offset_t)args->dsend); - p->p_retval[0] = old; - if ((new-old) > 0) { - if (swap_pager_full) - return ENOMEM; - error = vm_map_find(&vm->vm_map, NULL, 0, &old, (new-old), FALSE, - VM_PROT_ALL, VM_PROT_ALL, 0); - if (error) - return error; - vm->vm_dsize += btoc((new-old)); - p->p_retval[0] = (int)(vm->vm_daddr + ctob(vm->vm_dsize)); - } - return 0; -#else - struct vmspace *vm = p->p_vmspace; - vm_offset_t new, old; - struct obreak_args /* { - char * nsize; - } */ tmp; + struct vmspace *vm = p->p_vmspace; + vm_offset_t new, old; + struct obreak_args /* { + char * nsize; + } */ tmp; #ifdef DEBUG if (ldebug(brk)) printf(ARGS(brk, "%p"), (void *)args->dsend); #endif - old = (vm_offset_t)vm->vm_daddr + ctob(vm->vm_dsize); - new = (vm_offset_t)args->dsend; - tmp.nsize = (char *) new; - if (((caddr_t)new > vm->vm_daddr) && !obreak(p, &tmp)) - p->p_retval[0] = (long)new; - else - p->p_retval[0] = (long)old; - - return 0; -#endif + old = (vm_offset_t)vm->vm_daddr + ctob(vm->vm_dsize); + new = (vm_offset_t)args->dsend; + tmp.nsize = (char *) new; + if (((caddr_t)new > vm->vm_daddr) && !obreak(p, &tmp)) + p->p_retval[0] = (long)new; + else + p->p_retval[0] = (long)old; + + return 0; } int linux_uselib(struct proc *p, struct linux_uselib_args *args) { - struct nameidata ni; - struct vnode *vp; - struct exec *a_out; - struct vattr attr; - vm_offset_t vmaddr; - unsigned long file_offset; - vm_offset_t buffer; - unsigned long bss_size; - int error; - caddr_t sg; - int locked; - - sg = stackgap_init(); - CHECKALTEXIST(p, &sg, args->library); + struct nameidata ni; + struct vnode *vp; + struct exec *a_out; + struct vattr attr; + vm_offset_t vmaddr; + unsigned long file_offset; + vm_offset_t buffer; + unsigned long bss_size; + int error; + caddr_t sg; + int locked; + + sg = stackgap_init(); + CHECKALTEXIST(p, &sg, args->library); #ifdef DEBUG if (ldebug(uselib)) printf(ARGS(uselib, "%s"), args->library); #endif - a_out = NULL; - locked = 0; - vp = NULL; - - NDINIT(&ni, LOOKUP, FOLLOW | LOCKLEAF, UIO_USERSPACE, args->library, p); - error = namei(&ni); - if (error) - goto cleanup; - - vp = ni.ni_vp; - /* - * XXX This looks like a bogus check - a LOCKLEAF namei should not succeed - * without returning a vnode. - */ - if (vp == NULL) { - error = ENOEXEC; /* ?? */ - goto cleanup; - } - NDFREE(&ni, NDF_ONLY_PNBUF); - - /* - * From here on down, we have a locked vnode that must be unlocked. - */ - locked++; - - /* - * Writable? - */ - if (vp->v_writecount) { - error = ETXTBSY; - goto cleanup; - } - - /* - * Executable? - */ - error = VOP_GETATTR(vp, &attr, p->p_ucred, p); - if (error) - goto cleanup; - - if ((vp->v_mount->mnt_flag & MNT_NOEXEC) || - ((attr.va_mode & 0111) == 0) || - (attr.va_type != VREG)) { - error = ENOEXEC; - goto cleanup; - } - - /* - * Sensible size? - */ - if (attr.va_size == 0) { - error = ENOEXEC; - goto cleanup; - } - - /* - * Can we access it? - */ - error = VOP_ACCESS(vp, VEXEC, p->p_ucred, p); - if (error) - goto cleanup; - - error = VOP_OPEN(vp, FREAD, p->p_ucred, p); - if (error) - goto cleanup; - - /* - * Lock no longer needed - */ - VOP_UNLOCK(vp, 0, p); - locked = 0; - - /* - * Pull in executable header into kernel_map - */ - error = vm_mmap(kernel_map, (vm_offset_t *)&a_out, PAGE_SIZE, - VM_PROT_READ, VM_PROT_READ, 0, (caddr_t)vp, 0); - if (error) - goto cleanup; - - /* - * Is it a Linux binary ? - */ - if (((a_out->a_magic >> 16) & 0xff) != 0x64) { - error = ENOEXEC; - goto cleanup; - } - - /* While we are here, we should REALLY do some more checks */ - - /* - * Set file/virtual offset based on a.out variant. - */ - switch ((int)(a_out->a_magic & 0xffff)) { - case 0413: /* ZMAGIC */ - file_offset = 1024; - break; - case 0314: /* QMAGIC */ - file_offset = 0; - break; - default: - error = ENOEXEC; - goto cleanup; - } - - bss_size = round_page(a_out->a_bss); - - /* - * Check various fields in header for validity/bounds. - */ - if (a_out->a_text & PAGE_MASK || a_out->a_data & PAGE_MASK) { - error = ENOEXEC; - goto cleanup; - } - - /* text + data can't exceed file size */ - if (a_out->a_data + a_out->a_text > attr.va_size) { - error = EFAULT; - goto cleanup; - } - - /* To protect p->p_rlimit in the if condition. */ - mtx_assert(&Giant, MA_OWNED); - - /* - * text/data/bss must not exceed limits - * XXX: this is not complete. it should check current usage PLUS - * the resources needed by this library. - */ - if (a_out->a_text > MAXTSIZ || - a_out->a_data + bss_size > p->p_rlimit[RLIMIT_DATA].rlim_cur) { - error = ENOMEM; - goto cleanup; - } - - /* - * prevent more writers - */ - vp->v_flag |= VTEXT; - - /* - * Check if file_offset page aligned,. - * Currently we cannot handle misalinged file offsets, - * and so we read in the entire image (what a waste). - */ - if (file_offset & PAGE_MASK) { -#ifdef DEBUG -printf("uselib: Non page aligned binary %lu\n", file_offset); -#endif + a_out = NULL; + locked = 0; + vp = NULL; + + NDINIT(&ni, LOOKUP, FOLLOW|LOCKLEAF, UIO_USERSPACE, args->library, p); + error = namei(&ni); + if (error) + goto cleanup; + + vp = ni.ni_vp; /* - * Map text+data read/write/execute + * XXX - This looks like a bogus check. A LOCKLEAF namei should not + * succeed without returning a vnode. */ + if (vp == NULL) { + error = ENOEXEC; /* ?? */ + goto cleanup; + } + NDFREE(&ni, NDF_ONLY_PNBUF); - /* a_entry is the load address and is page aligned */ - vmaddr = trunc_page(a_out->a_entry); + /* + * From here on down, we have a locked vnode that must be unlocked. + */ + locked++; - /* get anon user mapping, read+write+execute */ - error = vm_map_find(&p->p_vmspace->vm_map, NULL, 0, &vmaddr, - a_out->a_text + a_out->a_data, FALSE, - VM_PROT_ALL, VM_PROT_ALL, 0); - if (error) - goto cleanup; + /* Writable? */ + if (vp->v_writecount) { + error = ETXTBSY; + goto cleanup; + } - /* map file into kernel_map */ - error = vm_mmap(kernel_map, &buffer, - round_page(a_out->a_text + a_out->a_data + file_offset), - VM_PROT_READ, VM_PROT_READ, 0, - (caddr_t)vp, trunc_page(file_offset)); + /* Executable? */ + error = VOP_GETATTR(vp, &attr, p->p_ucred, p); if (error) - goto cleanup; + goto cleanup; - /* copy from kernel VM space to user space */ - error = copyout((caddr_t)(void *)(uintptr_t)(buffer + file_offset), - (caddr_t)vmaddr, a_out->a_text + a_out->a_data); + if ((vp->v_mount->mnt_flag & MNT_NOEXEC) || + ((attr.va_mode & 0111) == 0) || (attr.va_type != VREG)) { + error = ENOEXEC; + goto cleanup; + } - /* release temporary kernel space */ - vm_map_remove(kernel_map, buffer, - buffer + round_page(a_out->a_text + a_out->a_data + file_offset)); + /* Sensible size? */ + if (attr.va_size == 0) { + error = ENOEXEC; + goto cleanup; + } + /* Can we access it? */ + error = VOP_ACCESS(vp, VEXEC, p->p_ucred, p); if (error) - goto cleanup; - } - else { -#ifdef DEBUG -printf("uselib: Page aligned binary %lu\n", file_offset); -#endif + goto cleanup; + + error = VOP_OPEN(vp, FREAD, p->p_ucred, p); + if (error) + goto cleanup; + /* - * for QMAGIC, a_entry is 20 bytes beyond the load address - * to skip the executable header + * Lock no longer needed */ - vmaddr = trunc_page(a_out->a_entry); + VOP_UNLOCK(vp, 0, p); + locked = 0; + + /* Pull in executable header into kernel_map */ + error = vm_mmap(kernel_map, (vm_offset_t *)&a_out, PAGE_SIZE, + VM_PROT_READ, VM_PROT_READ, 0, (caddr_t)vp, 0); + if (error) + goto cleanup; + + /* Is it a Linux binary ? */ + if (((a_out->a_magic >> 16) & 0xff) != 0x64) { + error = ENOEXEC; + goto cleanup; + } /* - * Map it all into the process's space as a single copy-on-write - * "data" segment. + * While we are here, we should REALLY do some more checks */ - error = vm_mmap(&p->p_vmspace->vm_map, &vmaddr, - a_out->a_text + a_out->a_data, - VM_PROT_ALL, VM_PROT_ALL, MAP_PRIVATE | MAP_FIXED, - (caddr_t)vp, file_offset); - if (error) - goto cleanup; - } -#ifdef DEBUG -printf("mem=%08lx = %08lx %08lx\n", (long)vmaddr, ((long*)vmaddr)[0], ((long*)vmaddr)[1]); -#endif - if (bss_size != 0) { - /* - * Calculate BSS start address + + /* Set file/virtual offset based on a.out variant. */ + switch ((int)(a_out->a_magic & 0xffff)) { + case 0413: /* ZMAGIC */ + file_offset = 1024; + break; + case 0314: /* QMAGIC */ + file_offset = 0; + break; + default: + error = ENOEXEC; + goto cleanup; + } + + bss_size = round_page(a_out->a_bss); + + /* Check various fields in header for validity/bounds. */ + if (a_out->a_text & PAGE_MASK || a_out->a_data & PAGE_MASK) { + error = ENOEXEC; + goto cleanup; + } + + /* text + data can't exceed file size */ + if (a_out->a_data + a_out->a_text > attr.va_size) { + error = EFAULT; + goto cleanup; + } + + /* To protect p->p_rlimit in the if condition. */ + mtx_assert(&Giant, MA_OWNED); + + /* + * text/data/bss must not exceed limits + * XXX - this is not complete. it should check current usage PLUS + * the resources needed by this library. */ - vmaddr = trunc_page(a_out->a_entry) + a_out->a_text + a_out->a_data; + if (a_out->a_text > MAXTSIZ || + a_out->a_data + bss_size > p->p_rlimit[RLIMIT_DATA].rlim_cur) { + error = ENOMEM; + goto cleanup; + } + + /* prevent more writers */ + vp->v_flag |= VTEXT; /* - * allocate some 'anon' space + * Check if file_offset page aligned. Currently we cannot handle + * misalinged file offsets, and so we read in the entire image + * (what a waste). */ - error = vm_map_find(&p->p_vmspace->vm_map, NULL, 0, &vmaddr, - bss_size, FALSE, - VM_PROT_ALL, VM_PROT_ALL, 0); - if (error) - goto cleanup; - } + if (file_offset & PAGE_MASK) { +#ifdef DEBUG + printf("uselib: Non page aligned binary %lu\n", file_offset); +#endif + /* Map text+data read/write/execute */ + + /* a_entry is the load address and is page aligned */ + vmaddr = trunc_page(a_out->a_entry); + + /* get anon user mapping, read+write+execute */ + error = vm_map_find(&p->p_vmspace->vm_map, NULL, 0, &vmaddr, + a_out->a_text + a_out->a_data, FALSE, VM_PROT_ALL, + VM_PROT_ALL, 0); + if (error) + goto cleanup; + + /* map file into kernel_map */ + error = vm_mmap(kernel_map, &buffer, + round_page(a_out->a_text + a_out->a_data + file_offset), + VM_PROT_READ, VM_PROT_READ, 0, (caddr_t)vp, + trunc_page(file_offset)); + if (error) + goto cleanup; + + /* copy from kernel VM space to user space */ + error = copyout((caddr_t)(uintptr_t)(buffer + file_offset), + (caddr_t)vmaddr, a_out->a_text + a_out->a_data); + + /* release temporary kernel space */ + vm_map_remove(kernel_map, buffer, buffer + + round_page(a_out->a_text + a_out->a_data + file_offset)); + + if (error) + goto cleanup; + } else { +#ifdef DEBUG + printf("uselib: Page aligned binary %lu\n", file_offset); +#endif + /* + * for QMAGIC, a_entry is 20 bytes beyond the load address + * to skip the executable header + */ + vmaddr = trunc_page(a_out->a_entry); + + /* + * Map it all into the process's space as a single + * copy-on-write "data" segment. + */ + error = vm_mmap(&p->p_vmspace->vm_map, &vmaddr, + a_out->a_text + a_out->a_data, VM_PROT_ALL, VM_PROT_ALL, + MAP_PRIVATE | MAP_FIXED, (caddr_t)vp, file_offset); + if (error) + goto cleanup; + } +#ifdef DEBUG + printf("mem=%08lx = %08lx %08lx\n", (long)vmaddr, ((long*)vmaddr)[0], + ((long*)vmaddr)[1]); +#endif + if (bss_size != 0) { + /* Calculate BSS start address */ + vmaddr = trunc_page(a_out->a_entry) + a_out->a_text + + a_out->a_data; + + /* allocate some 'anon' space */ + error = vm_map_find(&p->p_vmspace->vm_map, NULL, 0, &vmaddr, + bss_size, FALSE, VM_PROT_ALL, VM_PROT_ALL, 0); + if (error) + goto cleanup; + } cleanup: - /* - * Unlock vnode if needed - */ - if (locked) - VOP_UNLOCK(vp, 0, p); + /* Unlock vnode if needed */ + if (locked) + VOP_UNLOCK(vp, 0, p); - /* - * Release the kernel mapping. - */ - if (a_out) - vm_map_remove(kernel_map, (vm_offset_t)a_out, (vm_offset_t)a_out + PAGE_SIZE); + /* Release the kernel mapping. */ + if (a_out) + vm_map_remove(kernel_map, (vm_offset_t)a_out, + (vm_offset_t)a_out + PAGE_SIZE); - return error; + return error; } int -linux_newselect(struct proc *p, struct linux_newselect_args *args) +linux_select(struct proc *p, struct linux_select_args *args) { - struct select_args bsa; - struct timeval tv0, tv1, utv, *tvp; - caddr_t sg; - int error; + struct select_args bsa; + struct timeval tv0, tv1, utv, *tvp; + caddr_t sg; + int error; #ifdef DEBUG - if (ldebug(newselect)) - printf(ARGS(newselect, "%d, %p, %p, %p, %p"), - args->nfds, (void *)args->readfds, - (void *)args->writefds, (void *)args->exceptfds, - (void *)args->timeout); + if (ldebug(select)) + printf(ARGS(select, "%d, %p, %p, %p, %p"), args->nfds, + (void *)args->readfds, (void *)args->writefds, + (void *)args->exceptfds, (void *)args->timeout); #endif - error = 0; - bsa.nd = args->nfds; - bsa.in = args->readfds; - bsa.ou = args->writefds; - bsa.ex = args->exceptfds; - bsa.tv = args->timeout; - - /* - * Store current time for computation of the amount of - * time left. - */ - if (args->timeout) { - if ((error = copyin(args->timeout, &utv, sizeof(utv)))) - goto select_out; + + error = 0; + bsa.nd = args->nfds; + bsa.in = args->readfds; + bsa.ou = args->writefds; + bsa.ex = args->exceptfds; + bsa.tv = (struct timeval *)args->timeout; + + /* + * Store current time for computation of the amount of + * time left. + */ + if (args->timeout) { + if ((error = copyin((caddr_t)args->timeout, &utv, + sizeof(utv)))) + goto select_out; #ifdef DEBUG - if (ldebug(newselect)) - printf(LMSG("incoming timeout (%ld/%ld)"), - utv.tv_sec, utv.tv_usec); + if (ldebug(select)) + printf(LMSG("incoming timeout (%ld/%ld)"), + utv.tv_sec, utv.tv_usec); #endif - if (itimerfix(&utv)) { - /* - * The timeval was invalid. Convert it to something - * valid that will act as it does under Linux. - */ - sg = stackgap_init(); - tvp = stackgap_alloc(&sg, sizeof(utv)); - utv.tv_sec += utv.tv_usec / 1000000; - utv.tv_usec %= 1000000; - if (utv.tv_usec < 0) { - utv.tv_sec -= 1; - utv.tv_usec += 1000000; - } - if (utv.tv_sec < 0) - timevalclear(&utv); - if ((error = copyout(&utv, tvp, sizeof(utv)))) - goto select_out; - bsa.tv = tvp; + + if (itimerfix(&utv)) { + /* + * The timeval was invalid. Convert it to something + * valid that will act as it does under Linux. + */ + sg = stackgap_init(); + tvp = stackgap_alloc(&sg, sizeof(utv)); + utv.tv_sec += utv.tv_usec / 1000000; + utv.tv_usec %= 1000000; + if (utv.tv_usec < 0) { + utv.tv_sec -= 1; + utv.tv_usec += 1000000; + } + if (utv.tv_sec < 0) + timevalclear(&utv); + if ((error = copyout(&utv, tvp, sizeof(utv)))) + goto select_out; + bsa.tv = tvp; + } + microtime(&tv0); } - microtime(&tv0); - } - error = select(p, &bsa); + error = select(p, &bsa); #ifdef DEBUG - if (ldebug(newselect)) + if (ldebug(select)) printf(LMSG("real select returns %d"), error); #endif + if (error) { + /* + * See fs/select.c in the Linux kernel. Without this, + * Maelstrom doesn't work. + */ + if (error == ERESTART) + error = EINTR; + goto select_out; + } - if (error) { - /* - * See fs/select.c in the Linux kernel. Without this, - * Maelstrom doesn't work. - */ - if (error == ERESTART) - error = EINTR; - goto select_out; - } - - if (args->timeout) { - if (p->p_retval[0]) { - /* - * Compute how much time was left of the timeout, - * by subtracting the current time and the time - * before we started the call, and subtracting - * that result from the user-supplied value. - */ - microtime(&tv1); - timevalsub(&tv1, &tv0); - timevalsub(&utv, &tv1); - if (utv.tv_sec < 0) - timevalclear(&utv); - } else - timevalclear(&utv); + if (args->timeout) { + if (p->p_retval[0]) { + /* + * Compute how much time was left of the timeout, + * by subtracting the current time and the time + * before we started the call, and subtracting + * that result from the user-supplied value. + */ + microtime(&tv1); + timevalsub(&tv1, &tv0); + timevalsub(&utv, &tv1); + if (utv.tv_sec < 0) + timevalclear(&utv); + } else + timevalclear(&utv); #ifdef DEBUG - if (ldebug(newselect)) - printf(LMSG("outgoing timeout (%ld/%ld)"), - utv.tv_sec, utv.tv_usec); + if (ldebug(select)) + printf(LMSG("outgoing timeout (%ld/%ld)"), + utv.tv_sec, utv.tv_usec); #endif - if ((error = copyout(&utv, args->timeout, sizeof(utv)))) - goto select_out; - } + if ((error = copyout(&utv, (caddr_t)args->timeout, + sizeof(utv)))) + goto select_out; + } select_out: #ifdef DEBUG - if (ldebug(newselect)) - printf(LMSG("newselect_out -> %d"), error); + if (ldebug(select)) + printf(LMSG("select_out -> %d"), error); #endif - return error; + return error; } int linux_getpgid(struct proc *p, struct linux_getpgid_args *args) { - struct proc *curp; + struct proc *curp; #ifdef DEBUG if (ldebug(getpgid)) printf(ARGS(getpgid, "%d"), args->pid); #endif - if (args->pid != p->p_pid) { - if (!(curp = pfind(args->pid))) - return ESRCH; - p->p_retval[0] = curp->p_pgid; - PROC_UNLOCK(curp); - } - else - p->p_retval[0] = p->p_pgid; - return 0; + + if (args->pid != p->p_pid) { + if (!(curp = pfind(args->pid))) + return ESRCH; + p->p_retval[0] = curp->p_pgid; + PROC_UNLOCK(curp); + } else + p->p_retval[0] = p->p_pgid; + + return 0; } int @@ -670,7 +615,7 @@ linux_mremap(struct proc *p, struct linux_mremap_args *args) } if (args->new_len < args->old_len) { - bsd_args.addr = args->addr + args->new_len; + bsd_args.addr = (caddr_t)(args->addr + args->new_len); bsd_args.len = args->old_len - args->new_len; error = munmap(p, &bsd_args); } @@ -684,7 +629,7 @@ linux_msync(struct proc *p, struct linux_msync_args *args) { struct msync_args bsd_args; - bsd_args.addr = args->addr; + bsd_args.addr = (caddr_t)args->addr; bsd_args.len = args->len; bsd_args.flags = 0; /* XXX ignore */ @@ -695,28 +640,29 @@ linux_msync(struct proc *p, struct linux_msync_args *args) int linux_time(struct proc *p, struct linux_time_args *args) { - struct timeval tv; - linux_time_t tm; - int error; + struct timeval tv; + l_time_t tm; + int error; #ifdef DEBUG if (ldebug(time)) printf(ARGS(time, "*")); #endif - microtime(&tv); - tm = tv.tv_sec; - if (args->tm && (error = copyout(&tm, args->tm, sizeof(linux_time_t)))) - return error; - p->p_retval[0] = tm; - return 0; + + microtime(&tv); + tm = tv.tv_sec; + if (args->tm && (error = copyout(&tm, (caddr_t)args->tm, sizeof(tm)))) + return error; + p->p_retval[0] = tm; + return 0; } #endif /*!__alpha__*/ -struct linux_times_argv { - long tms_utime; - long tms_stime; - long tms_cutime; - long tms_cstime; +struct l_times_argv { + l_long tms_utime; + l_long tms_stime; + l_long tms_cutime; + l_long tms_cstime; }; #ifdef __alpha__ @@ -730,38 +676,38 @@ struct linux_times_argv { int linux_times(struct proc *p, struct linux_times_args *args) { - struct timeval tv; - struct linux_times_argv tms; - struct rusage ru; - int error; + struct timeval tv; + struct l_times_argv tms; + struct rusage ru; + int error; #ifdef DEBUG if (ldebug(times)) printf(ARGS(times, "*")); #endif - mtx_lock_spin(&sched_lock); - calcru(p, &ru.ru_utime, &ru.ru_stime, NULL); - mtx_unlock_spin(&sched_lock); - tms.tms_utime = CONVTCK(ru.ru_utime); - tms.tms_stime = CONVTCK(ru.ru_stime); + mtx_lock_spin(&sched_lock); + calcru(p, &ru.ru_utime, &ru.ru_stime, NULL); + mtx_unlock_spin(&sched_lock); - tms.tms_cutime = CONVTCK(p->p_stats->p_cru.ru_utime); - tms.tms_cstime = CONVTCK(p->p_stats->p_cru.ru_stime); + tms.tms_utime = CONVTCK(ru.ru_utime); + tms.tms_stime = CONVTCK(ru.ru_stime); - if ((error = copyout((caddr_t)&tms, (caddr_t)args->buf, - sizeof(struct linux_times_argv)))) - return error; + tms.tms_cutime = CONVTCK(p->p_stats->p_cru.ru_utime); + tms.tms_cstime = CONVTCK(p->p_stats->p_cru.ru_stime); + + if ((error = copyout(&tms, (caddr_t)args->buf, sizeof(tms)))) + return error; - microuptime(&tv); - p->p_retval[0] = (int)CONVTCK(tv); - return 0; + microuptime(&tv); + p->p_retval[0] = (int)CONVTCK(tv); + return 0; } int linux_newuname(struct proc *p, struct linux_newuname_args *args) { - struct linux_new_utsname utsname; + struct l_new_utsname utsname; char *osrelease, *osname; #ifdef DEBUG @@ -772,7 +718,7 @@ linux_newuname(struct proc *p, struct linux_newuname_args *args) osname = linux_get_osname(p); osrelease = linux_get_osrelease(p); - bzero(&utsname, sizeof(struct linux_new_utsname)); + bzero(&utsname, sizeof(utsname)); strncpy(utsname.sysname, osname, LINUX_MAX_UTSNAME-1); strncpy(utsname.nodename, hostname, LINUX_MAX_UTSNAME-1); strncpy(utsname.release, osrelease, LINUX_MAX_UTSNAME-1); @@ -780,54 +726,56 @@ linux_newuname(struct proc *p, struct linux_newuname_args *args) strncpy(utsname.machine, machine, LINUX_MAX_UTSNAME-1); strncpy(utsname.domainname, domainname, LINUX_MAX_UTSNAME-1); - return (copyout((caddr_t)&utsname, (caddr_t)args->buf, - sizeof(struct linux_new_utsname))); + return (copyout(&utsname, (caddr_t)args->buf, sizeof(utsname))); } -struct linux_utimbuf { - linux_time_t l_actime; - linux_time_t l_modtime; +#if defined(__i386__) +struct l_utimbuf { + l_time_t l_actime; + l_time_t l_modtime; }; int linux_utime(struct proc *p, struct linux_utime_args *args) { - struct utimes_args /* { - char *path; - struct timeval *tptr; - } */ bsdutimes; - struct timeval tv[2], *tvp; - struct linux_utimbuf lut; - int error; - caddr_t sg; - - sg = stackgap_init(); - CHECKALTEXIST(p, &sg, args->fname); + struct utimes_args /* { + char *path; + struct timeval *tptr; + } */ bsdutimes; + struct timeval tv[2], *tvp; + struct l_utimbuf lut; + int error; + caddr_t sg; + + sg = stackgap_init(); + CHECKALTEXIST(p, &sg, args->fname); #ifdef DEBUG if (ldebug(utime)) printf(ARGS(utime, "%s, *"), args->fname); #endif - if (args->times) { - if ((error = copyin(args->times, &lut, sizeof lut))) - return error; - tv[0].tv_sec = lut.l_actime; - tv[0].tv_usec = 0; - tv[1].tv_sec = lut.l_modtime; - tv[1].tv_usec = 0; - /* so that utimes can copyin */ - tvp = (struct timeval *)stackgap_alloc(&sg, sizeof(tv)); - if (tvp == NULL) - return (ENAMETOOLONG); - if ((error = copyout(tv, tvp, sizeof(tv)))) - return error; - bsdutimes.tptr = tvp; - } else - bsdutimes.tptr = NULL; - - bsdutimes.path = args->fname; - return utimes(p, &bsdutimes); + + if (args->times) { + if ((error = copyin((caddr_t)args->times, &lut, sizeof lut))) + return error; + tv[0].tv_sec = lut.l_actime; + tv[0].tv_usec = 0; + tv[1].tv_sec = lut.l_modtime; + tv[1].tv_usec = 0; + /* so that utimes can copyin */ + tvp = (struct timeval *)stackgap_alloc(&sg, sizeof(tv)); + if (tvp == NULL) + return (ENAMETOOLONG); + if ((error = copyout(tv, tvp, sizeof(tv)))) + return error; + bsdutimes.tptr = tvp; + } else + bsdutimes.tptr = NULL; + + bsdutimes.path = args->fname; + return utimes(p, &bsdutimes); } +#endif /* __i386__ */ #define __WCLONE 0x80000000 @@ -835,42 +783,45 @@ linux_utime(struct proc *p, struct linux_utime_args *args) int linux_waitpid(struct proc *p, struct linux_waitpid_args *args) { - struct wait_args /* { - int pid; - int *status; - int options; - struct rusage *rusage; - } */ tmp; - int error, tmpstat; + struct wait_args /* { + int pid; + int *status; + int options; + struct rusage *rusage; + } */ tmp; + int error, tmpstat; #ifdef DEBUG if (ldebug(waitpid)) printf(ARGS(waitpid, "%d, %p, %d"), args->pid, (void *)args->status, args->options); #endif - tmp.pid = args->pid; - tmp.status = args->status; - tmp.options = (args->options & (WNOHANG | WUNTRACED)); - /* WLINUXCLONE should be equal to __WCLONE, but we make sure */ - if (args->options & __WCLONE) - tmp.options |= WLINUXCLONE; - tmp.rusage = NULL; - - if ((error = wait4(p, &tmp)) != 0) - return error; - if (args->status) { - if ((error = copyin(args->status, &tmpstat, sizeof(int))) != 0) - return error; - tmpstat &= 0xffff; - if (WIFSIGNALED(tmpstat)) - tmpstat = (tmpstat & 0xffffff80) | - BSD_TO_LINUX_SIGNAL(WTERMSIG(tmpstat)); - else if (WIFSTOPPED(tmpstat)) - tmpstat = (tmpstat & 0xffff00ff) | - (BSD_TO_LINUX_SIGNAL(WSTOPSIG(tmpstat)) << 8); - return copyout(&tmpstat, args->status, sizeof(int)); - } else + tmp.pid = args->pid; + tmp.status = args->status; + tmp.options = (args->options & (WNOHANG | WUNTRACED)); + /* WLINUXCLONE should be equal to __WCLONE, but we make sure */ + if (args->options & __WCLONE) + tmp.options |= WLINUXCLONE; + tmp.rusage = NULL; + + if ((error = wait4(p, &tmp)) != 0) + return error; + + if (args->status) { + if ((error = copyin((caddr_t)args->status, &tmpstat, + sizeof(int))) != 0) + return error; + tmpstat &= 0xffff; + if (WIFSIGNALED(tmpstat)) + tmpstat = (tmpstat & 0xffffff80) | + BSD_TO_LINUX_SIGNAL(WTERMSIG(tmpstat)); + else if (WIFSTOPPED(tmpstat)) + tmpstat = (tmpstat & 0xffff00ff) | + (BSD_TO_LINUX_SIGNAL(WSTOPSIG(tmpstat)) << 8); + return copyout(&tmpstat, (caddr_t)args->status, sizeof(int)); + } + return 0; } #endif /*!__alpha__*/ @@ -878,13 +829,13 @@ linux_waitpid(struct proc *p, struct linux_waitpid_args *args) int linux_wait4(struct proc *p, struct linux_wait4_args *args) { - struct wait_args /* { - int pid; - int *status; - int options; - struct rusage *rusage; - } */ tmp; - int error, tmpstat; + struct wait_args /* { + int pid; + int *status; + int options; + struct rusage *rusage; + } */ tmp; + int error, tmpstat; #ifdef DEBUG if (ldebug(wait4)) @@ -892,31 +843,34 @@ linux_wait4(struct proc *p, struct linux_wait4_args *args) args->pid, (void *)args->status, args->options, (void *)args->rusage); #endif - tmp.pid = args->pid; - tmp.status = args->status; - tmp.options = (args->options & (WNOHANG | WUNTRACED)); - /* WLINUXCLONE should be equal to __WCLONE, but we make sure */ - if (args->options & __WCLONE) - tmp.options |= WLINUXCLONE; - tmp.rusage = args->rusage; - - if ((error = wait4(p, &tmp)) != 0) - return error; - SIGDELSET(p->p_siglist, SIGCHLD); - - if (args->status) { - if ((error = copyin(args->status, &tmpstat, sizeof(int))) != 0) - return error; - tmpstat &= 0xffff; - if (WIFSIGNALED(tmpstat)) - tmpstat = (tmpstat & 0xffffff80) | - BSD_TO_LINUX_SIGNAL(WTERMSIG(tmpstat)); - else if (WIFSTOPPED(tmpstat)) - tmpstat = (tmpstat & 0xffff00ff) | - (BSD_TO_LINUX_SIGNAL(WSTOPSIG(tmpstat)) << 8); - return copyout(&tmpstat, args->status, sizeof(int)); - } else + tmp.pid = args->pid; + tmp.status = args->status; + tmp.options = (args->options & (WNOHANG | WUNTRACED)); + /* WLINUXCLONE should be equal to __WCLONE, but we make sure */ + if (args->options & __WCLONE) + tmp.options |= WLINUXCLONE; + tmp.rusage = (struct rusage *)args->rusage; + + if ((error = wait4(p, &tmp)) != 0) + return error; + + SIGDELSET(p->p_siglist, SIGCHLD); + + if (args->status) { + if ((error = copyin((caddr_t)args->status, &tmpstat, + sizeof(int))) != 0) + return error; + tmpstat &= 0xffff; + if (WIFSIGNALED(tmpstat)) + tmpstat = (tmpstat & 0xffffff80) | + BSD_TO_LINUX_SIGNAL(WTERMSIG(tmpstat)); + else if (WIFSTOPPED(tmpstat)) + tmpstat = (tmpstat & 0xffff00ff) | + (BSD_TO_LINUX_SIGNAL(WSTOPSIG(tmpstat)) << 8); + return copyout(&tmpstat, (caddr_t)args->status, sizeof(int)); + } + return 0; } @@ -985,11 +939,10 @@ linux_setitimer(struct proc *p, struct linux_setitimer_args *args) (void *)args->itv, (void *)args->oitv); #endif bsa.which = args->which; - bsa.itv = args->itv; - bsa.oitv = args->oitv; + bsa.itv = (struct itimerval *)args->itv; + bsa.oitv = (struct itimerval *)args->oitv; if (args->itv) { - if ((error = copyin((caddr_t)args->itv, (caddr_t)&foo, - sizeof(foo)))) + if ((error = copyin((caddr_t)args->itv, &foo, sizeof(foo)))) return error; #ifdef DEBUG if (ldebug(setitimer)) { @@ -1012,7 +965,7 @@ linux_getitimer(struct proc *p, struct linux_getitimer_args *args) printf(ARGS(getitimer, "%p"), (void *)args->itv); #endif bsa.which = args->which; - bsa.itv = args->itv; + bsa.itv = (struct itimerval *)args->itv; return getitimer(p, &bsa); } @@ -1030,16 +983,14 @@ linux_nice(struct proc *p, struct linux_nice_args *args) #endif /*!__alpha__*/ int -linux_setgroups(p, uap) - struct proc *p; - struct linux_setgroups_args *uap; +linux_setgroups(struct proc *p, struct linux_setgroups_args *args) { struct ucred *newcred, *oldcred; - linux_gid_t linux_gidset[NGROUPS]; + l_gid_t linux_gidset[NGROUPS]; gid_t *bsd_gidset; int ngrp, error; - ngrp = uap->gidsetsize; + ngrp = args->gidsetsize; oldcred = p->p_ucred; /* @@ -1056,8 +1007,8 @@ linux_setgroups(p, uap) newcred = crdup(oldcred); if (ngrp > 0) { - error = copyin((caddr_t)uap->gidset, (caddr_t)linux_gidset, - ngrp * sizeof(linux_gid_t)); + error = copyin((caddr_t)args->grouplist, linux_gidset, + ngrp * sizeof(l_gid_t)); if (error) return (error); @@ -1080,12 +1031,10 @@ linux_setgroups(p, uap) } int -linux_getgroups(p, uap) - struct proc *p; - struct linux_getgroups_args *uap; +linux_getgroups(struct proc *p, struct linux_getgroups_args *args) { struct ucred *cred; - linux_gid_t linux_gidset[NGROUPS]; + l_gid_t linux_gidset[NGROUPS]; gid_t *bsd_gidset; int bsd_gidsetsz, ngrp, error; @@ -1099,7 +1048,7 @@ linux_getgroups(p, uap) * to prevent that. */ - if ((ngrp = uap->gidsetsize) == 0) { + if ((ngrp = args->gidsetsize) == 0) { p->p_retval[0] = bsd_gidsetsz; return (0); } @@ -1113,8 +1062,8 @@ linux_getgroups(p, uap) ngrp++; } - if ((error = copyout((caddr_t)linux_gidset, (caddr_t)uap->gidset, - ngrp * sizeof(linux_gid_t)))) + if ((error = copyout(linux_gidset, (caddr_t)args->grouplist, + ngrp * sizeof(l_gid_t)))) return (error); p->p_retval[0] = ngrp; @@ -1123,29 +1072,27 @@ linux_getgroups(p, uap) #ifndef __alpha__ int -linux_setrlimit(p, uap) - struct proc *p; - struct linux_setrlimit_args *uap; +linux_setrlimit(struct proc *p, struct linux_setrlimit_args *args) { struct __setrlimit_args bsd; - struct linux_rlimit rlim; + struct l_rlimit rlim; int error; caddr_t sg = stackgap_init(); #ifdef DEBUG if (ldebug(setrlimit)) printf(ARGS(setrlimit, "%d, %p"), - uap->resource, (void *)uap->rlim); + args->resource, (void *)args->rlim); #endif - if (uap->resource >= LINUX_RLIM_NLIMITS) + if (args->resource >= LINUX_RLIM_NLIMITS) return (EINVAL); - bsd.which = linux_to_bsd_resource[uap->resource]; + bsd.which = linux_to_bsd_resource[args->resource]; if (bsd.which == -1) return (EINVAL); - error = copyin(uap->rlim, &rlim, sizeof(rlim)); + error = copyin((caddr_t)args->rlim, &rlim, sizeof(rlim)); if (error) return (error); @@ -1156,25 +1103,23 @@ linux_setrlimit(p, uap) } int -linux_getrlimit(p, uap) - struct proc *p; - struct linux_getrlimit_args *uap; +linux_old_getrlimit(struct proc *p, struct linux_old_getrlimit_args *args) { struct __getrlimit_args bsd; - struct linux_rlimit rlim; + struct l_rlimit rlim; int error; caddr_t sg = stackgap_init(); #ifdef DEBUG - if (ldebug(getrlimit)) - printf(ARGS(getrlimit, "%d, %p"), - uap->resource, (void *)uap->rlim); + if (ldebug(old_getrlimit)) + printf(ARGS(old_getrlimit, "%d, %p"), + args->resource, (void *)args->rlim); #endif - if (uap->resource >= LINUX_RLIM_NLIMITS) + if (args->resource >= LINUX_RLIM_NLIMITS) return (EINVAL); - bsd.which = linux_to_bsd_resource[uap->resource]; + bsd.which = linux_to_bsd_resource[args->resource]; if (bsd.which == -1) return (EINVAL); @@ -1189,24 +1134,54 @@ linux_getrlimit(p, uap) rlim.rlim_max = (unsigned long)bsd.rlp->rlim_max; if (rlim.rlim_max == ULONG_MAX) rlim.rlim_max = LONG_MAX; - return (copyout(&rlim, uap->rlim, sizeof(rlim))); + return (copyout(&rlim, (caddr_t)args->rlim, sizeof(rlim))); +} + +int +linux_getrlimit(struct proc *p, struct linux_getrlimit_args *args) +{ + struct __getrlimit_args bsd; + struct l_rlimit rlim; + int error; + caddr_t sg = stackgap_init(); + +#ifdef DEBUG + if (ldebug(getrlimit)) + printf(ARGS(getrlimit, "%d, %p"), + args->resource, (void *)args->rlim); +#endif + + if (args->resource >= LINUX_RLIM_NLIMITS) + return (EINVAL); + + bsd.which = linux_to_bsd_resource[args->resource]; + if (bsd.which == -1) + return (EINVAL); + + bsd.rlp = stackgap_alloc(&sg, sizeof(struct rlimit)); + error = getrlimit(p, &bsd); + if (error) + return (error); + + rlim.rlim_cur = (l_ulong)bsd.rlp->rlim_cur; + rlim.rlim_max = (l_ulong)bsd.rlp->rlim_max; + return (copyout(&rlim, (caddr_t)args->rlim, sizeof(rlim))); } #endif /*!__alpha__*/ int -linux_sched_setscheduler(p, uap) - struct proc *p; - struct linux_sched_setscheduler_args *uap; +linux_sched_setscheduler(struct proc *p, + struct linux_sched_setscheduler_args *args) { struct sched_setscheduler_args bsd; #ifdef DEBUG if (ldebug(sched_setscheduler)) printf(ARGS(sched_setscheduler, "%d, %d, %p"), - uap->pid, uap->policy, (const void *)uap->param); + args->pid, args->policy, (const void *)args->param); #endif - switch (uap->policy) { + switch (args->policy) { case LINUX_SCHED_OTHER: bsd.policy = SCHED_OTHER; break; @@ -1220,25 +1195,24 @@ linux_sched_setscheduler(p, uap) return EINVAL; } - bsd.pid = uap->pid; - bsd.param = uap->param; + bsd.pid = args->pid; + bsd.param = (struct sched_param *)args->param; return sched_setscheduler(p, &bsd); } int -linux_sched_getscheduler(p, uap) - struct proc *p; - struct linux_sched_getscheduler_args *uap; +linux_sched_getscheduler(struct proc *p, + struct linux_sched_getscheduler_args *args) { struct sched_getscheduler_args bsd; int error; #ifdef DEBUG if (ldebug(sched_getscheduler)) - printf(ARGS(sched_getscheduler, "%d"), uap->pid); + printf(ARGS(sched_getscheduler, "%d"), args->pid); #endif - bsd.pid = uap->pid; + bsd.pid = args->pid; error = sched_getscheduler(p, &bsd); switch (p->p_retval[0]) { @@ -1257,18 +1231,17 @@ linux_sched_getscheduler(p, uap) } int -linux_sched_get_priority_max(p, uap) - struct proc *p; - struct linux_sched_get_priority_max_args *uap; +linux_sched_get_priority_max(struct proc *p, + struct linux_sched_get_priority_max_args *args) { struct sched_get_priority_max_args bsd; #ifdef DEBUG if (ldebug(sched_get_priority_max)) - printf(ARGS(sched_get_priority_max, "%d"), uap->policy); + printf(ARGS(sched_get_priority_max, "%d"), args->policy); #endif - switch (uap->policy) { + switch (args->policy) { case LINUX_SCHED_OTHER: bsd.policy = SCHED_OTHER; break; @@ -1285,18 +1258,17 @@ linux_sched_get_priority_max(p, uap) } int -linux_sched_get_priority_min(p, uap) - struct proc *p; - struct linux_sched_get_priority_min_args *uap; +linux_sched_get_priority_min(struct proc *p, + struct linux_sched_get_priority_min_args *args) { struct sched_get_priority_min_args bsd; #ifdef DEBUG if (ldebug(sched_get_priority_min)) - printf(ARGS(sched_get_priority_min, "%d"), uap->policy); + printf(ARGS(sched_get_priority_min, "%d"), args->policy); #endif - switch (uap->policy) { + switch (args->policy) { case LINUX_SCHED_OTHER: bsd.policy = SCHED_OTHER; break; @@ -1323,10 +1295,43 @@ linux_reboot(struct proc *p, struct linux_reboot_args *args) #ifdef DEBUG if (ldebug(reboot)) - printf(ARGS(reboot, "0x%x"), args->opt); + printf(ARGS(reboot, "0x%x"), args->cmd); #endif - if (args->opt == REBOOT_CAD_ON || args->opt == REBOOT_CAD_OFF) + if (args->cmd == REBOOT_CAD_ON || args->cmd == REBOOT_CAD_OFF) return (0); - bsd_args.opt = args->opt == REBOOT_HALT ? RB_HALT : 0; + bsd_args.opt = (args->cmd == REBOOT_HALT) ? RB_HALT : 0; return (reboot(p, &bsd_args)); } + +/* + * The FreeBSD native getpid(2), getgid(2) and getuid(2) also modify + * p->p_retval[1] when COMPAT_43 or COMPAT_SUNOS is defined. This + * globbers registers that are assumed to be preserved. The following + * lightweight syscalls fixes this. See also linux_getgid16() and + * linux_getuid16() in linux_uid16.c. + * + * linux_getpid() - MP SAFE + * linux_getgid() - MP SAFE + * linux_getuid() - MP SAFE + */ + +int +linux_getpid(struct proc *p, struct linux_getpid_args *args) +{ + p->p_retval[0] = p->p_pid; + return (0); +} + +int +linux_getgid(struct proc *p, struct linux_getgid_args *args) +{ + p->p_retval[0] = p->p_ucred->cr_rgid; + return (0); +} + +int +linux_getuid(struct proc *p, struct linux_getuid_args *args) +{ + p->p_retval[0] = p->p_ucred->cr_ruid; + return (0); +} diff --git a/sys/compat/linux/linux_signal.c b/sys/compat/linux/linux_signal.c index 8a2f8b3..24a540f 100644 --- a/sys/compat/linux/linux_signal.c +++ b/sys/compat/linux/linux_signal.c @@ -42,7 +42,7 @@ #include <compat/linux/linux_util.h> void -linux_to_bsd_sigset(linux_sigset_t *lss, sigset_t *bss) +linux_to_bsd_sigset(l_sigset_t *lss, sigset_t *bss) { int b, l; @@ -63,7 +63,7 @@ linux_to_bsd_sigset(linux_sigset_t *lss, sigset_t *bss) } void -bsd_to_linux_sigset(sigset_t *bss, linux_sigset_t *lss) +bsd_to_linux_sigset(sigset_t *bss, l_sigset_t *lss) { int b, l; @@ -84,7 +84,7 @@ bsd_to_linux_sigset(sigset_t *bss, linux_sigset_t *lss) } static void -linux_to_bsd_sigaction(linux_sigaction_t *lsa, struct sigaction *bsa) +linux_to_bsd_sigaction(l_sigaction_t *lsa, struct sigaction *bsa) { linux_to_bsd_sigset(&lsa->lsa_mask, &bsa->sa_mask); @@ -107,7 +107,7 @@ linux_to_bsd_sigaction(linux_sigaction_t *lsa, struct sigaction *bsa) } static void -bsd_to_linux_sigaction(struct sigaction *bsa, linux_sigaction_t *lsa) +bsd_to_linux_sigaction(struct sigaction *bsa, l_sigaction_t *lsa) { bsd_to_linux_sigset(&bsa->sa_mask, &lsa->lsa_mask); @@ -131,8 +131,8 @@ bsd_to_linux_sigaction(struct sigaction *bsa, linux_sigaction_t *lsa) } int -linux_do_sigaction(struct proc *p, int linux_sig, linux_sigaction_t *linux_nsa, - linux_sigaction_t *linux_osa) +linux_do_sigaction(struct proc *p, int linux_sig, l_sigaction_t *linux_nsa, + l_sigaction_t *linux_osa) { struct sigaction *nsa, *osa; struct sigaction_args sa_args; @@ -178,7 +178,7 @@ linux_do_sigaction(struct proc *p, int linux_sig, linux_sigaction_t *linux_nsa, int linux_signal(struct proc *p, struct linux_signal_args *args) { - linux_sigaction_t nsa, osa; + l_sigaction_t nsa, osa; int error; #ifdef DEBUG @@ -201,7 +201,7 @@ linux_signal(struct proc *p, struct linux_signal_args *args) int linux_rt_sigaction(struct proc *p, struct linux_rt_sigaction_args *args) { - linux_sigaction_t nsa, osa; + l_sigaction_t nsa, osa; int error; #ifdef DEBUG @@ -211,11 +211,11 @@ linux_rt_sigaction(struct proc *p, struct linux_rt_sigaction_args *args) (void *)args->oact, (long)args->sigsetsize); #endif - if (args->sigsetsize != sizeof(linux_sigset_t)) + if (args->sigsetsize != sizeof(l_sigset_t)) return (EINVAL); if (args->act != NULL) { - error = copyin(args->act, &nsa, sizeof(linux_sigaction_t)); + error = copyin(args->act, &nsa, sizeof(l_sigaction_t)); if (error) return (error); } @@ -225,15 +225,15 @@ linux_rt_sigaction(struct proc *p, struct linux_rt_sigaction_args *args) args->oact ? &osa : NULL); if (args->oact != NULL && !error) { - error = copyout(&osa, args->oact, sizeof(linux_sigaction_t)); + error = copyout(&osa, args->oact, sizeof(l_sigaction_t)); } return (error); } static int -linux_do_sigprocmask(struct proc *p, int how, linux_sigset_t *new, - linux_sigset_t *old) +linux_do_sigprocmask(struct proc *p, int how, l_sigset_t *new, + l_sigset_t *old) { int error; sigset_t mask; @@ -274,8 +274,8 @@ linux_do_sigprocmask(struct proc *p, int how, linux_sigset_t *new, int linux_sigprocmask(struct proc *p, struct linux_sigprocmask_args *args) { - linux_osigset_t mask; - linux_sigset_t set, oset; + l_osigset_t mask; + l_sigset_t set, oset; int error; #ifdef DEBUG @@ -284,7 +284,7 @@ linux_sigprocmask(struct proc *p, struct linux_sigprocmask_args *args) #endif if (args->mask != NULL) { - error = copyin(args->mask, &mask, sizeof(linux_osigset_t)); + error = copyin(args->mask, &mask, sizeof(l_osigset_t)); if (error) return (error); LINUX_SIGEMPTYSET(set); @@ -297,7 +297,7 @@ linux_sigprocmask(struct proc *p, struct linux_sigprocmask_args *args) if (args->omask != NULL && !error) { mask = oset.__bits[0]; - error = copyout(&mask, args->omask, sizeof(linux_osigset_t)); + error = copyout(&mask, args->omask, sizeof(l_osigset_t)); } return (error); @@ -307,7 +307,7 @@ linux_sigprocmask(struct proc *p, struct linux_sigprocmask_args *args) int linux_rt_sigprocmask(struct proc *p, struct linux_rt_sigprocmask_args *args) { - linux_sigset_t set, oset; + l_sigset_t set, oset; int error; #ifdef DEBUG @@ -317,11 +317,11 @@ linux_rt_sigprocmask(struct proc *p, struct linux_rt_sigprocmask_args *args) (void *)args->omask, (long)args->sigsetsize); #endif - if (args->sigsetsize != sizeof(linux_sigset_t)) + if (args->sigsetsize != sizeof(l_sigset_t)) return EINVAL; if (args->mask != NULL) { - error = copyin(args->mask, &set, sizeof(linux_sigset_t)); + error = copyin(args->mask, &set, sizeof(l_sigset_t)); if (error) return (error); } @@ -331,7 +331,7 @@ linux_rt_sigprocmask(struct proc *p, struct linux_rt_sigprocmask_args *args) args->omask ? &oset : NULL); if (args->omask != NULL && !error) { - error = copyout(&oset, args->omask, sizeof(linux_sigset_t)); + error = copyout(&oset, args->omask, sizeof(l_sigset_t)); } return (error); @@ -339,13 +339,13 @@ linux_rt_sigprocmask(struct proc *p, struct linux_rt_sigprocmask_args *args) #ifndef __alpha__ int -linux_siggetmask(struct proc *p, struct linux_siggetmask_args *args) +linux_sgetmask(struct proc *p, struct linux_sgetmask_args *args) { - linux_sigset_t mask; + l_sigset_t mask; #ifdef DEBUG - if (ldebug(siggetmask)) - printf(ARGS(siggetmask, "")); + if (ldebug(sgetmask)) + printf(ARGS(sgetmask, "")); #endif PROC_LOCK(p); @@ -356,14 +356,14 @@ linux_siggetmask(struct proc *p, struct linux_siggetmask_args *args) } int -linux_sigsetmask(struct proc *p, struct linux_sigsetmask_args *args) +linux_ssetmask(struct proc *p, struct linux_ssetmask_args *args) { - linux_sigset_t lset; + l_sigset_t lset; sigset_t bset; #ifdef DEBUG - if (ldebug(sigsetmask)) - printf(ARGS(sigsetmask, "%08lx"), (unsigned long)args->mask); + if (ldebug(ssetmask)) + printf(ARGS(ssetmask, "%08lx"), (unsigned long)args->mask); #endif PROC_LOCK(p); @@ -382,8 +382,8 @@ int linux_sigpending(struct proc *p, struct linux_sigpending_args *args) { sigset_t bset; - linux_sigset_t lset; - linux_osigset_t mask; + l_sigset_t lset; + l_osigset_t mask; #ifdef DEBUG if (ldebug(sigpending)) diff --git a/sys/compat/linux/linux_signal.h b/sys/compat/linux/linux_signal.h index 2330b28..e9dcec0 100644 --- a/sys/compat/linux/linux_signal.h +++ b/sys/compat/linux/linux_signal.h @@ -31,9 +31,9 @@ #ifndef _LINUX_SIGNAL_H_ #define _LINUX_SIGNAL_H_ -void linux_to_bsd_sigset __P((linux_sigset_t *, sigset_t *)); -void bsd_to_linux_sigset __P((sigset_t *, linux_sigset_t *)); -int linux_do_sigaction __P((struct proc *, int, linux_sigaction_t *, - linux_sigaction_t *)); +void linux_to_bsd_sigset __P((l_sigset_t *, sigset_t *)); +void bsd_to_linux_sigset __P((sigset_t *, l_sigset_t *)); +int linux_do_sigaction __P((struct proc *, int, l_sigaction_t *, + l_sigaction_t *)); #endif /* _LINUX_SIGNAL_H_ */ diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c index e47c725..ac73dde 100644 --- a/sys/compat/linux/linux_socket.c +++ b/sys/compat/linux/linux_socket.c @@ -423,7 +423,7 @@ linux_connect(struct proc *p, struct linux_connect_args *args) error = EISCONN; if (fp->f_flag & FNONBLOCK) { so = (struct socket *)fp->f_data; - if ((u_int)so->so_emuldata == 0) + if (so->so_emuldata == 0) error = so->so_error; so->so_emuldata = (void *)1; } @@ -870,38 +870,39 @@ linux_getsockopt(struct proc *p, struct linux_getsockopt_args *args) int linux_socketcall(struct proc *p, struct linux_socketcall_args *args) { + void *arg = (void *)args->args; switch (args->what) { case LINUX_SOCKET: - return (linux_socket(p, args->args)); + return (linux_socket(p, arg)); case LINUX_BIND: - return (linux_bind(p, args->args)); + return (linux_bind(p, arg)); case LINUX_CONNECT: - return (linux_connect(p, args->args)); + return (linux_connect(p, arg)); case LINUX_LISTEN: - return (linux_listen(p, args->args)); + return (linux_listen(p, arg)); case LINUX_ACCEPT: - return (linux_accept(p, args->args)); + return (linux_accept(p, arg)); case LINUX_GETSOCKNAME: - return (linux_getsockname(p, args->args)); + return (linux_getsockname(p, arg)); case LINUX_GETPEERNAME: - return (linux_getpeername(p, args->args)); + return (linux_getpeername(p, arg)); case LINUX_SOCKETPAIR: - return (linux_socketpair(p, args->args)); + return (linux_socketpair(p, arg)); case LINUX_SEND: - return (linux_send(p, args->args)); + return (linux_send(p, arg)); case LINUX_RECV: - return (linux_recv(p, args->args)); + return (linux_recv(p, arg)); case LINUX_SENDTO: - return (linux_sendto(p, args->args)); + return (linux_sendto(p, arg)); case LINUX_RECVFROM: - return (linux_recvfrom(p, args->args)); + return (linux_recvfrom(p, arg)); case LINUX_SHUTDOWN: - return (linux_shutdown(p, args->args)); + return (linux_shutdown(p, arg)); case LINUX_SETSOCKOPT: - return (linux_setsockopt(p, args->args)); + return (linux_setsockopt(p, arg)); case LINUX_GETSOCKOPT: - return (linux_getsockopt(p, args->args)); + return (linux_getsockopt(p, arg)); case LINUX_SENDMSG: do { int error; @@ -911,7 +912,7 @@ linux_socketcall(struct proc *p, struct linux_socketcall_args *args) int s; const struct msghdr *msg; int flags; - } *uap = args->args; + } *uap = arg; error = copyin(&uap->msg->msg_control, &control, sizeof(caddr_t)); @@ -939,10 +940,10 @@ linux_socketcall(struct proc *p, struct linux_socketcall_args *args) return (error); } done: - return (sendmsg(p, args->args)); + return (sendmsg(p, arg)); } while (0); case LINUX_RECVMSG: - return (linux_recvmsg(p, args->args)); + return (linux_recvmsg(p, arg)); } uprintf("LINUX: 'socket' typ=%d not implemented\n", args->what); diff --git a/sys/compat/linux/linux_stats.c b/sys/compat/linux/linux_stats.c index 75364fb..5d1572b 100644 --- a/sys/compat/linux/linux_stats.c +++ b/sys/compat/linux/linux_stats.c @@ -37,6 +37,7 @@ #include <sys/mount.h> #include <sys/namei.h> #include <sys/stat.h> +#include <sys/sysctl.h> #include <sys/systm.h> #include <sys/vnode.h> @@ -44,93 +45,41 @@ #include <machine/../linux/linux_proto.h> #include <compat/linux/linux_util.h> -#include <sys/sysctl.h> - -struct linux_newstat { -#ifdef __alpha__ - u_int stat_dev; - u_int stat_ino; - u_int stat_mode; - u_int stat_nlink; - u_int stat_uid; - u_int stat_gid; - u_int stat_rdev; - long stat_size; - u_long stat_atime; - u_long stat_mtime; - u_long stat_ctime; - u_int stat_blksize; - int stat_blocks; - u_int stat_flags; - u_int stat_gen; -#else - u_short stat_dev; - u_short __pad1; - u_long stat_ino; - u_short stat_mode; - u_short stat_nlink; - u_short stat_uid; - u_short stat_gid; - u_short stat_rdev; - u_short __pad2; - u_long stat_size; - u_long stat_blksize; - u_long stat_blocks; - u_long stat_atime; - u_long __unused1; - u_long stat_mtime; - u_long __unused2; - u_long stat_ctime; - u_long __unused3; - u_long __unused4; - u_long __unused5; -#endif -}; - - -struct linux_ustat -{ - int f_tfree; - u_long f_tinode; - char f_fname[6]; - char f_fpack[6]; -}; - static int newstat_copyout(struct stat *buf, void *ubuf) { - struct linux_newstat tbuf; + struct l_newstat tbuf; struct cdevsw *cdevsw; dev_t dev; - tbuf.stat_dev = uminor(buf->st_dev) | (umajor(buf->st_dev) << 8); - tbuf.stat_ino = buf->st_ino; - tbuf.stat_mode = buf->st_mode; - tbuf.stat_nlink = buf->st_nlink; - tbuf.stat_uid = buf->st_uid; - tbuf.stat_gid = buf->st_gid; - tbuf.stat_rdev = buf->st_rdev; - tbuf.stat_size = buf->st_size; - tbuf.stat_atime = buf->st_atime; - tbuf.stat_mtime = buf->st_mtime; - tbuf.stat_ctime = buf->st_ctime; - tbuf.stat_blksize = buf->st_blksize; - tbuf.stat_blocks = buf->st_blocks; + tbuf.st_dev = uminor(buf->st_dev) | (umajor(buf->st_dev) << 8); + tbuf.st_ino = buf->st_ino; + tbuf.st_mode = buf->st_mode; + tbuf.st_nlink = buf->st_nlink; + tbuf.st_uid = buf->st_uid; + tbuf.st_gid = buf->st_gid; + tbuf.st_rdev = buf->st_rdev; + tbuf.st_size = buf->st_size; + tbuf.st_atime = buf->st_atime; + tbuf.st_mtime = buf->st_mtime; + tbuf.st_ctime = buf->st_ctime; + tbuf.st_blksize = buf->st_blksize; + tbuf.st_blocks = buf->st_blocks; /* Lie about disk drives which are character devices * in FreeBSD but block devices under Linux. */ - if (S_ISCHR(tbuf.stat_mode) && + if (S_ISCHR(tbuf.st_mode) && (dev = udev2dev(buf->st_rdev, 0)) != NODEV) { cdevsw = devsw(dev); if (cdevsw != NULL && (cdevsw->d_flags & D_DISK)) { - tbuf.stat_mode &= ~S_IFMT; - tbuf.stat_mode |= S_IFBLK; + tbuf.st_mode &= ~S_IFMT; + tbuf.st_mode |= S_IFBLK; /* XXX this may not be quite right */ /* Map major number to 0 */ - tbuf.stat_dev = uminor(buf->st_dev) & 0xf; - tbuf.stat_rdev = buf->st_rdev & 0xff; + tbuf.st_dev = uminor(buf->st_dev) & 0xf; + tbuf.st_rdev = buf->st_rdev & 0xff; } } @@ -154,7 +103,7 @@ linux_newstat(struct proc *p, struct linux_newstat_args *args) #endif NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | NOOBJ, UIO_USERSPACE, - args->path, p); + args->path, p); error = namei(&nd); if (error) return (error); @@ -168,42 +117,35 @@ linux_newstat(struct proc *p, struct linux_newstat_args *args) return (newstat_copyout(&buf, args->buf)); } -/* - * Get file status; this version does not follow links. - */ int -linux_newlstat(p, uap) - struct proc *p; - struct linux_newlstat_args *uap; +linux_newlstat(struct proc *p, struct linux_newlstat_args *args) { int error; - struct vnode *vp; struct stat sb; struct nameidata nd; caddr_t sg; sg = stackgap_init(); - CHECKALTEXIST(p, &sg, uap->path); + CHECKALTEXIST(p, &sg, args->path); #ifdef DEBUG if (ldebug(newlstat)) - printf(ARGS(newlstat, "%s, *"), uap->path); + printf(ARGS(newlstat, "%s, *"), args->path); #endif NDINIT(&nd, LOOKUP, NOFOLLOW | LOCKLEAF | NOOBJ, UIO_USERSPACE, - uap->path, p); + args->path, p); error = namei(&nd); if (error) return (error); NDFREE(&nd, NDF_ONLY_PNBUF); - vp = nd.ni_vp; - error = vn_stat(vp, &sb, p); - vput(vp); + error = vn_stat(nd.ni_vp, &sb, p); + vput(nd.ni_vp); if (error) return (error); - return (newstat_copyout(&sb, uap->buf)); + return (newstat_copyout(&sb, args->buf)); } int @@ -214,13 +156,12 @@ linux_newfstat(struct proc *p, struct linux_newfstat_args *args) struct stat buf; int error; - fdp = p->p_fd; - #ifdef DEBUG if (ldebug(newfstat)) printf(ARGS(newfstat, "%d, *"), args->fd); #endif + fdp = p->p_fd; if ((unsigned)args->fd >= fdp->fd_nfiles || (fp = fdp->fd_ofiles[args->fd]) == NULL) return (EBADF); @@ -232,21 +173,22 @@ linux_newfstat(struct proc *p, struct linux_newfstat_args *args) return (error); } -struct linux_statfs_buf { - int ftype; - int fbsize; - int fblocks; - int fbfree; - int fbavail; - int ffiles; - int fffree; - linux_fsid_t ffsid; - int fnamelen; - int fspare[6]; +/* XXX - All fields of type l_int are defined as l_long on i386 */ +struct l_statfs { + l_int f_type; + l_int f_bsize; + l_int f_blocks; + l_int f_bfree; + l_int f_bavail; + l_int f_files; + l_int f_ffree; + l_fsid_t f_fsid; + l_int f_namelen; + l_int f_spare[6]; }; #ifndef VT_NWFS -#define VT_NWFS VT_TFS /* XXX - bug compatibility with sys/fs/nwfs/nwfs_node.h */ +#define VT_NWFS VT_TFS /* XXX - bug compat. with sys/fs/nwfs/nwfs_node.h */ #endif #define LINUX_CODA_SUPER_MAGIC 0x73757245L @@ -299,7 +241,7 @@ linux_statfs(struct proc *p, struct linux_statfs_args *args) struct nameidata *ndp; struct statfs *bsd_statfs; struct nameidata nd; - struct linux_statfs_buf linux_statfs_buf; + struct l_statfs linux_statfs; int error; caddr_t sg; @@ -323,18 +265,18 @@ linux_statfs(struct proc *p, struct linux_statfs_args *args) if (error) return error; bsd_statfs->f_flags = mp->mnt_flag & MNT_VISFLAGMASK; - linux_statfs_buf.ftype = bsd_to_linux_ftype(bsd_statfs->f_type); - linux_statfs_buf.fbsize = bsd_statfs->f_bsize; - linux_statfs_buf.fblocks = bsd_statfs->f_blocks; - linux_statfs_buf.fbfree = bsd_statfs->f_bfree; - linux_statfs_buf.fbavail = bsd_statfs->f_bavail; - linux_statfs_buf.fffree = bsd_statfs->f_ffree; - linux_statfs_buf.ffiles = bsd_statfs->f_files; - linux_statfs_buf.ffsid.val[0] = bsd_statfs->f_fsid.val[0]; - linux_statfs_buf.ffsid.val[1] = bsd_statfs->f_fsid.val[1]; - linux_statfs_buf.fnamelen = MAXNAMLEN; - return copyout((caddr_t)&linux_statfs_buf, (caddr_t)args->buf, - sizeof(struct linux_statfs_buf)); + linux_statfs.f_type = bsd_to_linux_ftype(bsd_statfs->f_type); + linux_statfs.f_bsize = bsd_statfs->f_bsize; + linux_statfs.f_blocks = bsd_statfs->f_blocks; + linux_statfs.f_bfree = bsd_statfs->f_bfree; + linux_statfs.f_bavail = bsd_statfs->f_bavail; + linux_statfs.f_ffree = bsd_statfs->f_ffree; + linux_statfs.f_files = bsd_statfs->f_files; + linux_statfs.f_fsid.val[0] = bsd_statfs->f_fsid.val[0]; + linux_statfs.f_fsid.val[1] = bsd_statfs->f_fsid.val[1]; + linux_statfs.f_namelen = MAXNAMLEN; + return copyout((caddr_t)&linux_statfs, (caddr_t)args->buf, + sizeof(linux_statfs)); } int @@ -343,7 +285,7 @@ linux_fstatfs(struct proc *p, struct linux_fstatfs_args *args) struct file *fp; struct mount *mp; struct statfs *bsd_statfs; - struct linux_statfs_buf linux_statfs_buf; + struct l_statfs linux_statfs; int error; #ifdef DEBUG @@ -359,26 +301,32 @@ linux_fstatfs(struct proc *p, struct linux_fstatfs_args *args) if (error) return error; bsd_statfs->f_flags = mp->mnt_flag & MNT_VISFLAGMASK; - linux_statfs_buf.ftype = bsd_to_linux_ftype(bsd_statfs->f_type); - linux_statfs_buf.fbsize = bsd_statfs->f_bsize; - linux_statfs_buf.fblocks = bsd_statfs->f_blocks; - linux_statfs_buf.fbfree = bsd_statfs->f_bfree; - linux_statfs_buf.fbavail = bsd_statfs->f_bavail; - linux_statfs_buf.fffree = bsd_statfs->f_ffree; - linux_statfs_buf.ffiles = bsd_statfs->f_files; - linux_statfs_buf.ffsid.val[0] = bsd_statfs->f_fsid.val[0]; - linux_statfs_buf.ffsid.val[1] = bsd_statfs->f_fsid.val[1]; - linux_statfs_buf.fnamelen = MAXNAMLEN; - return copyout((caddr_t)&linux_statfs_buf, (caddr_t)args->buf, - sizeof(struct linux_statfs_buf)); + linux_statfs.f_type = bsd_to_linux_ftype(bsd_statfs->f_type); + linux_statfs.f_bsize = bsd_statfs->f_bsize; + linux_statfs.f_blocks = bsd_statfs->f_blocks; + linux_statfs.f_bfree = bsd_statfs->f_bfree; + linux_statfs.f_bavail = bsd_statfs->f_bavail; + linux_statfs.f_ffree = bsd_statfs->f_ffree; + linux_statfs.f_files = bsd_statfs->f_files; + linux_statfs.f_fsid.val[0] = bsd_statfs->f_fsid.val[0]; + linux_statfs.f_fsid.val[1] = bsd_statfs->f_fsid.val[1]; + linux_statfs.f_namelen = MAXNAMLEN; + return copyout((caddr_t)&linux_statfs, (caddr_t)args->buf, + sizeof(linux_statfs)); } +struct l_ustat +{ + l_daddr_t f_tfree; + l_ino_t f_tinode; + char f_fname[6]; + char f_fpack[6]; +}; + int -linux_ustat(p, uap) - struct proc *p; - struct linux_ustat_args *uap; +linux_ustat(struct proc *p, struct linux_ustat_args *args) { - struct linux_ustat lu; + struct l_ustat lu; dev_t dev; struct vnode *vp; struct statfs *stat; @@ -386,7 +334,7 @@ linux_ustat(p, uap) #ifdef DEBUG if (ldebug(ustat)) - printf(ARGS(ustat, "%d, *"), uap->dev); + printf(ARGS(ustat, "%d, *"), args->dev); #endif /* @@ -402,7 +350,7 @@ linux_ustat(p, uap) * dev_t returned from previous syscalls. Just return a bzeroed * ustat in that case. */ - dev = makedev(uap->dev >> 8, uap->dev & 0xFF); + dev = makedev(args->dev >> 8, args->dev & 0xFF); if (vfinddev(dev, VCHR, &vp)) { if (vp->v_mount == NULL) return (EINVAL); @@ -415,5 +363,127 @@ linux_ustat(p, uap) lu.f_tinode = stat->f_ffree; } - return (copyout(&lu, uap->ubuf, sizeof(lu))); + return (copyout(&lu, args->ubuf, sizeof(lu))); } + +#if defined(__i386__) + +static int +stat64_copyout(struct stat *buf, void *ubuf) +{ + struct l_stat64 lbuf; + + bzero(&lbuf, sizeof(lbuf)); + lbuf.st_dev = uminor(buf->st_dev) | (umajor(buf->st_dev) << 8); + lbuf.st_ino = buf->st_ino; + lbuf.st_mode = buf->st_mode; + lbuf.st_nlink = buf->st_nlink; + lbuf.st_uid = buf->st_uid; + lbuf.st_gid = buf->st_gid; + lbuf.st_rdev = buf->st_rdev; + lbuf.st_size = buf->st_size; + lbuf.st_atime = buf->st_atime; + lbuf.st_mtime = buf->st_mtime; + lbuf.st_ctime = buf->st_ctime; + lbuf.st_blksize = buf->st_blksize; + lbuf.st_blocks = buf->st_blocks; + + /* + * The __st_ino field makes all the difference. In the Linux kernel + * it is conditionally compiled based on STAT64_HAS_BROKEN_ST_INO, + * but without the assignment to __st_ino the runtime linker refuses + * to mmap(2) any shared libraries. I guess it's broken alright :-) + */ + lbuf.__st_ino = buf->st_ino; + + return (copyout(&lbuf, ubuf, sizeof(lbuf))); +} + +int +linux_stat64(struct proc *p, struct linux_stat64_args *args) +{ + struct stat buf; + struct nameidata nd; + int error; + caddr_t sg; + + sg = stackgap_init(); + CHECKALTEXIST(p, &sg, args->filename); + +#ifdef DEBUG + if (ldebug(stat64)) + printf(ARGS(stat64, "%s, *"), args->filename); +#endif + + NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | NOOBJ, UIO_USERSPACE, + args->filename, p); + error = namei(&nd); + if (error) + return (error); + NDFREE(&nd, NDF_ONLY_PNBUF); + + error = vn_stat(nd.ni_vp, &buf, p); + vput(nd.ni_vp); + if (error) + return (error); + + return (stat64_copyout(&buf, args->statbuf)); +} + +int +linux_lstat64(struct proc *p, struct linux_lstat64_args *args) +{ + int error; + struct stat sb; + struct nameidata nd; + caddr_t sg; + + sg = stackgap_init(); + CHECKALTEXIST(p, &sg, args->filename); + +#ifdef DEBUG + if (ldebug(lstat64)) + printf(ARGS(lstat64, "%s, *"), args->filename); +#endif + + NDINIT(&nd, LOOKUP, NOFOLLOW | LOCKLEAF | NOOBJ, UIO_USERSPACE, + args->filename, p); + error = namei(&nd); + if (error) + return (error); + NDFREE(&nd, NDF_ONLY_PNBUF); + + error = vn_stat(nd.ni_vp, &sb, p); + vput(nd.ni_vp); + if (error) + return (error); + + return (stat64_copyout(&sb, args->statbuf)); +} + +int +linux_fstat64(struct proc *p, struct linux_fstat64_args *args) +{ + struct filedesc *fdp; + struct file *fp; + struct stat buf; + int error; + +#ifdef DEBUG + if (ldebug(fstat64)) + printf(ARGS(fstat64, "%d, *"), args->fd); +#endif + + fdp = p->p_fd; + if ((unsigned)args->fd >= fdp->fd_nfiles || + (fp = fdp->fd_ofiles[args->fd]) == NULL) + return (EBADF); + + error = fo_stat(fp, &buf, p); + if (!error) + error = stat64_copyout(&buf, args->statbuf); + + return (error); +} + +#endif /* __i386__ */ diff --git a/sys/compat/linux/linux_sysctl.c b/sys/compat/linux/linux_sysctl.c new file mode 100644 index 0000000..14c5a6f --- /dev/null +++ b/sys/compat/linux/linux_sysctl.c @@ -0,0 +1,120 @@ +/*- + * Copyright (c) 2001 Marcel Moolenaar + * 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 + * 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 + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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$ + */ + +#include "opt_compat.h" + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/proc.h> +#include <sys/sysproto.h> + +#include <machine/../linux/linux.h> +#include <machine/../linux/linux_proto.h> +#include <compat/linux/linux_util.h> + +#define LINUX_CTL_KERN 1 +#define LINUX_CTL_VM 2 +#define LINUX_CTL_NET 3 +#define LINUX_CTL_PROC 4 +#define LINUX_CTL_FS 5 +#define LINUX_CTL_DEBUG 6 +#define LINUX_CTL_DEV 7 +#define LINUX_CTL_BUS 8 + +/* CTL_KERN names */ +#define LINUX_KERN_OSTYPE 1 +#define LINUX_KERN_OSRELEASE 2 +#define LINUX_KERN_OSREV 3 +#define LINUX_KERN_VERSION 4 + +static int +handle_string(struct l___sysctl_args *la, char *value) +{ + int error; + + if (la->oldval != NULL) { + l_int len = strlen(value); + error = copyout(value, la->oldval, len + 1); + if (!error && la->oldlenp != NULL) + error = copyout(&len, la->oldlenp, sizeof(len)); + if (error) + return (error); + } + + if (la->newval != NULL) + return (ENOTDIR); + + return (0); +} + +int +linux_sysctl(struct proc *p, struct linux_sysctl_args *args) +{ + struct l___sysctl_args la; + l_int *mib; + int error, i; + caddr_t sg; + + error = copyin((caddr_t)args->args, &la, sizeof(la)); + if (error) + return (error); + + if (la.nlen == 0 || la.nlen > LINUX_CTL_MAXNAME) + return (ENOTDIR); + + sg = stackgap_init(); + mib = stackgap_alloc(&sg, la.nlen * sizeof(l_int)); + error = copyin(la.name, mib, la.nlen * sizeof(l_int)); + if (error) + return (error); + + switch (mib[0]) { + case LINUX_CTL_KERN: + if (la.nlen < 2) + break; + + switch (mib[1]) { + case LINUX_KERN_VERSION: + return (handle_string(&la, version)); + default: + break; + } + break; + default: + break; + } + + printf("linux: sysctl: unhandled name="); + for (i = 0; i < la.nlen; i++) + printf("%c%d", (i) ? ',' : '{', mib[i]); + printf("}\n"); + + return (ENOTDIR); +} diff --git a/sys/i386/linux/linux.h b/sys/i386/linux/linux.h index b4eec098..594ebfc 100644 --- a/sys/i386/linux/linux.h +++ b/sys/i386/linux/linux.h @@ -38,21 +38,75 @@ /* * debugging support */ -extern u_char linux_debug_map[]; +extern u_char linux_debug_map[]; #define ldebug(name) isclr(linux_debug_map, LINUX_SYS_linux_ ## name) -#define ARGS(nm, fmt) "Linux-emul(%ld): "#nm"("fmt")\n", (long)p->p_pid -#define LMSG(fmt) "Linux-emul(%ld): "fmt"\n", (long)p->p_pid +#define ARGS(nm, fmt) "linux(%ld): "#nm"("fmt")\n", (long)p->p_pid +#define LMSG(fmt) "linux(%ld): "fmt"\n", (long)p->p_pid #ifdef MALLOC_DECLARE MALLOC_DECLARE(M_LINUX); #endif /* + * Provide a seperate set of types for the Linux types. + */ +typedef int l_int; +typedef int32_t l_long; +typedef int64_t l_longlong; +typedef short l_short; +typedef unsigned int l_uint; +typedef uint32_t l_ulong; +typedef uint64_t l_ulonglong; +typedef unsigned short l_ushort; + +typedef char *l_caddr_t; +typedef l_long l_clock_t; +typedef l_int l_daddr_t; +typedef l_ushort l_dev_t; +typedef l_uint l_gid_t; +typedef l_ushort l_gid16_t; +typedef l_ulong l_ino_t; +typedef l_int l_key_t; +typedef l_longlong l_loff_t; +typedef l_ushort l_mode_t; +typedef l_long l_off_t; +typedef l_int l_pid_t; +typedef l_uint l_size_t; +typedef l_long l_suseconds_t; +typedef l_long l_time_t; +typedef l_uint l_uid_t; +typedef l_ushort l_uid16_t; + +typedef struct { + l_int val[2]; +} l_fsid_t; + +typedef struct { + l_time_t tv_sec; + l_suseconds_t tv_usec; +} l_timeval; + +#define l_fd_set fd_set + +/* * Miscellaneous */ #define LINUX_NAME_MAX 255 #define LINUX_MAX_UTSNAME 65 +#define LINUX_CTL_MAXNAME 10 + +struct l___sysctl_args +{ + l_int *name; + l_int nlen; + void *oldval; + l_size_t *oldlenp; + void *newval; + l_size_t newlen; + l_ulong __spare[4]; +}; + /* Scheduling policies */ #define LINUX_SCHED_OTHER 0 #define LINUX_SCHED_FIFO 1 @@ -72,6 +126,11 @@ MALLOC_DECLARE(M_LINUX); #define LINUX_RLIM_NLIMITS 10 +struct l_rlimit { + l_ulong rlim_cur; + l_ulong rlim_max; +}; + /* mmap options */ #define LINUX_MAP_SHARED 0x0001 #define LINUX_MAP_PRIVATE 0x0002 @@ -79,25 +138,55 @@ MALLOC_DECLARE(M_LINUX); #define LINUX_MAP_ANON 0x0020 #define LINUX_MAP_GROWSDOWN 0x0100 -typedef char * linux_caddr_t; -typedef long linux_clock_t; -typedef u_short linux_dev_t; -typedef u_short linux_gid_t; -typedef u_long linux_ino_t; -typedef int linux_key_t; /* XXX */ -typedef u_short linux_mode_t; -typedef u_short linux_nlink_t; -typedef long linux_off_t; -typedef int linux_pid_t; -typedef u_int linux_size_t; -typedef long linux_time_t; -typedef u_short linux_uid_t; +/* + * stat family of syscalls + */ +struct l_timespec { + l_ulong tv_sec; + l_ulong tv_nsec; +}; -typedef struct { - long val[2]; -} linux_fsid_t; +struct l_newstat { + l_ushort st_dev; + l_ushort __pad1; + 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_ushort __pad2; + l_ulong st_size; + l_ulong st_blksize; + l_ulong st_blocks; + struct l_timespec st_atimespec; + struct l_timespec st_mtimespec; + struct l_timespec st_ctimespec; + l_ulong __unused4; + l_ulong __unused5; +}; + +struct l_stat64 { + l_ushort st_dev; + u_char __pad0[10]; + l_ulong __st_ino; + l_uint st_mode; + l_uint st_nlink; + l_ulong st_uid; + l_ulong st_gid; + l_ushort st_rdev; + u_char __pad3[10]; + l_longlong st_size; + l_ulong st_blksize; + l_ulong st_blocks; + l_ulong __pad4; + struct l_timespec st_atimespec; + struct l_timespec st_mtimespec; + struct l_timespec st_ctimespec; + l_ulonglong st_ino; +}; -struct linux_new_utsname { +struct l_new_utsname { char sysname[LINUX_MAX_UTSNAME]; char nodename[LINUX_MAX_UTSNAME]; char release[LINUX_MAX_UTSNAME]; @@ -174,117 +263,114 @@ struct linux_new_utsname { #define LINUX_SS_ONSTACK 1 #define LINUX_SS_DISABLE 2 - int linux_to_bsd_sigaltstack(int lsa); int bsd_to_linux_sigaltstack(int bsa); - -typedef void (*linux_handler_t)(int); -typedef u_long linux_osigset_t; +typedef void (*l_handler_t)(l_int); +typedef l_ulong l_osigset_t; typedef struct { - u_int __bits[LINUX_NSIG_WORDS]; -} linux_sigset_t; + l_uint __bits[LINUX_NSIG_WORDS]; +} l_sigset_t; typedef struct { - linux_handler_t lsa_handler; - linux_osigset_t lsa_mask; - u_long lsa_flags; + l_handler_t lsa_handler; + l_osigset_t lsa_mask; + l_ulong lsa_flags; void (*lsa_restorer)(void); -} linux_osigaction_t; +} l_osigaction_t; typedef struct { - linux_handler_t lsa_handler; - u_long lsa_flags; + l_handler_t lsa_handler; + l_ulong lsa_flags; void (*lsa_restorer)(void); - linux_sigset_t lsa_mask; -} linux_sigaction_t; + l_sigset_t lsa_mask; +} l_sigaction_t; typedef struct { - void *ss_sp; - int ss_flags; - linux_size_t ss_size; -} linux_stack_t; + void *ss_sp; + l_int ss_flags; + l_size_t ss_size; +} l_stack_t; /* The Linux sigcontext, pretty much a standard 386 trapframe. */ -struct linux_sigcontext { - int sc_gs; - int sc_fs; - int sc_es; - int sc_ds; - int sc_edi; - int sc_esi; - int sc_ebp; - int sc_esp; - int sc_ebx; - int sc_edx; - int sc_ecx; - int sc_eax; - int sc_trapno; - int sc_err; - int sc_eip; - int sc_cs; - int sc_eflags; - int sc_esp_at_signal; - int sc_ss; - int sc_387; - int sc_mask; - int sc_cr2; +struct l_sigcontext { + l_int sc_gs; + l_int sc_fs; + l_int sc_es; + l_int sc_ds; + l_int sc_edi; + l_int sc_esi; + l_int sc_ebp; + l_int sc_esp; + l_int sc_ebx; + l_int sc_edx; + l_int sc_ecx; + l_int sc_eax; + l_int sc_trapno; + l_int sc_err; + l_int sc_eip; + l_int sc_cs; + l_int sc_eflags; + l_int sc_esp_at_signal; + l_int sc_ss; + l_int sc_387; + l_int sc_mask; + l_int sc_cr2; }; -struct linux_ucontext { - unsigned long uc_flags; - void *uc_link; - linux_stack_t uc_stack; - struct linux_sigcontext uc_mcontext; - linux_sigset_t uc_sigmask; +struct l_ucontext { + l_ulong uc_flags; + void *uc_link; + l_stack_t uc_stack; + struct l_sigcontext uc_mcontext; + l_sigset_t uc_sigmask; }; - #define LINUX_SI_MAX_SIZE 128 -#define LINUX_SI_PAD_SIZE ((LINUX_SI_MAX_SIZE/sizeof(int)) - 3) - -typedef struct siginfo { - int lsi_signo; - int lsi_errno; - int lsi_code; +#define LINUX_SI_PAD_SIZE ((LINUX_SI_MAX_SIZE/sizeof(l_int)) - 3) +typedef struct l_siginfo { + l_int lsi_signo; + l_int lsi_errno; + l_int lsi_code; union { - int _pad[LINUX_SI_PAD_SIZE]; + l_int _pad[LINUX_SI_PAD_SIZE]; + struct { - linux_pid_t _pid; - linux_uid_t _uid; + l_pid_t _pid; + l_uid16_t _uid; } _kill; struct { - unsigned int _timer1; - unsigned int _timer2; + l_uint _timer1; + l_uint _timer2; } _timer; - + struct { - linux_pid_t _pid; /* sender's pid */ - linux_uid_t _uid; /* sender's uid */ + l_pid_t _pid; /* sender's pid */ + l_uid16_t _uid; /* sender's uid */ union sigval _sigval; } _rt; struct { - linux_pid_t _pid; /* which child */ - linux_uid_t _uid; /* sender's uid */ - int _status; /* exit code */ - linux_clock_t _utime; - linux_clock_t _stime; + l_pid_t _pid; /* which child */ + l_uid16_t _uid; /* sender's uid */ + l_int _status; /* exit code */ + l_clock_t _utime; + l_clock_t _stime; } _sigchld; struct { - void *_addr; /* faulting insn/memory ref. */ + void *_addr; /* faulting insn/memory ref. */ } _sigfault; struct { - int _band; /* POLL_IN, POLL_OUT, POLL_MSG */ - int _fd; + l_int _band; /* POLL_IN,POLL_OUT,POLL_MSG */ + l_int _fd; } _sigpoll; } _sifields; -} linux_siginfo_t; +} l_siginfo_t; #define lsi_pid _sifields._kill._pid #define lsi_uid _sifields._kill._uid @@ -298,22 +384,22 @@ typedef struct siginfo { #define lsi_band _sifields._sigpoll._band #define lsi_fd _sifields._sigpoll._fd -struct linux_fpreg { +struct l_fpreg { u_int16_t significand[4]; u_int16_t exponent; }; -struct linux_fpxreg { +struct l_fpxreg { u_int16_t significand[4]; u_int16_t exponent; u_int16_t padding[3]; }; -struct linux_xmmreg { +struct l_xmmreg { u_int32_t element[4]; }; -struct linux_fpstate { +struct l_fpstate { /* Regular FPU environment */ u_int32_t cw; u_int32_t sw; @@ -322,7 +408,7 @@ struct linux_fpstate { u_int32_t cssel; u_int32_t dataoff; u_int32_t datasel; - struct linux_fpreg _st[8]; + struct l_fpreg _st[8]; u_int16_t status; u_int16_t magic; /* 0xffff = regular FPU data */ @@ -330,8 +416,8 @@ struct linux_fpstate { u_int32_t _fxsr_env[6]; /* env is ignored */ u_int32_t mxcsr; u_int32_t reserved; - struct linux_fpxreg _fxsr_st[8]; /* reg data is ignored */ - struct linux_xmmreg _xmm[8]; + struct l_fpxreg _fxsr_st[8]; /* reg data is ignored */ + struct l_xmmreg _xmm[8]; u_int32_t padding[56]; }; @@ -341,21 +427,21 @@ struct linux_fpstate { * This means that we need to pass the pointer to the handler too. * It is appended to the frame to not interfere with the rest of it. */ -struct linux_sigframe { - int sf_sig; - struct linux_sigcontext sf_sc; - struct linux_fpstate sf_fpstate; - u_int sf_extramask[LINUX_NSIG_WORDS-1]; - linux_handler_t sf_handler; +struct l_sigframe { + l_int sf_sig; + struct l_sigcontext sf_sc; + struct l_fpstate sf_fpstate; + l_uint sf_extramask[LINUX_NSIG_WORDS-1]; + l_handler_t sf_handler; }; -struct linux_rt_sigframe { - int sf_sig; - linux_siginfo_t *sf_siginfo; - struct linux_ucontext *sf_ucontext; - linux_siginfo_t sf_si; - struct linux_ucontext sf_sc; - linux_handler_t sf_handler; +struct l_rt_sigframe { + l_int sf_sig; + l_siginfo_t *sf_siginfo; + struct l_ucontext *sf_ucontext; + l_siginfo_t sf_si; + struct l_ucontext sf_sc; + l_handler_t sf_handler; }; extern int bsd_to_linux_signal[]; @@ -457,6 +543,14 @@ int linux_ioctl_unregister_handler(struct linux_ioctl_handler *h); #define LINUX_SETVAL 16 #define LINUX_SETALL 17 +union l_semun { + l_int val; + struct l_semid_ds *buf; + l_ushort *array; + struct l_seminfo *__buf; + void *__pad; +}; + /* * Socket defines */ @@ -517,44 +611,65 @@ int linux_ioctl_unregister_handler(struct linux_ioctl_handler *h); #define LINUX_IP_ADD_MEMBERSHIP 35 #define LINUX_IP_DROP_MEMBERSHIP 36 -struct linux_sockaddr { - u_short sa_family; - char sa_data[14]; +struct l_sockaddr { + l_ushort sa_family; + char sa_data[14]; }; -struct linux_ifmap { - u_long mem_start; - u_long mem_end; - u_short base_addr; - u_char irq; - u_char dma; - u_char port; +struct l_ifmap { + l_ulong mem_start; + l_ulong mem_end; + l_ushort base_addr; + u_char irq; + u_char dma; + u_char port; }; #define LINUX_IFHWADDRLEN 6 #define LINUX_IFNAMSIZ 16 -struct linux_ifreq { +struct l_ifreq { union { char ifrn_name[LINUX_IFNAMSIZ]; } ifr_ifrn; union { - struct linux_sockaddr ifru_addr; - struct linux_sockaddr ifru_dstaddr; - struct linux_sockaddr ifru_broadaddr; - struct linux_sockaddr ifru_netmask; - struct linux_sockaddr ifru_hwaddr; - short ifru_flags; - int ifru_metric; - int ifru_mtu; - struct linux_ifmap ifru_map; - char ifru_slave[LINUX_IFNAMSIZ]; /* Just fits the size */ - linux_caddr_t ifru_data; + struct l_sockaddr ifru_addr; + struct l_sockaddr ifru_dstaddr; + struct l_sockaddr ifru_broadaddr; + struct l_sockaddr ifru_netmask; + struct l_sockaddr ifru_hwaddr; + l_short ifru_flags; + l_int ifru_metric; + l_int ifru_mtu; + struct l_ifmap ifru_map; + char ifru_slave[LINUX_IFNAMSIZ]; + l_caddr_t ifru_data; } ifr_ifru; }; #define ifr_name ifr_ifrn.ifrn_name /* interface name */ #define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */ +/* + * poll() + */ +#define LINUX_POLLIN 0x0001 +#define LINUX_POLLPRI 0x0002 +#define LINUX_POLLOUT 0x0004 +#define LINUX_POLLERR 0x0008 +#define LINUX_POLLHUP 0x0010 +#define LINUX_POLLNVAL 0x0020 +#define LINUX_POLLRDNORM 0x0040 +#define LINUX_POLLRDBAND 0x0080 +#define LINUX_POLLWRNORM 0x0100 +#define LINUX_POLLWRBAND 0x0200 +#define LINUX_POLLMSG 0x0400 + +struct l_pollfd { + l_int fd; + l_short events; + l_short revents; +}; + #endif /* !_I386_LINUX_LINUX_H_ */ diff --git a/sys/i386/linux/linux_dummy.c b/sys/i386/linux/linux_dummy.c index b63a285..983ccec 100644 --- a/sys/i386/linux/linux_dummy.c +++ b/sys/i386/linux/linux_dummy.c @@ -34,41 +34,16 @@ #include <i386/linux/linux.h> #include <i386/linux/linux_proto.h> +#include <compat/linux/linux_util.h> -#define DUMMY(s) \ -int \ -linux_ ## s(struct proc *p, struct linux_ ## s ## _args *args) \ -{ \ - return (unsupported_msg(p, #s)); \ -} \ -struct __hack - -static int -unsupported_msg(struct proc *p, const char *fname) -{ - printf("linux: syscall %s is obsoleted or not implemented (pid=%ld)\n", - fname, (long)p->p_pid); - return (ENOSYS); -} - -DUMMY(setup); -DUMMY(break); DUMMY(stat); DUMMY(stime); DUMMY(ptrace); DUMMY(fstat); -DUMMY(stty); -DUMMY(gtty); -DUMMY(ftime); -DUMMY(prof); -DUMMY(lock); -DUMMY(mpx); -DUMMY(ulimit); DUMMY(olduname); -DUMMY(ksyslog); +DUMMY(syslog); DUMMY(uname); DUMMY(vhangup); -DUMMY(idle); DUMMY(vm86old); DUMMY(swapoff); DUMMY(adjtimex); @@ -79,16 +54,10 @@ DUMMY(get_kernel_syms); DUMMY(quotactl); DUMMY(bdflush); DUMMY(sysfs); -DUMMY(afs_syscall); -DUMMY(setfsuid); -DUMMY(setfsgid); DUMMY(getsid); -DUMMY(sysctl); -DUMMY(getresuid); DUMMY(vm86); DUMMY(query_module); DUMMY(nfsservctl); -DUMMY(getresgid); DUMMY(prctl); DUMMY(rt_sigpending); DUMMY(rt_sigtimedwait); @@ -96,12 +65,14 @@ DUMMY(rt_sigqueueinfo); DUMMY(capget); DUMMY(capset); DUMMY(sendfile); -DUMMY(getpmsg); -DUMMY(putpmsg); -DUMMY(ugetrlimit); DUMMY(mmap2); DUMMY(truncate64); DUMMY(ftruncate64); -DUMMY(stat64); -DUMMY(lstat64); -DUMMY(fstat64); +DUMMY(lchown); +DUMMY(fchown); +DUMMY(chown); +DUMMY(setfsuid); +DUMMY(setfsgid); +DUMMY(pivot_root); +DUMMY(mincore); +DUMMY(madvise); diff --git a/sys/i386/linux/linux_genassym.c b/sys/i386/linux/linux_genassym.c index 3e3fbad..9cef0a5 100644 --- a/sys/i386/linux/linux_genassym.c +++ b/sys/i386/linux/linux_genassym.c @@ -5,11 +5,9 @@ #include <i386/linux/linux.h> -ASSYM(LINUX_SIGF_HANDLER, offsetof(struct linux_sigframe, sf_handler)); -ASSYM(LINUX_SIGF_SC, offsetof(struct linux_sigframe, sf_sc)); -ASSYM(LINUX_SC_GS, offsetof(struct linux_sigcontext, sc_gs)); -ASSYM(LINUX_SC_EFLAGS, offsetof(struct linux_sigcontext, sc_eflags)); -ASSYM(LINUX_RT_SIGF_HANDLER, offsetof(struct linux_rt_sigframe, sf_handler)); -ASSYM(LINUX_RT_SIGF_UC, offsetof(struct linux_rt_sigframe, sf_sc)); - - +ASSYM(LINUX_SIGF_HANDLER, offsetof(struct l_sigframe, sf_handler)); +ASSYM(LINUX_SIGF_SC, offsetof(struct l_sigframe, sf_sc)); +ASSYM(LINUX_SC_GS, offsetof(struct l_sigcontext, sc_gs)); +ASSYM(LINUX_SC_EFLAGS, offsetof(struct l_sigcontext, sc_eflags)); +ASSYM(LINUX_RT_SIGF_HANDLER, offsetof(struct l_rt_sigframe, sf_handler)); +ASSYM(LINUX_RT_SIGF_UC, offsetof(struct l_rt_sigframe, sf_sc)); diff --git a/sys/i386/linux/linux_machdep.c b/sys/i386/linux/linux_machdep.c index ce8d52b..dfae7f4 100644 --- a/sys/i386/linux/linux_machdep.c +++ b/sys/i386/linux/linux_machdep.c @@ -54,24 +54,24 @@ #include <compat/linux/linux_signal.h> #include <compat/linux/linux_util.h> -struct linux_descriptor { - unsigned int entry_number; - unsigned long base_addr; - unsigned int limit; - unsigned int seg_32bit:1; - unsigned int contents:2; - unsigned int read_exec_only:1; - unsigned int limit_in_pages:1; - unsigned int seg_not_present:1; - unsigned int useable:1; +struct l_descriptor { + l_uint entry_number; + l_ulong 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 linux_select_argv { - int nfds; - fd_set *readfds; - fd_set *writefds; - fd_set *exceptfds; - struct timeval *timeout; +struct l_old_select_argv { + l_int nfds; + l_fd_set *readfds; + l_fd_set *writefds; + l_fd_set *exceptfds; + struct l_timeval *timeout; }; int @@ -118,51 +118,142 @@ linux_execve(struct proc *p, struct linux_execve_args *args) return (execve(p, &bsd)); } +struct l_ipc_kludge { + struct l_msgbuf *msgp; + l_long msgtyp; +}; + int linux_ipc(struct proc *p, struct linux_ipc_args *args) { - switch (args->what) { - case LINUX_SEMOP: - return (linux_semop(p, args)); - case LINUX_SEMGET: - return (linux_semget(p, args)); - case LINUX_SEMCTL: - return (linux_semctl(p, args)); - case LINUX_MSGSND: - return (linux_msgsnd(p, args)); - case LINUX_MSGRCV: - return (linux_msgrcv(p, args)); - case LINUX_MSGGET: - return (linux_msgget(p, args)); - case LINUX_MSGCTL: - return (linux_msgctl(p, args)); - case LINUX_SHMAT: - return (linux_shmat(p, args)); - case LINUX_SHMDT: - return (linux_shmdt(p, args)); - case LINUX_SHMGET: - return (linux_shmget(p, args)); - case LINUX_SHMCTL: - return (linux_shmctl(p, args)); + + switch (args->what & 0xFFFF) { + case LINUX_SEMOP: { + struct linux_semop_args a; + + a.semid = args->arg1; + a.tsops = args->ptr; + a.nsops = args->arg2; + return (linux_semop(p, &a)); + } + case LINUX_SEMGET: { + struct linux_semget_args a; + + a.key = args->arg1; + a.nsems = args->arg2; + a.semflg = args->arg3; + return (linux_semget(p, &a)); + } + case LINUX_SEMCTL: { + struct linux_semctl_args a; + int error; + + a.semid = args->arg1; + a.semnum = args->arg2; + a.cmd = args->arg3; + error = copyin((caddr_t)args->ptr, &a.arg, sizeof(a.arg)); + if (error) + return (error); + return (linux_semctl(p, &a)); + } + case LINUX_MSGSND: { + struct linux_msgsnd_args a; + + a.msqid = args->arg1; + a.msgp = args->ptr; + a.msgsz = args->arg2; + a.msgflg = args->arg3; + return (linux_msgsnd(p, &a)); + } + case LINUX_MSGRCV: { + struct linux_msgrcv_args a; + + a.msqid = args->arg1; + a.msgsz = args->arg2; + a.msgflg = args->arg3; + if ((args->what >> 16) == 0) { + struct l_ipc_kludge tmp; + int error; + + if (args->ptr == NULL) + return (EINVAL); + error = copyin((caddr_t)args->ptr, &tmp, sizeof(tmp)); + if (error) + return (error); + a.msgp = tmp.msgp; + a.msgtyp = tmp.msgtyp; + } else { + a.msgp = args->ptr; + a.msgtyp = args->arg5; + } + return (linux_msgrcv(p, &a)); + } + case LINUX_MSGGET: { + struct linux_msgget_args a; + + a.key = args->arg1; + a.msgflg = args->arg2; + return (linux_msgget(p, &a)); + } + case LINUX_MSGCTL: { + struct linux_msgctl_args a; + + a.msqid = args->arg1; + a.cmd = args->arg2; + a.buf = args->ptr; + return (linux_msgctl(p, &a)); + } + case LINUX_SHMAT: { + struct linux_shmat_args a; + + a.shmid = args->arg1; + a.shmaddr = args->ptr; + a.shmflg = args->arg2; + a.raddr = (l_ulong *)args->arg3; + return (linux_shmat(p, &a)); } + case LINUX_SHMDT: { + struct linux_shmdt_args a; - uprintf("LINUX: 'ipc' typ=%d not implemented\n", args->what); - return (ENOSYS); + a.shmaddr = args->ptr; + return (linux_shmdt(p, &a)); + } + case LINUX_SHMGET: { + struct linux_shmget_args a; + + a.key = args->arg1; + a.size = args->arg2; + a.shmflg = args->arg3; + return (linux_shmget(p, &a)); + } + case LINUX_SHMCTL: { + struct linux_shmctl_args a; + + a.shmid = args->arg1; + a.cmd = args->arg2; + a.buf = args->ptr; + return (linux_shmctl(p, &a)); + } + default: + break; + } + + return (EINVAL); } int -linux_select(struct proc *p, struct linux_select_args *args) +linux_old_select(struct proc *p, struct linux_old_select_args *args) { - struct linux_select_argv linux_args; - struct linux_newselect_args newsel; + struct l_old_select_argv linux_args; + struct linux_select_args newsel; int error; -#ifdef SELECT_DEBUG - if (ldebug(select)) - printf(ARGS(select, "%x"), args->ptr); +#ifdef DEBUG + if (ldebug(old_select)) + printf(ARGS(old_select, "%x"), args->ptr); #endif - error = copyin(args->ptr, &linux_args, sizeof(linux_args)); + error = copyin((caddr_t)args->ptr, &linux_args, sizeof(linux_args)); if (error) return (error); @@ -171,7 +262,7 @@ linux_select(struct proc *p, struct linux_select_args *args) newsel.writefds = linux_args.writefds; newsel.exceptfds = linux_args.exceptfds; newsel.timeout = linux_args.timeout; - return (linux_newselect(p, &newsel)); + return (linux_select(p, &newsel)); } int @@ -222,7 +313,6 @@ linux_clone(struct proc *p, struct linux_clone_args *args) int error, ff = RFPROC | RFSTOPPED; struct proc *p2; int exit_signal; - vm_offset_t start; #ifdef DEBUG if (ldebug(clone)) { @@ -243,9 +333,6 @@ linux_clone(struct proc *p, struct linux_clone_args *args) if (exit_signal <= LINUX_SIGTBLSZ) exit_signal = linux_to_bsd_signal[_SIG_IDX(exit_signal)]; - /* RFTHREAD probably not necessary here, but it shouldn't hurt */ - ff |= RFTHREAD; - if (args->flags & CLONE_VM) ff |= RFMEM; if (args->flags & CLONE_SIGHAND) @@ -253,44 +340,44 @@ linux_clone(struct proc *p, struct linux_clone_args *args) if (!(args->flags & CLONE_FILES)) ff |= RFFDG; - error = 0; - start = 0; - - if ((error = fork1(p, ff, &p2)) != 0) - return (error); + mtx_lock(&Giant); + error = fork1(p, ff, &p2); + if (error == 0) { + p->p_retval[0] = p2->p_pid; + p->p_retval[1] = 0; - PROC_LOCK(p2); - p2->p_sigparent = exit_signal; - PROC_UNLOCK(p2); - p2->p_frame->tf_esp = (unsigned int)args->stack; + PROC_LOCK(p2); + p2->p_sigparent = exit_signal; + p2->p_frame->tf_esp = (unsigned int)args->stack; #ifdef DEBUG - if (ldebug(clone)) - printf(LMSG("clone: successful rfork to %ld"), - (long)p2->p_pid); + if (ldebug(clone)) + printf(LMSG("clone: successful rfork to %ld"), + (long)p2->p_pid); #endif - /* - * Make this runnable after we are finished with it. - */ - mtx_lock_spin(&sched_lock); - p2->p_stat = SRUN; - setrunqueue(p2); - mtx_unlock_spin(&sched_lock); + /* + * Make this runnable after we are finished with it. + */ + mtx_lock_spin(&sched_lock); + p2->p_stat = SRUN; + setrunqueue(p2); + mtx_unlock_spin(&sched_lock); + PROC_UNLOCK(p2); + } + mtx_unlock(&Giant); - p->p_retval[0] = p2->p_pid; - p->p_retval[1] = 0; - return (0); + return (error); } /* XXX move */ -struct linux_mmap_argv { - linux_caddr_t addr; - int len; - int prot; - int flags; - int fd; - int pos; +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) @@ -309,9 +396,9 @@ linux_mmap(struct proc *p, struct linux_mmap_args *args) off_t pos; } */ bsd_args; int error; - struct linux_mmap_argv linux_args; + struct l_mmap_argv linux_args; - error = copyin(args->ptr, &linux_args, sizeof(linux_args)); + error = copyin((caddr_t)args->ptr, &linux_args, sizeof(linux_args)); if (error) return (error); @@ -488,7 +575,7 @@ linux_modify_ldt(p, uap) caddr_t sg; struct sysarch_args args; struct i386_ldt_args *ldt; - struct linux_descriptor ld; + struct l_descriptor ld; union descriptor *desc; sg = stackgap_init(); @@ -552,8 +639,8 @@ linux_modify_ldt(p, uap) int linux_sigaction(struct proc *p, struct linux_sigaction_args *args) { - linux_osigaction_t osa; - linux_sigaction_t act, oact; + l_osigaction_t osa; + l_sigaction_t act, oact; int error; #ifdef DEBUG @@ -563,7 +650,8 @@ linux_sigaction(struct proc *p, struct linux_sigaction_args *args) #endif if (args->nsa != NULL) { - error = copyin(args->nsa, &osa, sizeof(linux_osigaction_t)); + error = copyin((caddr_t)args->nsa, &osa, + sizeof(l_osigaction_t)); if (error) return (error); act.lsa_handler = osa.lsa_handler; @@ -581,7 +669,8 @@ linux_sigaction(struct proc *p, struct linux_sigaction_args *args) osa.lsa_flags = oact.lsa_flags; osa.lsa_restorer = oact.lsa_restorer; osa.lsa_mask = oact.lsa_mask.__bits[0]; - error = copyout(&osa, args->osa, sizeof(linux_osigaction_t)); + error = copyout(&osa, (caddr_t)args->osa, + sizeof(l_osigaction_t)); } return (error); @@ -597,7 +686,7 @@ linux_sigsuspend(struct proc *p, struct linux_sigsuspend_args *args) { struct sigsuspend_args bsd; sigset_t *sigmask; - linux_sigset_t mask; + l_sigset_t mask; caddr_t sg = stackgap_init(); #ifdef DEBUG @@ -618,7 +707,7 @@ linux_rt_sigsuspend(p, uap) struct proc *p; struct linux_rt_sigsuspend_args *uap; { - linux_sigset_t lmask; + l_sigset_t lmask; sigset_t *bmask; struct sigsuspend_args bsd; caddr_t sg = stackgap_init(); @@ -630,10 +719,10 @@ linux_rt_sigsuspend(p, uap) (void *)uap->newset, uap->sigsetsize); #endif - if (uap->sigsetsize != sizeof(linux_sigset_t)) + if (uap->sigsetsize != sizeof(l_sigset_t)) return (EINVAL); - error = copyin(uap->newset, &lmask, sizeof(linux_sigset_t)); + error = copyin(uap->newset, &lmask, sizeof(l_sigset_t)); if (error) return (error); @@ -670,7 +759,7 @@ linux_sigaltstack(p, uap) { struct sigaltstack_args bsd; stack_t *ss, *oss; - linux_stack_t lss; + l_stack_t lss; int error; caddr_t sg = stackgap_init(); @@ -682,7 +771,7 @@ linux_sigaltstack(p, uap) if (uap->uss == NULL) { ss = NULL; } else { - error = copyin(uap->uss, &lss, sizeof(linux_stack_t)); + error = copyin(uap->uss, &lss, sizeof(l_stack_t)); if (error) return (error); @@ -703,7 +792,7 @@ linux_sigaltstack(p, uap) lss.ss_sp = oss->ss_sp; lss.ss_size = oss->ss_size; lss.ss_flags = bsd_to_linux_sigaltstack(oss->ss_flags); - error = copyout(&lss, uap->uoss, sizeof(linux_stack_t)); + error = copyout(&lss, uap->uoss, sizeof(l_stack_t)); } return (error); diff --git a/sys/i386/linux/linux_proto.h b/sys/i386/linux/linux_proto.h index 225f638..6105da1 100644 --- a/sys/i386/linux/linux_proto.h +++ b/sys/i386/linux/linux_proto.h @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: src/sys/i386/linux/syscalls.master,v 1.40 2001/04/01 06:37:40 alc Exp + * created from FreeBSD: src/sys/i386/linux/syscalls.master,v 1.43 2001/09/08 18:48:40 marcel Exp */ #ifndef _LINUX_SYSPROTO_H_ @@ -18,548 +18,631 @@ struct proc; #define PAD_(t) (sizeof(register_t) <= sizeof(t) ? \ 0 : sizeof(register_t) - sizeof(t)) -struct linux_setup_args { +#if BYTE_ORDER == LITTLE_ENDIAN +#define PADL_(t) 0 +#define PADR_(t) PAD_(t) +#else +#define PADL_(t) PAD_(t) +#define PADR_(t) 0 +#endif + +struct linux_fork_args { register_t dummy; }; -struct linux_fork_args { - register_t dummy; +struct linux_open_args { + char path_l_[PADL_(char *)]; char * path; char path_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_open_args { - char * path; char path_[PAD_(char *)]; - int flags; char flags_[PAD_(int)]; - int mode; char mode_[PAD_(int)]; +struct linux_waitpid_args { + char pid_l_[PADL_(l_pid_t)]; l_pid_t pid; char pid_r_[PADR_(l_pid_t)]; + char status_l_[PADL_(l_int *)]; l_int * status; char status_r_[PADR_(l_int *)]; + char options_l_[PADL_(l_int)]; l_int options; char options_r_[PADR_(l_int)]; }; -struct linux_waitpid_args { - int pid; char pid_[PAD_(int)]; - int * status; char status_[PAD_(int *)]; - int options; char options_[PAD_(int)]; +struct linux_creat_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char mode_l_[PADL_(l_int)]; l_int mode; char mode_r_[PADR_(l_int)]; }; -struct linux_creat_args { - char * path; char path_[PAD_(char *)]; - int mode; char mode_[PAD_(int)]; +struct linux_link_args { + 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_link_args { - char * path; char path_[PAD_(char *)]; - char * to; char to_[PAD_(char *)]; +struct linux_unlink_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; }; -struct linux_unlink_args { - char * path; char path_[PAD_(char *)]; +struct linux_execve_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char argp_l_[PADL_(char **)]; char ** argp; char argp_r_[PADR_(char **)]; + char envp_l_[PADL_(char **)]; char ** envp; char envp_r_[PADR_(char **)]; }; -struct linux_execve_args { - char * path; char path_[PAD_(char *)]; - char ** argp; char argp_[PAD_(char **)]; - char ** envp; char envp_[PAD_(char **)]; +struct linux_chdir_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; }; -struct linux_chdir_args { - char * path; char path_[PAD_(char *)]; +struct linux_time_args { + char tm_l_[PADL_(l_time_t *)]; l_time_t * tm; char tm_r_[PADR_(l_time_t *)]; }; -struct linux_time_args { - linux_time_t * tm; char tm_[PAD_(linux_time_t *)]; +struct linux_mknod_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char mode_l_[PADL_(l_int)]; l_int mode; char mode_r_[PADR_(l_int)]; + char dev_l_[PADL_(l_dev_t)]; l_dev_t dev; char dev_r_[PADR_(l_dev_t)]; }; -struct linux_mknod_args { - char * path; char path_[PAD_(char *)]; - int mode; char mode_[PAD_(int)]; - int dev; char dev_[PAD_(int)]; +struct linux_chmod_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char mode_l_[PADL_(l_mode_t)]; l_mode_t mode; char mode_r_[PADR_(l_mode_t)]; }; -struct linux_chmod_args { - char * path; char path_[PAD_(char *)]; - int mode; char mode_[PAD_(int)]; +struct linux_lchown16_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char uid_l_[PADL_(l_uid16_t)]; l_uid16_t uid; char uid_r_[PADR_(l_uid16_t)]; + char gid_l_[PADL_(l_gid16_t)]; l_gid16_t gid; char gid_r_[PADR_(l_gid16_t)]; }; -struct linux_lchown_args { - char * path; char path_[PAD_(char *)]; - int uid; char uid_[PAD_(int)]; - int gid; char gid_[PAD_(int)]; +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 *)]; }; -struct linux_break_args { - char * nsize; char nsize_[PAD_(char *)]; +struct linux_lseek_args { + char fdes_l_[PADL_(l_uint)]; l_uint fdes; char fdes_r_[PADR_(l_uint)]; + char off_l_[PADL_(l_off_t)]; l_off_t off; char off_r_[PADR_(l_off_t)]; + char whence_l_[PADL_(l_int)]; l_int whence; char whence_r_[PADR_(l_int)]; }; -struct linux_stat_args { - char * path; char path_[PAD_(char *)]; - struct ostat * up; char up_[PAD_(struct ostat *)]; +struct linux_getpid_args { + register_t dummy; }; -struct linux_lseek_args { - int fdes; char fdes_[PAD_(int)]; - long off; char off_[PAD_(long)]; - int whence; char whence_[PAD_(int)]; +struct linux_mount_args { + char specialfile_l_[PADL_(char *)]; char * specialfile; char specialfile_r_[PADR_(char *)]; + char dir_l_[PADL_(char *)]; char * dir; char dir_r_[PADR_(char *)]; + char filesystemtype_l_[PADL_(char *)]; char * filesystemtype; char filesystemtype_r_[PADR_(char *)]; + char rwflag_l_[PADL_(l_ulong)]; l_ulong rwflag; char rwflag_r_[PADR_(l_ulong)]; + char data_l_[PADL_(void *)]; void * data; char data_r_[PADR_(void *)]; }; -struct linux_mount_args { - char * specialfile; char specialfile_[PAD_(char *)]; - char * dir; char dir_[PAD_(char *)]; - char * filesystemtype; char filesystemtype_[PAD_(char *)]; - u_long rwflag; char rwflag_[PAD_(u_long)]; - void * data; char data_[PAD_(void *)]; +struct linux_oldumount_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; }; -struct linux_umount_args { - char * path; char path_[PAD_(char *)]; +struct linux_setuid16_args { + char uid_l_[PADL_(l_uid16_t)]; l_uid16_t uid; char uid_r_[PADR_(l_uid16_t)]; }; -struct linux_stime_args { +struct linux_getuid16_args { register_t dummy; }; -struct linux_ptrace_args { +struct linux_stime_args { register_t dummy; }; -struct linux_alarm_args { - unsigned int secs; char secs_[PAD_(unsigned int)]; -}; -struct linux_fstat_args { - int fd; char fd_[PAD_(int)]; - struct ostat * up; char up_[PAD_(struct ostat *)]; -}; -struct linux_pause_args { +struct linux_ptrace_args { register_t dummy; }; -struct linux_utime_args { - char * fname; char fname_[PAD_(char *)]; - struct linux_utimbuf * times; char times_[PAD_(struct linux_utimbuf *)]; +struct linux_alarm_args { + char secs_l_[PADL_(l_uint)]; l_uint secs; char secs_r_[PADR_(l_uint)]; }; -struct linux_stty_args { - register_t dummy; +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 *)]; }; -struct linux_gtty_args { +struct linux_pause_args { register_t dummy; }; -struct linux_access_args { - char * path; char path_[PAD_(char *)]; - int flags; char flags_[PAD_(int)]; +struct linux_utime_args { + char fname_l_[PADL_(char *)]; char * fname; char fname_r_[PADR_(char *)]; + char times_l_[PADL_(struct l_utimbuf *)]; struct l_utimbuf * times; char times_r_[PADR_(struct l_utimbuf *)]; }; -struct linux_nice_args { - int inc; char inc_[PAD_(int)]; +struct linux_access_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char flags_l_[PADL_(l_int)]; l_int flags; char flags_r_[PADR_(l_int)]; }; -struct linux_ftime_args { - register_t dummy; +struct linux_nice_args { + char inc_l_[PADL_(l_int)]; l_int inc; char inc_r_[PADR_(l_int)]; }; -struct linux_kill_args { - int pid; char pid_[PAD_(int)]; - int signum; char signum_[PAD_(int)]; +struct linux_kill_args { + char pid_l_[PADL_(l_int)]; l_int pid; char pid_r_[PADR_(l_int)]; + char signum_l_[PADL_(l_int)]; l_int signum; char signum_r_[PADR_(l_int)]; }; -struct linux_rename_args { - char * from; char from_[PAD_(char *)]; - char * to; char to_[PAD_(char *)]; +struct linux_rename_args { + char from_l_[PADL_(char *)]; char * from; char from_r_[PADR_(char *)]; + char to_l_[PADL_(char *)]; char * to; char to_r_[PADR_(char *)]; }; -struct linux_mkdir_args { - char * path; char path_[PAD_(char *)]; - int mode; char mode_[PAD_(int)]; +struct linux_mkdir_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char mode_l_[PADL_(l_int)]; l_int mode; char mode_r_[PADR_(l_int)]; }; -struct linux_rmdir_args { - char * path; char path_[PAD_(char *)]; +struct linux_rmdir_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; }; -struct linux_pipe_args { - int * pipefds; char pipefds_[PAD_(int *)]; +struct linux_pipe_args { + char pipefds_l_[PADL_(l_ulong *)]; l_ulong * pipefds; char pipefds_r_[PADR_(l_ulong *)]; }; -struct linux_times_args { - struct linux_times_argv * buf; char buf_[PAD_(struct linux_times_argv *)]; +struct linux_times_args { + char buf_l_[PADL_(struct l_times_argv *)]; struct l_times_argv * buf; char buf_r_[PADR_(struct l_times_argv *)]; }; -struct linux_prof_args { - register_t dummy; +struct linux_brk_args { + char dsend_l_[PADL_(l_ulong)]; l_ulong dsend; char dsend_r_[PADR_(l_ulong)]; }; -struct linux_brk_args { - char * dsend; char dsend_[PAD_(char *)]; +struct linux_setgid16_args { + char gid_l_[PADL_(l_gid16_t)]; l_gid16_t gid; char gid_r_[PADR_(l_gid16_t)]; }; -struct linux_signal_args { - int sig; char sig_[PAD_(int)]; - linux_handler_t handler; char handler_[PAD_(linux_handler_t)]; +struct linux_getgid16_args { + register_t dummy; }; -struct linux_umount2_args { - char * path; char path_[PAD_(char *)]; - int flags; char flags_[PAD_(int)]; +struct linux_signal_args { + char sig_l_[PADL_(l_int)]; l_int sig; char sig_r_[PADR_(l_int)]; + char handler_l_[PADL_(l_handler_t)]; l_handler_t handler; char handler_r_[PADR_(l_handler_t)]; }; -struct linux_lock_args { +struct linux_geteuid16_args { register_t dummy; }; -struct linux_ioctl_args { - int fd; char fd_[PAD_(int)]; - u_long cmd; char cmd_[PAD_(u_long)]; - int arg; char arg_[PAD_(int)]; +struct linux_getegid16_args { + register_t dummy; }; -struct linux_fcntl_args { - int fd; char fd_[PAD_(int)]; - int cmd; char cmd_[PAD_(int)]; - int arg; char arg_[PAD_(int)]; +struct linux_umount_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char flags_l_[PADL_(l_int)]; l_int flags; char flags_r_[PADR_(l_int)]; }; -struct linux_mpx_args { - register_t dummy; +struct linux_ioctl_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char cmd_l_[PADL_(l_uint)]; l_uint cmd; char cmd_r_[PADR_(l_uint)]; + char arg_l_[PADL_(l_ulong)]; l_ulong arg; char arg_r_[PADR_(l_ulong)]; }; -struct linux_ulimit_args { - register_t dummy; +struct linux_fcntl_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char cmd_l_[PADL_(l_uint)]; l_uint cmd; char cmd_r_[PADR_(l_uint)]; + char arg_l_[PADL_(l_ulong)]; l_ulong arg; char arg_r_[PADR_(l_ulong)]; }; -struct linux_olduname_args { +struct linux_olduname_args { register_t dummy; }; -struct linux_ustat_args { - linux_dev_t dev; char dev_[PAD_(linux_dev_t)]; - struct linux_ustat * ubuf; char ubuf_[PAD_(struct linux_ustat *)]; +struct linux_ustat_args { + 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_sigaction_args { - int sig; char sig_[PAD_(int)]; - linux_osigaction_t * nsa; char nsa_[PAD_(linux_osigaction_t *)]; - linux_osigaction_t * osa; char osa_[PAD_(linux_osigaction_t *)]; +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 *)]; + char osa_l_[PADL_(l_osigaction_t *)]; l_osigaction_t * osa; char osa_r_[PADR_(l_osigaction_t *)]; }; -struct linux_siggetmask_args { +struct linux_sgetmask_args { register_t dummy; }; -struct linux_sigsetmask_args { - linux_osigset_t mask; char mask_[PAD_(linux_osigset_t)]; +struct linux_ssetmask_args { + char mask_l_[PADL_(l_osigset_t)]; l_osigset_t mask; char mask_r_[PADR_(l_osigset_t)]; }; -struct linux_sigsuspend_args { - int restart; char restart_[PAD_(int)]; - linux_osigset_t oldmask; char oldmask_[PAD_(linux_osigset_t)]; - linux_osigset_t mask; char mask_[PAD_(linux_osigset_t)]; +struct linux_setreuid16_args { + char ruid_l_[PADL_(l_uid16_t)]; l_uid16_t ruid; char ruid_r_[PADR_(l_uid16_t)]; + char euid_l_[PADL_(l_uid16_t)]; l_uid16_t euid; char euid_r_[PADR_(l_uid16_t)]; }; -struct linux_sigpending_args { - linux_osigset_t * mask; char mask_[PAD_(linux_osigset_t *)]; +struct linux_setregid16_args { + char rgid_l_[PADL_(l_gid16_t)]; l_gid16_t rgid; char rgid_r_[PADR_(l_gid16_t)]; + char egid_l_[PADL_(l_gid16_t)]; l_gid16_t egid; char egid_r_[PADR_(l_gid16_t)]; }; -struct linux_setrlimit_args { - u_int resource; char resource_[PAD_(u_int)]; - struct ogetrlimit * rlim; char rlim_[PAD_(struct ogetrlimit *)]; +struct linux_sigsuspend_args { + char hist0_l_[PADL_(l_int)]; l_int hist0; char hist0_r_[PADR_(l_int)]; + char hist1_l_[PADL_(l_int)]; l_int hist1; char hist1_r_[PADR_(l_int)]; + char mask_l_[PADL_(l_osigset_t)]; l_osigset_t mask; char mask_r_[PADR_(l_osigset_t)]; }; -struct linux_getrlimit_args { - u_int resource; char resource_[PAD_(u_int)]; - struct ogetrlimit * rlim; char rlim_[PAD_(struct ogetrlimit *)]; +struct linux_sigpending_args { + char mask_l_[PADL_(l_osigset_t *)]; l_osigset_t * mask; char mask_r_[PADR_(l_osigset_t *)]; }; -struct linux_getgroups_args { - u_int gidsetsize; char gidsetsize_[PAD_(u_int)]; - linux_gid_t * gidset; char gidset_[PAD_(linux_gid_t *)]; +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 *)]; }; -struct linux_setgroups_args { - u_int gidsetsize; char gidsetsize_[PAD_(u_int)]; - linux_gid_t * gidset; char gidset_[PAD_(linux_gid_t *)]; +struct linux_old_getrlimit_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 *)]; }; -struct linux_select_args { - struct linux_select_argv * ptr; char ptr_[PAD_(struct linux_select_argv *)]; +struct linux_getgroups16_args { + char gidsetsize_l_[PADL_(l_uint)]; l_uint gidsetsize; char gidsetsize_r_[PADR_(l_uint)]; + char gidset_l_[PADL_(l_gid16_t *)]; l_gid16_t * gidset; char gidset_r_[PADR_(l_gid16_t *)]; }; -struct linux_symlink_args { - char * path; char path_[PAD_(char *)]; - char * to; char to_[PAD_(char *)]; +struct linux_setgroups16_args { + char gidsetsize_l_[PADL_(l_uint)]; l_uint gidsetsize; char gidsetsize_r_[PADR_(l_uint)]; + char gidset_l_[PADL_(l_gid16_t *)]; l_gid16_t * gidset; char gidset_r_[PADR_(l_gid16_t *)]; }; -struct linux_readlink_args { - char * name; char name_[PAD_(char *)]; - char * buf; char buf_[PAD_(char *)]; - int count; char count_[PAD_(int)]; +struct linux_old_select_args { + char ptr_l_[PADL_(struct l_old_select_argv *)]; struct l_old_select_argv * ptr; char ptr_r_[PADR_(struct l_old_select_argv *)]; }; -struct linux_uselib_args { - char * library; char library_[PAD_(char *)]; +struct linux_symlink_args { + 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_reboot_args { - int magic1; char magic1_[PAD_(int)]; - int magic2; char magic2_[PAD_(int)]; - int opt; char opt_[PAD_(int)]; +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 *)]; + char count_l_[PADL_(l_int)]; l_int count; char count_r_[PADR_(l_int)]; }; -struct linux_readdir_args { - int fd; char fd_[PAD_(int)]; - struct linux_dirent * dent; char dent_[PAD_(struct linux_dirent *)]; - unsigned int count; char count_[PAD_(unsigned int)]; +struct linux_uselib_args { + char library_l_[PADL_(char *)]; char * library; char library_r_[PADR_(char *)]; }; -struct linux_mmap_args { - struct linux_mmap_argv * ptr; char ptr_[PAD_(struct linux_mmap_argv *)]; +struct linux_reboot_args { + char magic1_l_[PADL_(l_int)]; l_int magic1; char magic1_r_[PADR_(l_int)]; + char magic2_l_[PADL_(l_int)]; l_int magic2; char magic2_r_[PADR_(l_int)]; + char cmd_l_[PADL_(l_uint)]; l_uint cmd; char cmd_r_[PADR_(l_uint)]; + char arg_l_[PADL_(void *)]; void * arg; char arg_r_[PADR_(void *)]; }; -struct linux_truncate_args { - char * path; char path_[PAD_(char *)]; - long length; char length_[PAD_(long)]; +struct linux_readdir_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char dent_l_[PADL_(struct l_dirent *)]; struct l_dirent * dent; char dent_r_[PADR_(struct l_dirent *)]; + char count_l_[PADL_(l_uint)]; l_uint count; char count_r_[PADR_(l_uint)]; }; -struct linux_statfs_args { - char * path; char path_[PAD_(char *)]; - struct linux_statfs_buf * buf; char buf_[PAD_(struct linux_statfs_buf *)]; +struct linux_mmap_args { + char ptr_l_[PADL_(struct l_mmap_argv *)]; struct l_mmap_argv * ptr; char ptr_r_[PADR_(struct l_mmap_argv *)]; }; -struct linux_fstatfs_args { - int fd; char fd_[PAD_(int)]; - struct linux_statfs_buf * buf; char buf_[PAD_(struct linux_statfs_buf *)]; +struct linux_truncate_args { + 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_ioperm_args { - unsigned int start; char start_[PAD_(unsigned int)]; - unsigned int length; char length_[PAD_(unsigned int)]; - int enable; char enable_[PAD_(int)]; +struct linux_statfs_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char buf_l_[PADL_(struct l_statfs_buf *)]; struct l_statfs_buf * buf; char buf_r_[PADR_(struct l_statfs_buf *)]; }; -struct linux_socketcall_args { - int what; char what_[PAD_(int)]; - void * args; char args_[PAD_(void *)]; +struct linux_fstatfs_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char buf_l_[PADL_(struct l_statfs_buf *)]; struct l_statfs_buf * buf; char buf_r_[PADR_(struct l_statfs_buf *)]; }; -struct linux_ksyslog_args { - int what; char what_[PAD_(int)]; +struct linux_ioperm_args { + char start_l_[PADL_(l_ulong)]; l_ulong start; char start_r_[PADR_(l_ulong)]; + char length_l_[PADL_(l_ulong)]; l_ulong length; char length_r_[PADR_(l_ulong)]; + char enable_l_[PADL_(l_int)]; l_int enable; char enable_r_[PADR_(l_int)]; }; -struct linux_setitimer_args { - u_int which; char which_[PAD_(u_int)]; - struct itimerval * itv; char itv_[PAD_(struct itimerval *)]; - struct itimerval * oitv; char oitv_[PAD_(struct itimerval *)]; +struct linux_socketcall_args { + char what_l_[PADL_(l_int)]; l_int what; char what_r_[PADR_(l_int)]; + char args_l_[PADL_(l_ulong)]; l_ulong args; char args_r_[PADR_(l_ulong)]; }; -struct linux_getitimer_args { - u_int which; char which_[PAD_(u_int)]; - struct itimerval * itv; char itv_[PAD_(struct itimerval *)]; +struct linux_syslog_args { + char type_l_[PADL_(l_int)]; l_int type; char type_r_[PADR_(l_int)]; + char buf_l_[PADL_(char *)]; char * buf; char buf_r_[PADR_(char *)]; + char len_l_[PADL_(l_int)]; l_int len; char len_r_[PADR_(l_int)]; }; -struct linux_newstat_args { - char * path; char path_[PAD_(char *)]; - struct linux_newstat * buf; char buf_[PAD_(struct linux_newstat *)]; +struct linux_setitimer_args { + char which_l_[PADL_(l_int)]; l_int which; char which_r_[PADR_(l_int)]; + char itv_l_[PADL_(struct l_itimerval *)]; struct l_itimerval * itv; char itv_r_[PADR_(struct l_itimerval *)]; + char oitv_l_[PADL_(struct l_itimerval *)]; struct l_itimerval * oitv; char oitv_r_[PADR_(struct l_itimerval *)]; }; -struct linux_newlstat_args { - char * path; char path_[PAD_(char *)]; - struct linux_newstat * buf; char buf_[PAD_(struct linux_newstat *)]; +struct linux_getitimer_args { + char which_l_[PADL_(l_int)]; l_int which; char which_r_[PADR_(l_int)]; + char itv_l_[PADL_(struct l_itimerval *)]; struct l_itimerval * itv; char itv_r_[PADR_(struct l_itimerval *)]; }; -struct linux_newfstat_args { - int fd; char fd_[PAD_(int)]; - struct linux_newstat * buf; char buf_[PAD_(struct linux_newstat *)]; +struct linux_newstat_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char buf_l_[PADL_(struct l_newstat *)]; struct l_newstat * buf; char buf_r_[PADR_(struct l_newstat *)]; }; -struct linux_uname_args { - register_t dummy; +struct linux_newlstat_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char buf_l_[PADL_(struct l_newstat *)]; struct l_newstat * buf; char buf_r_[PADR_(struct l_newstat *)]; }; -struct linux_iopl_args { - int level; char level_[PAD_(int)]; +struct linux_newfstat_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char buf_l_[PADL_(struct l_newstat *)]; struct l_newstat * buf; char buf_r_[PADR_(struct l_newstat *)]; }; -struct linux_vhangup_args { +struct linux_uname_args { register_t dummy; }; -struct linux_idle_args { +struct linux_iopl_args { + char level_l_[PADL_(l_ulong)]; l_ulong level; char level_r_[PADR_(l_ulong)]; +}; +struct linux_vhangup_args { register_t dummy; }; -struct linux_vm86old_args { +struct linux_vm86old_args { register_t dummy; }; -struct linux_wait4_args { - int pid; char pid_[PAD_(int)]; - int * status; char status_[PAD_(int *)]; - int options; char options_[PAD_(int)]; - struct rusage * rusage; char rusage_[PAD_(struct rusage *)]; +struct linux_wait4_args { + char pid_l_[PADL_(l_pid_t)]; l_pid_t pid; char pid_r_[PADR_(l_pid_t)]; + char status_l_[PADL_(l_uint *)]; l_uint * status; char status_r_[PADR_(l_uint *)]; + char options_l_[PADL_(l_int)]; l_int options; char options_r_[PADR_(l_int)]; + char rusage_l_[PADL_(struct l_rusage *)]; struct l_rusage * rusage; char rusage_r_[PADR_(struct l_rusage *)]; }; -struct linux_swapoff_args { +struct linux_swapoff_args { register_t dummy; }; -struct linux_sysinfo_args { - struct sysinfo * info; char info_[PAD_(struct sysinfo *)]; +struct linux_sysinfo_args { + char info_l_[PADL_(struct l_sysinfo *)]; struct l_sysinfo * info; char info_r_[PADR_(struct l_sysinfo *)]; }; -struct linux_ipc_args { - int what; char what_[PAD_(int)]; - int arg1; char arg1_[PAD_(int)]; - int arg2; char arg2_[PAD_(int)]; - int arg3; char arg3_[PAD_(int)]; - caddr_t ptr; char ptr_[PAD_(caddr_t)]; +struct linux_ipc_args { + char what_l_[PADL_(l_uint)]; l_uint what; char what_r_[PADR_(l_uint)]; + char arg1_l_[PADL_(l_int)]; l_int arg1; char arg1_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 ptr_l_[PADL_(void *)]; void * ptr; char ptr_r_[PADR_(void *)]; + char arg5_l_[PADL_(l_long)]; l_long arg5; char arg5_r_[PADR_(l_long)]; }; -struct linux_sigreturn_args { - struct linux_sigframe * sfp; char sfp_[PAD_(struct linux_sigframe *)]; +struct linux_sigreturn_args { + char sfp_l_[PADL_(struct l_sigframe *)]; struct l_sigframe * sfp; char sfp_r_[PADR_(struct l_sigframe *)]; }; -struct linux_clone_args { - int flags; char flags_[PAD_(int)]; - void * stack; char stack_[PAD_(void *)]; +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 *)]; }; -struct linux_newuname_args { - struct linux_new_utsname * buf; char buf_[PAD_(struct linux_new_utsname *)]; +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 *)]; }; -struct linux_modify_ldt_args { - int func; char func_[PAD_(int)]; - void * ptr; char ptr_[PAD_(void *)]; - size_t bytecount; char bytecount_[PAD_(size_t)]; +struct linux_modify_ldt_args { + char func_l_[PADL_(l_int)]; l_int func; char func_r_[PADR_(l_int)]; + char ptr_l_[PADL_(void *)]; void * ptr; char ptr_r_[PADR_(void *)]; + char bytecount_l_[PADL_(l_ulong)]; l_ulong bytecount; char bytecount_r_[PADR_(l_ulong)]; }; -struct linux_adjtimex_args { +struct linux_adjtimex_args { register_t dummy; }; -struct linux_sigprocmask_args { - int how; char how_[PAD_(int)]; - linux_osigset_t * mask; char mask_[PAD_(linux_osigset_t *)]; - linux_osigset_t * omask; char omask_[PAD_(linux_osigset_t *)]; +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 *)]; + char omask_l_[PADL_(l_osigset_t *)]; l_osigset_t * omask; char omask_r_[PADR_(l_osigset_t *)]; }; -struct linux_create_module_args { +struct linux_create_module_args { register_t dummy; }; -struct linux_init_module_args { +struct linux_init_module_args { register_t dummy; }; -struct linux_delete_module_args { +struct linux_delete_module_args { register_t dummy; }; -struct linux_get_kernel_syms_args { +struct linux_get_kernel_syms_args { register_t dummy; }; -struct linux_quotactl_args { +struct linux_quotactl_args { register_t dummy; }; -struct linux_getpgid_args { - int pid; char pid_[PAD_(int)]; +struct linux_getpgid_args { + char pid_l_[PADL_(l_pid_t)]; l_pid_t pid; char pid_r_[PADR_(l_pid_t)]; }; -struct linux_bdflush_args { +struct linux_bdflush_args { register_t dummy; }; -struct linux_sysfs_args { - int option; char option_[PAD_(int)]; - u_long arg1; char arg1_[PAD_(u_long)]; - u_long arg2; char arg2_[PAD_(u_long)]; +struct linux_sysfs_args { + char option_l_[PADL_(l_int)]; l_int option; char option_r_[PADR_(l_int)]; + char arg1_l_[PADL_(l_ulong)]; l_ulong arg1; char arg1_r_[PADR_(l_ulong)]; + char arg2_l_[PADL_(l_ulong)]; l_ulong arg2; char arg2_r_[PADR_(l_ulong)]; }; -struct linux_personality_args { - int per; char per_[PAD_(int)]; +struct linux_personality_args { + char per_l_[PADL_(l_ulong)]; l_ulong per; char per_r_[PADR_(l_ulong)]; }; -struct linux_afs_syscall_args { - register_t dummy; +struct linux_setfsuid16_args { + char uid_l_[PADL_(l_uid16_t)]; l_uid16_t uid; char uid_r_[PADR_(l_uid16_t)]; }; -struct linux_setfsuid_args { - linux_uid_t uid; char uid_[PAD_(linux_uid_t)]; +struct linux_setfsgid16_args { + char gid_l_[PADL_(l_gid16_t)]; l_gid16_t gid; char gid_r_[PADR_(l_gid16_t)]; }; -struct linux_setfsgid_args { - linux_gid_t gid; char gid_[PAD_(linux_gid_t)]; +struct linux_llseek_args { + char fd_l_[PADL_(l_int)]; l_int fd; char fd_r_[PADR_(l_int)]; + char ohigh_l_[PADL_(l_ulong)]; l_ulong ohigh; char ohigh_r_[PADR_(l_ulong)]; + char olow_l_[PADL_(l_ulong)]; l_ulong olow; char olow_r_[PADR_(l_ulong)]; + char res_l_[PADL_(l_loff_t *)]; l_loff_t * res; char res_r_[PADR_(l_loff_t *)]; + char whence_l_[PADL_(l_uint)]; l_uint whence; char whence_r_[PADR_(l_uint)]; }; -struct linux_llseek_args { - int fd; char fd_[PAD_(int)]; - u_int32_t ohigh; char ohigh_[PAD_(u_int32_t)]; - u_int32_t olow; char olow_[PAD_(u_int32_t)]; - caddr_t res; char res_[PAD_(caddr_t)]; - int whence; char whence_[PAD_(int)]; +struct linux_getdents_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char dent_l_[PADL_(void *)]; void * dent; char dent_r_[PADR_(void *)]; + char count_l_[PADL_(l_uint)]; l_uint count; char count_r_[PADR_(l_uint)]; }; -struct linux_getdents_args { - int fd; char fd_[PAD_(int)]; - void * dent; char dent_[PAD_(void *)]; - unsigned count; char count_[PAD_(unsigned)]; +struct linux_select_args { + char nfds_l_[PADL_(l_int)]; l_int nfds; char nfds_r_[PADR_(l_int)]; + char readfds_l_[PADL_(l_fd_set *)]; l_fd_set * readfds; char readfds_r_[PADR_(l_fd_set *)]; + char writefds_l_[PADL_(l_fd_set *)]; l_fd_set * writefds; char writefds_r_[PADR_(l_fd_set *)]; + char exceptfds_l_[PADL_(l_fd_set *)]; l_fd_set * exceptfds; char exceptfds_r_[PADR_(l_fd_set *)]; + char timeout_l_[PADL_(struct l_timeval *)]; struct l_timeval * timeout; char timeout_r_[PADR_(struct l_timeval *)]; }; -struct linux_newselect_args { - int nfds; char nfds_[PAD_(int)]; - fd_set * readfds; char readfds_[PAD_(fd_set *)]; - fd_set * writefds; char writefds_[PAD_(fd_set *)]; - fd_set * exceptfds; char exceptfds_[PAD_(fd_set *)]; - struct timeval * timeout; char timeout_[PAD_(struct timeval *)]; +struct linux_msync_args { + char addr_l_[PADL_(l_ulong)]; l_ulong addr; char addr_r_[PADR_(l_ulong)]; + char len_l_[PADL_(l_size_t)]; l_size_t len; char len_r_[PADR_(l_size_t)]; + char fl_l_[PADL_(l_int)]; l_int fl; char fl_r_[PADR_(l_int)]; }; -struct linux_msync_args { - caddr_t addr; char addr_[PAD_(caddr_t)]; - int len; char len_[PAD_(int)]; - int fl; char fl_[PAD_(int)]; +struct linux_getsid_args { + char pid_l_[PADL_(l_pid_t)]; l_pid_t pid; char pid_r_[PADR_(l_pid_t)]; }; -struct linux_getsid_args { - linux_pid_t pid; char pid_[PAD_(linux_pid_t)]; +struct linux_fdatasync_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; }; -struct linux_fdatasync_args { - int fd; char fd_[PAD_(int)]; +struct linux_sysctl_args { + char args_l_[PADL_(struct l___sysctl_args *)]; struct l___sysctl_args * args; char args_r_[PADR_(struct l___sysctl_args *)]; }; -struct linux_sysctl_args { - register_t dummy; +struct linux_sched_setscheduler_args { + char pid_l_[PADL_(l_pid_t)]; l_pid_t pid; char pid_r_[PADR_(l_pid_t)]; + char policy_l_[PADL_(l_int)]; l_int policy; char policy_r_[PADR_(l_int)]; + char param_l_[PADL_(struct l_sched_param *)]; struct l_sched_param * param; char param_r_[PADR_(struct l_sched_param *)]; }; -struct linux_sched_setscheduler_args { - pid_t pid; char pid_[PAD_(pid_t)]; - int policy; char policy_[PAD_(int)]; - const struct sched_param * param; char param_[PAD_(const struct sched_param *)]; +struct linux_sched_getscheduler_args { + char pid_l_[PADL_(l_pid_t)]; l_pid_t pid; char pid_r_[PADR_(l_pid_t)]; }; -struct linux_sched_getscheduler_args { - pid_t pid; char pid_[PAD_(pid_t)]; +struct linux_sched_get_priority_max_args { + char policy_l_[PADL_(l_int)]; l_int policy; char policy_r_[PADR_(l_int)]; }; -struct linux_sched_get_priority_max_args { - int policy; char policy_[PAD_(int)]; +struct linux_sched_get_priority_min_args { + char policy_l_[PADL_(l_int)]; l_int policy; char policy_r_[PADR_(l_int)]; }; -struct linux_sched_get_priority_min_args { - int policy; char policy_[PAD_(int)]; +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)]; + char new_len_l_[PADL_(l_ulong)]; l_ulong new_len; char new_len_r_[PADR_(l_ulong)]; + char flags_l_[PADL_(l_ulong)]; l_ulong flags; char flags_r_[PADR_(l_ulong)]; + char new_addr_l_[PADL_(l_ulong)]; l_ulong new_addr; char new_addr_r_[PADR_(l_ulong)]; }; -struct linux_mremap_args { - caddr_t addr; char addr_[PAD_(caddr_t)]; - int old_len; char old_len_[PAD_(int)]; - int new_len; char new_len_[PAD_(int)]; - int flags; char flags_[PAD_(int)]; +struct linux_setresuid16_args { + char ruid_l_[PADL_(l_uid16_t)]; l_uid16_t ruid; char ruid_r_[PADR_(l_uid16_t)]; + char euid_l_[PADL_(l_uid16_t)]; l_uid16_t euid; char euid_r_[PADR_(l_uid16_t)]; + char suid_l_[PADL_(l_uid16_t)]; l_uid16_t suid; char suid_r_[PADR_(l_uid16_t)]; }; -struct linux_getresuid_args { - linux_uid_t * ruid; char ruid_[PAD_(linux_uid_t *)]; - linux_uid_t * euid; char euid_[PAD_(linux_uid_t *)]; - linux_uid_t * suid; char suid_[PAD_(linux_uid_t *)]; +struct linux_getresuid16_args { + char ruid_l_[PADL_(l_uid16_t *)]; l_uid16_t * ruid; char ruid_r_[PADR_(l_uid16_t *)]; + char euid_l_[PADL_(l_uid16_t *)]; l_uid16_t * euid; char euid_r_[PADR_(l_uid16_t *)]; + char suid_l_[PADL_(l_uid16_t *)]; l_uid16_t * suid; char suid_r_[PADR_(l_uid16_t *)]; }; -struct linux_vm86_args { +struct linux_vm86_args { register_t dummy; }; -struct linux_query_module_args { +struct linux_query_module_args { register_t dummy; }; -struct linux_nfsservctl_args { +struct linux_nfsservctl_args { register_t dummy; }; -struct linux_getresgid_args { - linux_gid_t * rgid; char rgid_[PAD_(linux_gid_t *)]; - linux_gid_t * egid; char egid_[PAD_(linux_gid_t *)]; - linux_gid_t * sgid; char sgid_[PAD_(linux_gid_t *)]; +struct linux_setresgid16_args { + char rgid_l_[PADL_(l_gid16_t)]; l_gid16_t rgid; char rgid_r_[PADR_(l_gid16_t)]; + char egid_l_[PADL_(l_gid16_t)]; l_gid16_t egid; char egid_r_[PADR_(l_gid16_t)]; + char sgid_l_[PADL_(l_gid16_t)]; l_gid16_t sgid; char sgid_r_[PADR_(l_gid16_t)]; }; -struct linux_prctl_args { +struct linux_getresgid16_args { + char rgid_l_[PADL_(l_gid16_t *)]; l_gid16_t * rgid; char rgid_r_[PADR_(l_gid16_t *)]; + char egid_l_[PADL_(l_gid16_t *)]; l_gid16_t * egid; char egid_r_[PADR_(l_gid16_t *)]; + 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; }; -struct linux_rt_sigreturn_args { - struct linux_ucontext * ucp; char ucp_[PAD_(struct linux_ucontext *)]; +struct linux_rt_sigreturn_args { + char ucp_l_[PADL_(struct l_ucontext *)]; struct l_ucontext * ucp; char ucp_r_[PADR_(struct l_ucontext *)]; }; -struct linux_rt_sigaction_args { - int sig; char sig_[PAD_(int)]; - linux_sigaction_t * act; char act_[PAD_(linux_sigaction_t *)]; - linux_sigaction_t * oact; char oact_[PAD_(linux_sigaction_t *)]; - size_t sigsetsize; char sigsetsize_[PAD_(size_t)]; +struct linux_rt_sigaction_args { + char sig_l_[PADL_(l_int)]; l_int sig; char sig_r_[PADR_(l_int)]; + char act_l_[PADL_(l_sigaction_t *)]; l_sigaction_t * act; char act_r_[PADR_(l_sigaction_t *)]; + char oact_l_[PADL_(l_sigaction_t *)]; l_sigaction_t * oact; char oact_r_[PADR_(l_sigaction_t *)]; + char sigsetsize_l_[PADL_(l_size_t)]; l_size_t sigsetsize; char sigsetsize_r_[PADR_(l_size_t)]; }; -struct linux_rt_sigprocmask_args { - int how; char how_[PAD_(int)]; - linux_sigset_t * mask; char mask_[PAD_(linux_sigset_t *)]; - linux_sigset_t * omask; char omask_[PAD_(linux_sigset_t *)]; - size_t sigsetsize; char sigsetsize_[PAD_(size_t)]; +struct linux_rt_sigprocmask_args { + char how_l_[PADL_(l_int)]; l_int how; char how_r_[PADR_(l_int)]; + char mask_l_[PADL_(l_sigset_t *)]; l_sigset_t * mask; char mask_r_[PADR_(l_sigset_t *)]; + char omask_l_[PADL_(l_sigset_t *)]; l_sigset_t * omask; char omask_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_sigpending_args { +struct linux_rt_sigpending_args { register_t dummy; }; -struct linux_rt_sigtimedwait_args { +struct linux_rt_sigtimedwait_args { register_t dummy; }; -struct linux_rt_sigqueueinfo_args { +struct linux_rt_sigqueueinfo_args { register_t dummy; }; -struct linux_rt_sigsuspend_args { - linux_sigset_t * newset; char newset_[PAD_(linux_sigset_t *)]; - size_t sigsetsize; char sigsetsize_[PAD_(size_t)]; +struct linux_rt_sigsuspend_args { + char newset_l_[PADL_(l_sigset_t *)]; l_sigset_t * newset; char newset_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_pread_args { - int fd; char fd_[PAD_(int)]; - char * buf; char buf_[PAD_(char *)]; - size_t nbyte; char nbyte_[PAD_(size_t)]; - off_t offset; char offset_[PAD_(off_t)]; +struct linux_pread_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char buf_l_[PADL_(char *)]; char * buf; char buf_r_[PADR_(char *)]; + char nbyte_l_[PADL_(l_size_t)]; l_size_t nbyte; char nbyte_r_[PADR_(l_size_t)]; + char offset_l_[PADL_(l_loff_t)]; l_loff_t offset; char offset_r_[PADR_(l_loff_t)]; }; -struct linux_pwrite_args { - int fd; char fd_[PAD_(int)]; - const char * buf; char buf_[PAD_(const char *)]; - size_t nbyte; char nbyte_[PAD_(size_t)]; - off_t offset; char offset_[PAD_(off_t)]; +struct linux_pwrite_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char buf_l_[PADL_(char *)]; char * buf; char buf_r_[PADR_(char *)]; + char nbyte_l_[PADL_(l_size_t)]; l_size_t nbyte; char nbyte_r_[PADR_(l_size_t)]; + char offset_l_[PADL_(l_loff_t)]; l_loff_t offset; char offset_r_[PADR_(l_loff_t)]; }; -struct linux_chown_args { - char * path; char path_[PAD_(char *)]; - int uid; char uid_[PAD_(int)]; - int gid; char gid_[PAD_(int)]; +struct linux_chown16_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char uid_l_[PADL_(l_uid16_t)]; l_uid16_t uid; char uid_r_[PADR_(l_uid16_t)]; + char gid_l_[PADL_(l_gid16_t)]; l_gid16_t gid; char gid_r_[PADR_(l_gid16_t)]; }; -struct linux_getcwd_args { - char * buf; char buf_[PAD_(char *)]; - unsigned long bufsize; char bufsize_[PAD_(unsigned long)]; +struct linux_getcwd_args { + char buf_l_[PADL_(char *)]; char * buf; char buf_r_[PADR_(char *)]; + char bufsize_l_[PADL_(l_ulong)]; l_ulong bufsize; char bufsize_r_[PADR_(l_ulong)]; }; -struct linux_capget_args { +struct linux_capget_args { register_t dummy; }; -struct linux_capset_args { +struct linux_capset_args { register_t dummy; }; -struct linux_sigaltstack_args { - const linux_stack_t * uss; char uss_[PAD_(const linux_stack_t *)]; - linux_stack_t * uoss; char uoss_[PAD_(linux_stack_t *)]; +struct linux_sigaltstack_args { + char uss_l_[PADL_(l_stack_t *)]; l_stack_t * uss; char uss_r_[PADR_(l_stack_t *)]; + char uoss_l_[PADL_(l_stack_t *)]; l_stack_t * uoss; char uoss_r_[PADR_(l_stack_t *)]; }; -struct linux_sendfile_args { +struct linux_sendfile_args { register_t dummy; }; -struct linux_getpmsg_args { +struct linux_vfork_args { register_t dummy; }; -struct linux_putpmsg_args { - register_t dummy; +struct linux_getrlimit_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 *)]; }; -struct linux_vfork_args { - register_t dummy; +struct linux_mmap2_args { + char addr_l_[PADL_(l_ulong)]; l_ulong addr; char addr_r_[PADR_(l_ulong)]; + char len_l_[PADL_(l_ulong)]; l_ulong len; char len_r_[PADR_(l_ulong)]; + char prot_l_[PADL_(l_ulong)]; l_ulong prot; char prot_r_[PADR_(l_ulong)]; + char flags_l_[PADL_(l_ulong)]; l_ulong flags; char flags_r_[PADR_(l_ulong)]; + char fd_l_[PADL_(l_ulong)]; l_ulong fd; char fd_r_[PADR_(l_ulong)]; + char pgoff_l_[PADL_(l_ulong)]; l_ulong pgoff; char pgoff_r_[PADR_(l_ulong)]; }; -struct linux_ugetrlimit_args { - register_t dummy; +struct linux_truncate64_args { + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char length_l_[PADL_(l_loff_t)]; l_loff_t length; char length_r_[PADR_(l_loff_t)]; }; -struct linux_mmap2_args { - register_t dummy; +struct linux_ftruncate64_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char length_l_[PADL_(l_loff_t)]; l_loff_t length; char length_r_[PADR_(l_loff_t)]; }; -struct linux_truncate64_args { - register_t dummy; +struct linux_stat64_args { + char filename_l_[PADL_(char *)]; char * filename; char filename_r_[PADR_(char *)]; + char statbuf_l_[PADL_(struct l_stat64 *)]; struct l_stat64 * statbuf; char statbuf_r_[PADR_(struct l_stat64 *)]; + char flags_l_[PADL_(l_long)]; l_long flags; char flags_r_[PADR_(l_long)]; }; -struct linux_ftruncate64_args { - register_t dummy; +struct linux_lstat64_args { + char filename_l_[PADL_(char *)]; char * filename; char filename_r_[PADR_(char *)]; + char statbuf_l_[PADL_(struct l_stat64 *)]; struct l_stat64 * statbuf; char statbuf_r_[PADR_(struct l_stat64 *)]; + char flags_l_[PADL_(l_long)]; l_long flags; char flags_r_[PADR_(l_long)]; +}; +struct linux_fstat64_args { + char fd_l_[PADL_(l_ulong)]; l_ulong fd; char fd_r_[PADR_(l_ulong)]; + char statbuf_l_[PADL_(struct l_stat64 *)]; struct l_stat64 * statbuf; char statbuf_r_[PADR_(struct l_stat64 *)]; + char flags_l_[PADL_(l_long)]; l_long flags; char flags_r_[PADR_(l_long)]; }; -struct linux_stat64_args { +struct linux_lchown_args { + char filename_l_[PADL_(char *)]; char * filename; char filename_r_[PADR_(char *)]; + char user_l_[PADL_(l_uid_t)]; l_uid_t user; char user_r_[PADR_(l_uid_t)]; + char group_l_[PADL_(l_gid_t)]; l_gid_t group; char group_r_[PADR_(l_gid_t)]; +}; +struct linux_getuid_args { register_t dummy; }; -struct linux_lstat64_args { +struct linux_getgid_args { register_t dummy; }; -struct linux_fstat64_args { +struct linux_getgroups_args { + char gidsetsize_l_[PADL_(l_int)]; l_int gidsetsize; char gidsetsize_r_[PADR_(l_int)]; + char grouplist_l_[PADL_(l_gid_t *)]; l_gid_t * grouplist; char grouplist_r_[PADR_(l_gid_t *)]; +}; +struct linux_setgroups_args { + char gidsetsize_l_[PADL_(l_int)]; l_int gidsetsize; char gidsetsize_r_[PADR_(l_int)]; + char grouplist_l_[PADL_(l_gid_t *)]; l_gid_t * grouplist; char grouplist_r_[PADR_(l_gid_t *)]; +}; +struct linux_fchown_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char user_l_[PADL_(l_uid_t)]; l_uid_t user; char user_r_[PADR_(l_uid_t)]; + char group_l_[PADL_(l_gid_t)]; l_gid_t group; char group_r_[PADR_(l_gid_t)]; +}; +struct linux_chown_args { + char filename_l_[PADL_(char *)]; char * filename; char filename_r_[PADR_(char *)]; + char user_l_[PADL_(l_uid_t)]; l_uid_t user; char user_r_[PADR_(l_uid_t)]; + char group_l_[PADL_(l_gid_t)]; l_gid_t group; char group_r_[PADR_(l_gid_t)]; +}; +struct linux_setfsuid_args { + char uid_l_[PADL_(l_uid_t)]; l_uid_t uid; char uid_r_[PADR_(l_uid_t)]; +}; +struct linux_setfsgid_args { + char gid_l_[PADL_(l_gid_t)]; l_gid_t gid; char gid_r_[PADR_(l_gid_t)]; +}; +struct linux_pivot_root_args { + char new_root_l_[PADL_(char *)]; char * new_root; char new_root_r_[PADR_(char *)]; + char put_old_l_[PADL_(char *)]; char * put_old; char put_old_r_[PADR_(char *)]; +}; +struct linux_mincore_args { + char start_l_[PADL_(l_ulong)]; l_ulong start; char start_r_[PADR_(l_ulong)]; + char len_l_[PADL_(l_size_t)]; l_size_t len; char len_r_[PADR_(l_size_t)]; + char vec_l_[PADL_(u_char *)]; u_char * vec; char vec_r_[PADR_(u_char *)]; +}; +struct linux_madvise_args { register_t dummy; }; -int linux_setup __P((struct proc *, struct linux_setup_args *)); +struct linux_getdents64_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char dirent_l_[PADL_(void *)]; void * dirent; char dirent_r_[PADR_(void *)]; + char count_l_[PADL_(l_uint)]; l_uint count; char count_r_[PADR_(l_uint)]; +}; +struct linux_fcntl64_args { + char fd_l_[PADL_(l_uint)]; l_uint fd; char fd_r_[PADR_(l_uint)]; + char cmd_l_[PADL_(l_uint)]; l_uint cmd; char cmd_r_[PADR_(l_uint)]; + char arg_l_[PADL_(l_ulong)]; l_ulong arg; char arg_r_[PADR_(l_ulong)]; +}; int linux_fork __P((struct proc *, struct linux_fork_args *)); int linux_open __P((struct proc *, struct linux_open_args *)); int linux_waitpid __P((struct proc *, struct linux_waitpid_args *)); @@ -571,50 +654,51 @@ int linux_chdir __P((struct proc *, struct linux_chdir_args *)); int linux_time __P((struct proc *, struct linux_time_args *)); int linux_mknod __P((struct proc *, struct linux_mknod_args *)); int linux_chmod __P((struct proc *, struct linux_chmod_args *)); -int linux_lchown __P((struct proc *, struct linux_lchown_args *)); -int linux_break __P((struct proc *, struct linux_break_args *)); +int linux_lchown16 __P((struct proc *, struct linux_lchown16_args *)); int linux_stat __P((struct proc *, struct linux_stat_args *)); int linux_lseek __P((struct proc *, struct linux_lseek_args *)); +int linux_getpid __P((struct proc *, struct linux_getpid_args *)); int linux_mount __P((struct proc *, struct linux_mount_args *)); -int linux_umount __P((struct proc *, struct linux_umount_args *)); +int linux_oldumount __P((struct proc *, struct linux_oldumount_args *)); +int linux_setuid16 __P((struct proc *, struct linux_setuid16_args *)); +int linux_getuid16 __P((struct proc *, struct linux_getuid16_args *)); int linux_stime __P((struct proc *, struct linux_stime_args *)); int linux_ptrace __P((struct proc *, struct linux_ptrace_args *)); int linux_alarm __P((struct proc *, struct linux_alarm_args *)); int linux_fstat __P((struct proc *, struct linux_fstat_args *)); int linux_pause __P((struct proc *, struct linux_pause_args *)); int linux_utime __P((struct proc *, struct linux_utime_args *)); -int linux_stty __P((struct proc *, struct linux_stty_args *)); -int linux_gtty __P((struct proc *, struct linux_gtty_args *)); int linux_access __P((struct proc *, struct linux_access_args *)); int linux_nice __P((struct proc *, struct linux_nice_args *)); -int linux_ftime __P((struct proc *, struct linux_ftime_args *)); int linux_kill __P((struct proc *, struct linux_kill_args *)); int linux_rename __P((struct proc *, struct linux_rename_args *)); int linux_mkdir __P((struct proc *, struct linux_mkdir_args *)); int linux_rmdir __P((struct proc *, struct linux_rmdir_args *)); int linux_pipe __P((struct proc *, struct linux_pipe_args *)); int linux_times __P((struct proc *, struct linux_times_args *)); -int linux_prof __P((struct proc *, struct linux_prof_args *)); int linux_brk __P((struct proc *, struct linux_brk_args *)); +int linux_setgid16 __P((struct proc *, struct linux_setgid16_args *)); +int linux_getgid16 __P((struct proc *, struct linux_getgid16_args *)); int linux_signal __P((struct proc *, struct linux_signal_args *)); -int linux_umount2 __P((struct proc *, struct linux_umount2_args *)); -int linux_lock __P((struct proc *, struct linux_lock_args *)); +int linux_geteuid16 __P((struct proc *, struct linux_geteuid16_args *)); +int linux_getegid16 __P((struct proc *, struct linux_getegid16_args *)); +int linux_umount __P((struct proc *, struct linux_umount_args *)); int linux_ioctl __P((struct proc *, struct linux_ioctl_args *)); int linux_fcntl __P((struct proc *, struct linux_fcntl_args *)); -int linux_mpx __P((struct proc *, struct linux_mpx_args *)); -int linux_ulimit __P((struct proc *, struct linux_ulimit_args *)); int linux_olduname __P((struct proc *, struct linux_olduname_args *)); int linux_ustat __P((struct proc *, struct linux_ustat_args *)); int linux_sigaction __P((struct proc *, struct linux_sigaction_args *)); -int linux_siggetmask __P((struct proc *, struct linux_siggetmask_args *)); -int linux_sigsetmask __P((struct proc *, struct linux_sigsetmask_args *)); +int linux_sgetmask __P((struct proc *, struct linux_sgetmask_args *)); +int linux_ssetmask __P((struct proc *, struct linux_ssetmask_args *)); +int linux_setreuid16 __P((struct proc *, struct linux_setreuid16_args *)); +int linux_setregid16 __P((struct proc *, struct linux_setregid16_args *)); int linux_sigsuspend __P((struct proc *, struct linux_sigsuspend_args *)); int linux_sigpending __P((struct proc *, struct linux_sigpending_args *)); int linux_setrlimit __P((struct proc *, struct linux_setrlimit_args *)); -int linux_getrlimit __P((struct proc *, struct linux_getrlimit_args *)); -int linux_getgroups __P((struct proc *, struct linux_getgroups_args *)); -int linux_setgroups __P((struct proc *, struct linux_setgroups_args *)); -int linux_select __P((struct proc *, struct linux_select_args *)); +int linux_old_getrlimit __P((struct proc *, struct linux_old_getrlimit_args *)); +int linux_getgroups16 __P((struct proc *, struct linux_getgroups16_args *)); +int linux_setgroups16 __P((struct proc *, struct linux_setgroups16_args *)); +int linux_old_select __P((struct proc *, struct linux_old_select_args *)); int linux_symlink __P((struct proc *, struct linux_symlink_args *)); int linux_readlink __P((struct proc *, struct linux_readlink_args *)); int linux_uselib __P((struct proc *, struct linux_uselib_args *)); @@ -626,7 +710,7 @@ int linux_statfs __P((struct proc *, struct linux_statfs_args *)); int linux_fstatfs __P((struct proc *, struct linux_fstatfs_args *)); int linux_ioperm __P((struct proc *, struct linux_ioperm_args *)); int linux_socketcall __P((struct proc *, struct linux_socketcall_args *)); -int linux_ksyslog __P((struct proc *, struct linux_ksyslog_args *)); +int linux_syslog __P((struct proc *, struct linux_syslog_args *)); int linux_setitimer __P((struct proc *, struct linux_setitimer_args *)); int linux_getitimer __P((struct proc *, struct linux_getitimer_args *)); int linux_newstat __P((struct proc *, struct linux_newstat_args *)); @@ -635,7 +719,6 @@ int linux_newfstat __P((struct proc *, struct linux_newfstat_args *)); int linux_uname __P((struct proc *, struct linux_uname_args *)); int linux_iopl __P((struct proc *, struct linux_iopl_args *)); int linux_vhangup __P((struct proc *, struct linux_vhangup_args *)); -int linux_idle __P((struct proc *, struct linux_idle_args *)); int linux_vm86old __P((struct proc *, struct linux_vm86old_args *)); int linux_wait4 __P((struct proc *, struct linux_wait4_args *)); int linux_swapoff __P((struct proc *, struct linux_swapoff_args *)); @@ -656,12 +739,11 @@ int linux_getpgid __P((struct proc *, struct linux_getpgid_args *)); int linux_bdflush __P((struct proc *, struct linux_bdflush_args *)); int linux_sysfs __P((struct proc *, struct linux_sysfs_args *)); int linux_personality __P((struct proc *, struct linux_personality_args *)); -int linux_afs_syscall __P((struct proc *, struct linux_afs_syscall_args *)); -int linux_setfsuid __P((struct proc *, struct linux_setfsuid_args *)); -int linux_setfsgid __P((struct proc *, struct linux_setfsgid_args *)); +int linux_setfsuid16 __P((struct proc *, struct linux_setfsuid16_args *)); +int linux_setfsgid16 __P((struct proc *, struct linux_setfsgid16_args *)); int linux_llseek __P((struct proc *, struct linux_llseek_args *)); int linux_getdents __P((struct proc *, struct linux_getdents_args *)); -int linux_newselect __P((struct proc *, struct linux_newselect_args *)); +int linux_select __P((struct proc *, struct linux_select_args *)); int linux_msync __P((struct proc *, struct linux_msync_args *)); int linux_getsid __P((struct proc *, struct linux_getsid_args *)); int linux_fdatasync __P((struct proc *, struct linux_fdatasync_args *)); @@ -671,11 +753,13 @@ int linux_sched_getscheduler __P((struct proc *, struct linux_sched_getscheduler int linux_sched_get_priority_max __P((struct proc *, struct linux_sched_get_priority_max_args *)); int linux_sched_get_priority_min __P((struct proc *, struct linux_sched_get_priority_min_args *)); int linux_mremap __P((struct proc *, struct linux_mremap_args *)); -int linux_getresuid __P((struct proc *, struct linux_getresuid_args *)); +int linux_setresuid16 __P((struct proc *, struct linux_setresuid16_args *)); +int linux_getresuid16 __P((struct proc *, struct linux_getresuid16_args *)); int linux_vm86 __P((struct proc *, struct linux_vm86_args *)); int linux_query_module __P((struct proc *, struct linux_query_module_args *)); int linux_nfsservctl __P((struct proc *, struct linux_nfsservctl_args *)); -int linux_getresgid __P((struct proc *, struct linux_getresgid_args *)); +int linux_setresgid16 __P((struct proc *, struct linux_setresgid16_args *)); +int linux_getresgid16 __P((struct proc *, struct linux_getresgid16_args *)); int linux_prctl __P((struct proc *, struct linux_prctl_args *)); int linux_rt_sigreturn __P((struct proc *, struct linux_rt_sigreturn_args *)); int linux_rt_sigaction __P((struct proc *, struct linux_rt_sigaction_args *)); @@ -686,22 +770,34 @@ int linux_rt_sigqueueinfo __P((struct proc *, struct linux_rt_sigqueueinfo_args int linux_rt_sigsuspend __P((struct proc *, struct linux_rt_sigsuspend_args *)); int linux_pread __P((struct proc *, struct linux_pread_args *)); int linux_pwrite __P((struct proc *, struct linux_pwrite_args *)); -int linux_chown __P((struct proc *, struct linux_chown_args *)); +int linux_chown16 __P((struct proc *, struct linux_chown16_args *)); int linux_getcwd __P((struct proc *, struct linux_getcwd_args *)); int linux_capget __P((struct proc *, struct linux_capget_args *)); int linux_capset __P((struct proc *, struct linux_capset_args *)); int linux_sigaltstack __P((struct proc *, struct linux_sigaltstack_args *)); int linux_sendfile __P((struct proc *, struct linux_sendfile_args *)); -int linux_getpmsg __P((struct proc *, struct linux_getpmsg_args *)); -int linux_putpmsg __P((struct proc *, struct linux_putpmsg_args *)); int linux_vfork __P((struct proc *, struct linux_vfork_args *)); -int linux_ugetrlimit __P((struct proc *, struct linux_ugetrlimit_args *)); +int linux_getrlimit __P((struct proc *, struct linux_getrlimit_args *)); int linux_mmap2 __P((struct proc *, struct linux_mmap2_args *)); int linux_truncate64 __P((struct proc *, struct linux_truncate64_args *)); int linux_ftruncate64 __P((struct proc *, struct linux_ftruncate64_args *)); int linux_stat64 __P((struct proc *, struct linux_stat64_args *)); int linux_lstat64 __P((struct proc *, struct linux_lstat64_args *)); int linux_fstat64 __P((struct proc *, struct linux_fstat64_args *)); +int linux_lchown __P((struct proc *, struct linux_lchown_args *)); +int linux_getuid __P((struct proc *, struct linux_getuid_args *)); +int linux_getgid __P((struct proc *, struct linux_getgid_args *)); +int linux_getgroups __P((struct proc *, struct linux_getgroups_args *)); +int linux_setgroups __P((struct proc *, struct linux_setgroups_args *)); +int linux_fchown __P((struct proc *, struct linux_fchown_args *)); +int linux_chown __P((struct proc *, struct linux_chown_args *)); +int linux_setfsuid __P((struct proc *, struct linux_setfsuid_args *)); +int linux_setfsgid __P((struct proc *, struct linux_setfsgid_args *)); +int linux_pivot_root __P((struct proc *, struct linux_pivot_root_args *)); +int linux_mincore __P((struct proc *, struct linux_mincore_args *)); +int linux_madvise __P((struct proc *, struct linux_madvise_args *)); +int linux_getdents64 __P((struct proc *, struct linux_getdents64_args *)); +int linux_fcntl64 __P((struct proc *, struct linux_fcntl64_args *)); #ifdef COMPAT_43 @@ -709,5 +805,7 @@ int linux_fstat64 __P((struct proc *, struct linux_fstat64_args *)); #endif /* COMPAT_43 */ #undef PAD_ +#undef PADL_ +#undef PADR_ #endif /* !_LINUX_SYSPROTO_H_ */ diff --git a/sys/i386/linux/linux_syscall.h b/sys/i386/linux/linux_syscall.h index c4e3dad..19f4a92 100644 --- a/sys/i386/linux/linux_syscall.h +++ b/sys/i386/linux/linux_syscall.h @@ -3,10 +3,9 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: src/sys/i386/linux/syscalls.master,v 1.40 2001/04/01 06:37:40 alc Exp + * created from FreeBSD: src/sys/i386/linux/syscalls.master,v 1.43 2001/09/08 18:48:40 marcel Exp */ -#define LINUX_SYS_linux_setup 0 #define LINUX_SYS_exit 1 #define LINUX_SYS_linux_fork 2 #define LINUX_SYS_read 3 @@ -22,26 +21,22 @@ #define LINUX_SYS_linux_time 13 #define LINUX_SYS_linux_mknod 14 #define LINUX_SYS_linux_chmod 15 -#define LINUX_SYS_linux_lchown 16 -#define LINUX_SYS_linux_break 17 +#define LINUX_SYS_linux_lchown16 16 #define LINUX_SYS_linux_stat 18 #define LINUX_SYS_linux_lseek 19 -#define LINUX_SYS_getpid 20 +#define LINUX_SYS_linux_getpid 20 #define LINUX_SYS_linux_mount 21 -#define LINUX_SYS_linux_umount 22 -#define LINUX_SYS_setuid 23 -#define LINUX_SYS_getuid 24 +#define LINUX_SYS_linux_oldumount 22 +#define LINUX_SYS_linux_setuid16 23 +#define LINUX_SYS_linux_getuid16 24 #define LINUX_SYS_linux_stime 25 #define LINUX_SYS_linux_ptrace 26 #define LINUX_SYS_linux_alarm 27 #define LINUX_SYS_linux_fstat 28 #define LINUX_SYS_linux_pause 29 #define LINUX_SYS_linux_utime 30 -#define LINUX_SYS_linux_stty 31 -#define LINUX_SYS_linux_gtty 32 #define LINUX_SYS_linux_access 33 #define LINUX_SYS_linux_nice 34 -#define LINUX_SYS_linux_ftime 35 #define LINUX_SYS_sync 36 #define LINUX_SYS_linux_kill 37 #define LINUX_SYS_linux_rename 38 @@ -50,21 +45,17 @@ #define LINUX_SYS_dup 41 #define LINUX_SYS_linux_pipe 42 #define LINUX_SYS_linux_times 43 -#define LINUX_SYS_linux_prof 44 #define LINUX_SYS_linux_brk 45 -#define LINUX_SYS_setgid 46 -#define LINUX_SYS_getgid 47 +#define LINUX_SYS_linux_setgid16 46 +#define LINUX_SYS_linux_getgid16 47 #define LINUX_SYS_linux_signal 48 -#define LINUX_SYS_geteuid 49 -#define LINUX_SYS_getegid 50 +#define LINUX_SYS_linux_geteuid16 49 +#define LINUX_SYS_linux_getegid16 50 #define LINUX_SYS_acct 51 -#define LINUX_SYS_linux_umount2 52 -#define LINUX_SYS_linux_lock 53 +#define LINUX_SYS_linux_umount 52 #define LINUX_SYS_linux_ioctl 54 #define LINUX_SYS_linux_fcntl 55 -#define LINUX_SYS_linux_mpx 56 #define LINUX_SYS_setpgid 57 -#define LINUX_SYS_linux_ulimit 58 #define LINUX_SYS_linux_olduname 59 #define LINUX_SYS_umask 60 #define LINUX_SYS_chroot 61 @@ -74,21 +65,21 @@ #define LINUX_SYS_getpgrp 65 #define LINUX_SYS_setsid 66 #define LINUX_SYS_linux_sigaction 67 -#define LINUX_SYS_linux_siggetmask 68 -#define LINUX_SYS_linux_sigsetmask 69 -#define LINUX_SYS_setreuid 70 -#define LINUX_SYS_setregid 71 +#define LINUX_SYS_linux_sgetmask 68 +#define LINUX_SYS_linux_ssetmask 69 +#define LINUX_SYS_linux_setreuid16 70 +#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_setrlimit 75 -#define LINUX_SYS_linux_getrlimit 76 +#define LINUX_SYS_linux_old_getrlimit 76 #define LINUX_SYS_getrusage 77 #define LINUX_SYS_gettimeofday 78 #define LINUX_SYS_settimeofday 79 -#define LINUX_SYS_linux_getgroups 80 -#define LINUX_SYS_linux_setgroups 81 -#define LINUX_SYS_linux_select 82 +#define LINUX_SYS_linux_getgroups16 80 +#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_readlink 85 @@ -104,12 +95,11 @@ #define LINUX_SYS_fchown 95 #define LINUX_SYS_getpriority 96 #define LINUX_SYS_setpriority 97 -#define LINUX_SYS_profil 98 #define LINUX_SYS_linux_statfs 99 #define LINUX_SYS_linux_fstatfs 100 #define LINUX_SYS_linux_ioperm 101 #define LINUX_SYS_linux_socketcall 102 -#define LINUX_SYS_linux_ksyslog 103 +#define LINUX_SYS_linux_syslog 103 #define LINUX_SYS_linux_setitimer 104 #define LINUX_SYS_linux_getitimer 105 #define LINUX_SYS_linux_newstat 106 @@ -118,7 +108,6 @@ #define LINUX_SYS_linux_uname 109 #define LINUX_SYS_linux_iopl 110 #define LINUX_SYS_linux_vhangup 111 -#define LINUX_SYS_linux_idle 112 #define LINUX_SYS_linux_vm86old 113 #define LINUX_SYS_linux_wait4 114 #define LINUX_SYS_linux_swapoff 115 @@ -143,12 +132,11 @@ #define LINUX_SYS_linux_bdflush 134 #define LINUX_SYS_linux_sysfs 135 #define LINUX_SYS_linux_personality 136 -#define LINUX_SYS_linux_afs_syscall 137 -#define LINUX_SYS_linux_setfsuid 138 -#define LINUX_SYS_linux_setfsgid 139 +#define LINUX_SYS_linux_setfsuid16 138 +#define LINUX_SYS_linux_setfsgid16 139 #define LINUX_SYS_linux_llseek 140 #define LINUX_SYS_linux_getdents 141 -#define LINUX_SYS_linux_newselect 142 +#define LINUX_SYS_linux_select 142 #define LINUX_SYS_flock 143 #define LINUX_SYS_linux_msync 144 #define LINUX_SYS_readv 145 @@ -170,14 +158,14 @@ #define LINUX_SYS_sched_rr_get_interval 161 #define LINUX_SYS_nanosleep 162 #define LINUX_SYS_linux_mremap 163 -#define LINUX_SYS_setresuid 164 -#define LINUX_SYS_linux_getresuid 165 +#define LINUX_SYS_linux_setresuid16 164 +#define LINUX_SYS_linux_getresuid16 165 #define LINUX_SYS_linux_vm86 166 #define LINUX_SYS_linux_query_module 167 #define LINUX_SYS_poll 168 #define LINUX_SYS_linux_nfsservctl 169 -#define LINUX_SYS_setresgid 170 -#define LINUX_SYS_linux_getresgid 171 +#define LINUX_SYS_linux_setresgid16 170 +#define LINUX_SYS_linux_getresgid16 171 #define LINUX_SYS_linux_prctl 172 #define LINUX_SYS_linux_rt_sigreturn 173 #define LINUX_SYS_linux_rt_sigaction 174 @@ -188,20 +176,42 @@ #define LINUX_SYS_linux_rt_sigsuspend 179 #define LINUX_SYS_linux_pread 180 #define LINUX_SYS_linux_pwrite 181 -#define LINUX_SYS_linux_chown 182 +#define LINUX_SYS_linux_chown16 182 #define LINUX_SYS_linux_getcwd 183 #define LINUX_SYS_linux_capget 184 #define LINUX_SYS_linux_capset 185 #define LINUX_SYS_linux_sigaltstack 186 #define LINUX_SYS_linux_sendfile 187 -#define LINUX_SYS_linux_getpmsg 188 -#define LINUX_SYS_linux_putpmsg 189 #define LINUX_SYS_linux_vfork 190 -#define LINUX_SYS_linux_ugetrlimit 191 +#define LINUX_SYS_linux_getrlimit 191 #define LINUX_SYS_linux_mmap2 192 #define LINUX_SYS_linux_truncate64 193 #define LINUX_SYS_linux_ftruncate64 194 #define LINUX_SYS_linux_stat64 195 #define LINUX_SYS_linux_lstat64 196 #define LINUX_SYS_linux_fstat64 197 -#define LINUX_SYS_MAXSYSCALL 198 +#define LINUX_SYS_linux_lchown 198 +#define LINUX_SYS_linux_getuid 199 +#define LINUX_SYS_linux_getgid 200 +#define LINUX_SYS_geteuid 201 +#define LINUX_SYS_getegid 202 +#define LINUX_SYS_setreuid 203 +#define LINUX_SYS_setregid 204 +#define LINUX_SYS_linux_getgroups 205 +#define LINUX_SYS_linux_setgroups 206 +#define LINUX_SYS_linux_fchown 207 +#define LINUX_SYS_setresuid 208 +#define LINUX_SYS_getresuid 209 +#define LINUX_SYS_setresgid 210 +#define LINUX_SYS_getresgid 211 +#define LINUX_SYS_linux_chown 212 +#define LINUX_SYS_setuid 213 +#define LINUX_SYS_setgid 214 +#define LINUX_SYS_linux_setfsuid 215 +#define LINUX_SYS_linux_setfsgid 216 +#define LINUX_SYS_linux_pivot_root 217 +#define LINUX_SYS_linux_mincore 218 +#define LINUX_SYS_linux_madvise 219 +#define LINUX_SYS_linux_getdents64 220 +#define LINUX_SYS_linux_fcntl64 221 +#define LINUX_SYS_MAXSYSCALL 222 diff --git a/sys/i386/linux/linux_sysent.c b/sys/i386/linux/linux_sysent.c index 0c96903..de2af45 100644 --- a/sys/i386/linux/linux_sysent.c +++ b/sys/i386/linux/linux_sysent.c @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: src/sys/i386/linux/syscalls.master,v 1.40 2001/04/01 06:37:40 alc Exp + * created from FreeBSD: src/sys/i386/linux/syscalls.master,v 1.43 2001/09/08 18:48:40 marcel Exp */ #include "opt_compat.h" @@ -17,9 +17,9 @@ /* The casts are bogus but will do for now. */ struct sysent linux_sysent[] = { - { 0, (sy_call_t *)linux_setup }, /* 0 = linux_setup */ - { AS(sys_exit_args), (sy_call_t *)sys_exit }, /* 1 = exit */ - { 0, (sy_call_t *)linux_fork }, /* 2 = linux_fork */ + { 0, (sy_call_t *)nosys }, /* 0 = setup */ + { SYF_MPSAFE | AS(sys_exit_args), (sy_call_t *)sys_exit }, /* 1 = exit */ + { SYF_MPSAFE | 0, (sy_call_t *)linux_fork }, /* 2 = linux_fork */ { AS(read_args), (sy_call_t *)read }, /* 3 = read */ { AS(write_args), (sy_call_t *)write }, /* 4 = write */ { AS(linux_open_args), (sy_call_t *)linux_open }, /* 5 = linux_open */ @@ -33,26 +33,26 @@ struct sysent linux_sysent[] = { { AS(linux_time_args), (sy_call_t *)linux_time }, /* 13 = linux_time */ { AS(linux_mknod_args), (sy_call_t *)linux_mknod }, /* 14 = linux_mknod */ { AS(linux_chmod_args), (sy_call_t *)linux_chmod }, /* 15 = linux_chmod */ - { AS(linux_lchown_args), (sy_call_t *)linux_lchown }, /* 16 = linux_lchown */ - { AS(linux_break_args), (sy_call_t *)linux_break }, /* 17 = linux_break */ + { AS(linux_lchown16_args), (sy_call_t *)linux_lchown16 }, /* 16 = linux_lchown16 */ + { 0, (sy_call_t *)nosys }, /* 17 = break */ { AS(linux_stat_args), (sy_call_t *)linux_stat }, /* 18 = linux_stat */ { AS(linux_lseek_args), (sy_call_t *)linux_lseek }, /* 19 = linux_lseek */ - { 0, (sy_call_t *)getpid }, /* 20 = getpid */ + { 0, (sy_call_t *)linux_getpid }, /* 20 = linux_getpid */ { AS(linux_mount_args), (sy_call_t *)linux_mount }, /* 21 = linux_mount */ - { AS(linux_umount_args), (sy_call_t *)linux_umount }, /* 22 = linux_umount */ - { AS(setuid_args), (sy_call_t *)setuid }, /* 23 = setuid */ - { 0, (sy_call_t *)getuid }, /* 24 = getuid */ + { AS(linux_oldumount_args), (sy_call_t *)linux_oldumount }, /* 22 = linux_oldumount */ + { AS(linux_setuid16_args), (sy_call_t *)linux_setuid16 }, /* 23 = linux_setuid16 */ + { 0, (sy_call_t *)linux_getuid16 }, /* 24 = linux_getuid16 */ { 0, (sy_call_t *)linux_stime }, /* 25 = linux_stime */ { 0, (sy_call_t *)linux_ptrace }, /* 26 = linux_ptrace */ { AS(linux_alarm_args), (sy_call_t *)linux_alarm }, /* 27 = linux_alarm */ { AS(linux_fstat_args), (sy_call_t *)linux_fstat }, /* 28 = linux_fstat */ { 0, (sy_call_t *)linux_pause }, /* 29 = linux_pause */ { AS(linux_utime_args), (sy_call_t *)linux_utime }, /* 30 = linux_utime */ - { 0, (sy_call_t *)linux_stty }, /* 31 = linux_stty */ - { 0, (sy_call_t *)linux_gtty }, /* 32 = linux_gtty */ + { 0, (sy_call_t *)nosys }, /* 31 = stty */ + { 0, (sy_call_t *)nosys }, /* 32 = gtty */ { AS(linux_access_args), (sy_call_t *)linux_access }, /* 33 = linux_access */ { AS(linux_nice_args), (sy_call_t *)linux_nice }, /* 34 = linux_nice */ - { 0, (sy_call_t *)linux_ftime }, /* 35 = linux_ftime */ + { 0, (sy_call_t *)nosys }, /* 35 = ftime */ { 0, (sy_call_t *)sync }, /* 36 = sync */ { AS(linux_kill_args), (sy_call_t *)linux_kill }, /* 37 = linux_kill */ { AS(linux_rename_args), (sy_call_t *)linux_rename }, /* 38 = linux_rename */ @@ -61,21 +61,21 @@ struct sysent linux_sysent[] = { { AS(dup_args), (sy_call_t *)dup }, /* 41 = dup */ { AS(linux_pipe_args), (sy_call_t *)linux_pipe }, /* 42 = linux_pipe */ { AS(linux_times_args), (sy_call_t *)linux_times }, /* 43 = linux_times */ - { 0, (sy_call_t *)linux_prof }, /* 44 = linux_prof */ + { 0, (sy_call_t *)nosys }, /* 44 = prof */ { AS(linux_brk_args), (sy_call_t *)linux_brk }, /* 45 = linux_brk */ - { AS(setgid_args), (sy_call_t *)setgid }, /* 46 = setgid */ - { 0, (sy_call_t *)getgid }, /* 47 = getgid */ + { AS(linux_setgid16_args), (sy_call_t *)linux_setgid16 }, /* 46 = linux_setgid16 */ + { 0, (sy_call_t *)linux_getgid16 }, /* 47 = linux_getgid16 */ { AS(linux_signal_args), (sy_call_t *)linux_signal }, /* 48 = linux_signal */ - { 0, (sy_call_t *)geteuid }, /* 49 = geteuid */ - { 0, (sy_call_t *)getegid }, /* 50 = getegid */ + { 0, (sy_call_t *)linux_geteuid16 }, /* 49 = linux_geteuid16 */ + { 0, (sy_call_t *)linux_getegid16 }, /* 50 = linux_getegid16 */ { AS(acct_args), (sy_call_t *)acct }, /* 51 = acct */ - { AS(linux_umount2_args), (sy_call_t *)linux_umount2 }, /* 52 = linux_umount2 */ - { 0, (sy_call_t *)linux_lock }, /* 53 = linux_lock */ + { AS(linux_umount_args), (sy_call_t *)linux_umount }, /* 52 = linux_umount */ + { 0, (sy_call_t *)nosys }, /* 53 = lock */ { AS(linux_ioctl_args), (sy_call_t *)linux_ioctl }, /* 54 = linux_ioctl */ { AS(linux_fcntl_args), (sy_call_t *)linux_fcntl }, /* 55 = linux_fcntl */ - { 0, (sy_call_t *)linux_mpx }, /* 56 = linux_mpx */ + { 0, (sy_call_t *)nosys }, /* 56 = mpx */ { AS(setpgid_args), (sy_call_t *)setpgid }, /* 57 = setpgid */ - { 0, (sy_call_t *)linux_ulimit }, /* 58 = linux_ulimit */ + { 0, (sy_call_t *)nosys }, /* 58 = ulimit */ { 0, (sy_call_t *)linux_olduname }, /* 59 = linux_olduname */ { AS(umask_args), (sy_call_t *)umask }, /* 60 = umask */ { AS(chroot_args), (sy_call_t *)chroot }, /* 61 = chroot */ @@ -85,21 +85,21 @@ struct sysent linux_sysent[] = { { 0, (sy_call_t *)getpgrp }, /* 65 = getpgrp */ { 0, (sy_call_t *)setsid }, /* 66 = setsid */ { AS(linux_sigaction_args), (sy_call_t *)linux_sigaction }, /* 67 = linux_sigaction */ - { 0, (sy_call_t *)linux_siggetmask }, /* 68 = linux_siggetmask */ - { AS(linux_sigsetmask_args), (sy_call_t *)linux_sigsetmask }, /* 69 = linux_sigsetmask */ - { AS(setreuid_args), (sy_call_t *)setreuid }, /* 70 = setreuid */ - { AS(setregid_args), (sy_call_t *)setregid }, /* 71 = setregid */ + { 0, (sy_call_t *)linux_sgetmask }, /* 68 = linux_sgetmask */ + { AS(linux_ssetmask_args), (sy_call_t *)linux_ssetmask }, /* 69 = linux_ssetmask */ + { AS(linux_setreuid16_args), (sy_call_t *)linux_setreuid16 }, /* 70 = linux_setreuid16 */ + { AS(linux_setregid16_args), (sy_call_t *)linux_setregid16 }, /* 71 = linux_setregid16 */ { AS(linux_sigsuspend_args), (sy_call_t *)linux_sigsuspend }, /* 72 = linux_sigsuspend */ { AS(linux_sigpending_args), (sy_call_t *)linux_sigpending }, /* 73 = linux_sigpending */ - { AS(sethostname_args), (sy_call_t *)osethostname }, /* 74 = osethostname */ + { SYF_MPSAFE | AS(sethostname_args), (sy_call_t *)osethostname }, /* 74 = osethostname */ { AS(linux_setrlimit_args), (sy_call_t *)linux_setrlimit }, /* 75 = linux_setrlimit */ - { AS(linux_getrlimit_args), (sy_call_t *)linux_getrlimit }, /* 76 = linux_getrlimit */ + { AS(linux_old_getrlimit_args), (sy_call_t *)linux_old_getrlimit }, /* 76 = linux_old_getrlimit */ { AS(getrusage_args), (sy_call_t *)getrusage }, /* 77 = getrusage */ { AS(gettimeofday_args), (sy_call_t *)gettimeofday }, /* 78 = gettimeofday */ - { AS(settimeofday_args), (sy_call_t *)settimeofday }, /* 79 = settimeofday */ - { AS(linux_getgroups_args), (sy_call_t *)linux_getgroups }, /* 80 = linux_getgroups */ - { AS(linux_setgroups_args), (sy_call_t *)linux_setgroups }, /* 81 = linux_setgroups */ - { AS(linux_select_args), (sy_call_t *)linux_select }, /* 82 = linux_select */ + { SYF_MPSAFE | AS(settimeofday_args), (sy_call_t *)settimeofday }, /* 79 = settimeofday */ + { AS(linux_getgroups16_args), (sy_call_t *)linux_getgroups16 }, /* 80 = linux_getgroups16 */ + { AS(linux_setgroups16_args), (sy_call_t *)linux_setgroups16 }, /* 81 = linux_setgroups16 */ + { AS(linux_old_select_args), (sy_call_t *)linux_old_select }, /* 82 = linux_old_select */ { AS(linux_symlink_args), (sy_call_t *)linux_symlink }, /* 83 = linux_symlink */ { AS(ostat_args), (sy_call_t *)ostat }, /* 84 = ostat */ { AS(linux_readlink_args), (sy_call_t *)linux_readlink }, /* 85 = linux_readlink */ @@ -115,12 +115,12 @@ struct sysent linux_sysent[] = { { AS(fchown_args), (sy_call_t *)fchown }, /* 95 = fchown */ { AS(getpriority_args), (sy_call_t *)getpriority }, /* 96 = getpriority */ { AS(setpriority_args), (sy_call_t *)setpriority }, /* 97 = setpriority */ - { AS(profil_args), (sy_call_t *)profil }, /* 98 = profil */ + { 0, (sy_call_t *)nosys }, /* 98 = profil */ { AS(linux_statfs_args), (sy_call_t *)linux_statfs }, /* 99 = linux_statfs */ { AS(linux_fstatfs_args), (sy_call_t *)linux_fstatfs }, /* 100 = linux_fstatfs */ { AS(linux_ioperm_args), (sy_call_t *)linux_ioperm }, /* 101 = linux_ioperm */ { AS(linux_socketcall_args), (sy_call_t *)linux_socketcall }, /* 102 = linux_socketcall */ - { AS(linux_ksyslog_args), (sy_call_t *)linux_ksyslog }, /* 103 = linux_ksyslog */ + { AS(linux_syslog_args), (sy_call_t *)linux_syslog }, /* 103 = linux_syslog */ { AS(linux_setitimer_args), (sy_call_t *)linux_setitimer }, /* 104 = linux_setitimer */ { AS(linux_getitimer_args), (sy_call_t *)linux_getitimer }, /* 105 = linux_getitimer */ { AS(linux_newstat_args), (sy_call_t *)linux_newstat }, /* 106 = linux_newstat */ @@ -129,7 +129,7 @@ struct sysent linux_sysent[] = { { 0, (sy_call_t *)linux_uname }, /* 109 = linux_uname */ { AS(linux_iopl_args), (sy_call_t *)linux_iopl }, /* 110 = linux_iopl */ { 0, (sy_call_t *)linux_vhangup }, /* 111 = linux_vhangup */ - { 0, (sy_call_t *)linux_idle }, /* 112 = linux_idle */ + { 0, (sy_call_t *)nosys }, /* 112 = idle */ { 0, (sy_call_t *)linux_vm86old }, /* 113 = linux_vm86old */ { AS(linux_wait4_args), (sy_call_t *)linux_wait4 }, /* 114 = linux_wait4 */ { 0, (sy_call_t *)linux_swapoff }, /* 115 = linux_swapoff */ @@ -138,7 +138,7 @@ struct sysent linux_sysent[] = { { AS(fsync_args), (sy_call_t *)fsync }, /* 118 = fsync */ { AS(linux_sigreturn_args), (sy_call_t *)linux_sigreturn }, /* 119 = linux_sigreturn */ { AS(linux_clone_args), (sy_call_t *)linux_clone }, /* 120 = linux_clone */ - { AS(setdomainname_args), (sy_call_t *)setdomainname }, /* 121 = setdomainname */ + { SYF_MPSAFE | AS(setdomainname_args), (sy_call_t *)setdomainname }, /* 121 = setdomainname */ { AS(linux_newuname_args), (sy_call_t *)linux_newuname }, /* 122 = linux_newuname */ { AS(linux_modify_ldt_args), (sy_call_t *)linux_modify_ldt }, /* 123 = linux_modify_ldt */ { 0, (sy_call_t *)linux_adjtimex }, /* 124 = linux_adjtimex */ @@ -154,19 +154,19 @@ struct sysent linux_sysent[] = { { 0, (sy_call_t *)linux_bdflush }, /* 134 = linux_bdflush */ { AS(linux_sysfs_args), (sy_call_t *)linux_sysfs }, /* 135 = linux_sysfs */ { AS(linux_personality_args), (sy_call_t *)linux_personality }, /* 136 = linux_personality */ - { 0, (sy_call_t *)linux_afs_syscall }, /* 137 = linux_afs_syscall */ - { AS(linux_setfsuid_args), (sy_call_t *)linux_setfsuid }, /* 138 = linux_setfsuid */ - { AS(linux_setfsgid_args), (sy_call_t *)linux_setfsgid }, /* 139 = linux_setfsgid */ + { 0, (sy_call_t *)nosys }, /* 137 = afs_syscall */ + { AS(linux_setfsuid16_args), (sy_call_t *)linux_setfsuid16 }, /* 138 = linux_setfsuid16 */ + { AS(linux_setfsgid16_args), (sy_call_t *)linux_setfsgid16 }, /* 139 = linux_setfsgid16 */ { AS(linux_llseek_args), (sy_call_t *)linux_llseek }, /* 140 = linux_llseek */ { AS(linux_getdents_args), (sy_call_t *)linux_getdents }, /* 141 = linux_getdents */ - { AS(linux_newselect_args), (sy_call_t *)linux_newselect }, /* 142 = linux_newselect */ + { AS(linux_select_args), (sy_call_t *)linux_select }, /* 142 = linux_select */ { AS(flock_args), (sy_call_t *)flock }, /* 143 = flock */ { AS(linux_msync_args), (sy_call_t *)linux_msync }, /* 144 = linux_msync */ { AS(readv_args), (sy_call_t *)readv }, /* 145 = readv */ { AS(writev_args), (sy_call_t *)writev }, /* 146 = writev */ { AS(linux_getsid_args), (sy_call_t *)linux_getsid }, /* 147 = linux_getsid */ { AS(linux_fdatasync_args), (sy_call_t *)linux_fdatasync }, /* 148 = linux_fdatasync */ - { 0, (sy_call_t *)linux_sysctl }, /* 149 = linux_sysctl */ + { AS(linux_sysctl_args), (sy_call_t *)linux_sysctl }, /* 149 = linux_sysctl */ { AS(mlock_args), (sy_call_t *)mlock }, /* 150 = mlock */ { AS(munlock_args), (sy_call_t *)munlock }, /* 151 = munlock */ { AS(mlockall_args), (sy_call_t *)mlockall }, /* 152 = mlockall */ @@ -179,16 +179,16 @@ struct sysent linux_sysent[] = { { AS(linux_sched_get_priority_max_args), (sy_call_t *)linux_sched_get_priority_max }, /* 159 = linux_sched_get_priority_max */ { AS(linux_sched_get_priority_min_args), (sy_call_t *)linux_sched_get_priority_min }, /* 160 = linux_sched_get_priority_min */ { AS(sched_rr_get_interval_args), (sy_call_t *)sched_rr_get_interval }, /* 161 = sched_rr_get_interval */ - { AS(nanosleep_args), (sy_call_t *)nanosleep }, /* 162 = nanosleep */ + { SYF_MPSAFE | AS(nanosleep_args), (sy_call_t *)nanosleep }, /* 162 = nanosleep */ { AS(linux_mremap_args), (sy_call_t *)linux_mremap }, /* 163 = linux_mremap */ - { AS(setresuid_args), (sy_call_t *)setresuid }, /* 164 = setresuid */ - { AS(linux_getresuid_args), (sy_call_t *)linux_getresuid }, /* 165 = linux_getresuid */ + { AS(linux_setresuid16_args), (sy_call_t *)linux_setresuid16 }, /* 164 = linux_setresuid16 */ + { AS(linux_getresuid16_args), (sy_call_t *)linux_getresuid16 }, /* 165 = linux_getresuid16 */ { 0, (sy_call_t *)linux_vm86 }, /* 166 = linux_vm86 */ { 0, (sy_call_t *)linux_query_module }, /* 167 = linux_query_module */ { AS(poll_args), (sy_call_t *)poll }, /* 168 = poll */ { 0, (sy_call_t *)linux_nfsservctl }, /* 169 = linux_nfsservctl */ - { AS(setresgid_args), (sy_call_t *)setresgid }, /* 170 = setresgid */ - { AS(linux_getresgid_args), (sy_call_t *)linux_getresgid }, /* 171 = linux_getresgid */ + { AS(linux_setresgid16_args), (sy_call_t *)linux_setresgid16 }, /* 170 = linux_setresgid16 */ + { AS(linux_getresgid16_args), (sy_call_t *)linux_getresgid16 }, /* 171 = linux_getresgid16 */ { 0, (sy_call_t *)linux_prctl }, /* 172 = linux_prctl */ { AS(linux_rt_sigreturn_args), (sy_call_t *)linux_rt_sigreturn }, /* 173 = linux_rt_sigreturn */ { AS(linux_rt_sigaction_args), (sy_call_t *)linux_rt_sigaction }, /* 174 = linux_rt_sigaction */ @@ -199,20 +199,44 @@ struct sysent linux_sysent[] = { { AS(linux_rt_sigsuspend_args), (sy_call_t *)linux_rt_sigsuspend }, /* 179 = linux_rt_sigsuspend */ { AS(linux_pread_args), (sy_call_t *)linux_pread }, /* 180 = linux_pread */ { AS(linux_pwrite_args), (sy_call_t *)linux_pwrite }, /* 181 = linux_pwrite */ - { AS(linux_chown_args), (sy_call_t *)linux_chown }, /* 182 = linux_chown */ + { AS(linux_chown16_args), (sy_call_t *)linux_chown16 }, /* 182 = linux_chown16 */ { AS(linux_getcwd_args), (sy_call_t *)linux_getcwd }, /* 183 = linux_getcwd */ { 0, (sy_call_t *)linux_capget }, /* 184 = linux_capget */ { 0, (sy_call_t *)linux_capset }, /* 185 = linux_capset */ { AS(linux_sigaltstack_args), (sy_call_t *)linux_sigaltstack }, /* 186 = linux_sigaltstack */ { 0, (sy_call_t *)linux_sendfile }, /* 187 = linux_sendfile */ - { 0, (sy_call_t *)linux_getpmsg }, /* 188 = linux_getpmsg */ - { 0, (sy_call_t *)linux_putpmsg }, /* 189 = linux_putpmsg */ - { 0, (sy_call_t *)linux_vfork }, /* 190 = linux_vfork */ - { 0, (sy_call_t *)linux_ugetrlimit }, /* 191 = linux_ugetrlimit */ - { 0, (sy_call_t *)linux_mmap2 }, /* 192 = linux_mmap2 */ - { 0, (sy_call_t *)linux_truncate64 }, /* 193 = linux_truncate64 */ - { 0, (sy_call_t *)linux_ftruncate64 }, /* 194 = linux_ftruncate64 */ - { 0, (sy_call_t *)linux_stat64 }, /* 195 = linux_stat64 */ - { 0, (sy_call_t *)linux_lstat64 }, /* 196 = linux_lstat64 */ - { 0, (sy_call_t *)linux_fstat64 }, /* 197 = linux_fstat64 */ + { 0, (sy_call_t *)nosys }, /* 188 = getpmsg */ + { 0, (sy_call_t *)nosys }, /* 189 = putpmsg */ + { SYF_MPSAFE | 0, (sy_call_t *)linux_vfork }, /* 190 = linux_vfork */ + { AS(linux_getrlimit_args), (sy_call_t *)linux_getrlimit }, /* 191 = linux_getrlimit */ + { AS(linux_mmap2_args), (sy_call_t *)linux_mmap2 }, /* 192 = linux_mmap2 */ + { AS(linux_truncate64_args), (sy_call_t *)linux_truncate64 }, /* 193 = linux_truncate64 */ + { AS(linux_ftruncate64_args), (sy_call_t *)linux_ftruncate64 }, /* 194 = linux_ftruncate64 */ + { AS(linux_stat64_args), (sy_call_t *)linux_stat64 }, /* 195 = linux_stat64 */ + { AS(linux_lstat64_args), (sy_call_t *)linux_lstat64 }, /* 196 = linux_lstat64 */ + { AS(linux_fstat64_args), (sy_call_t *)linux_fstat64 }, /* 197 = linux_fstat64 */ + { AS(linux_lchown_args), (sy_call_t *)linux_lchown }, /* 198 = linux_lchown */ + { 0, (sy_call_t *)linux_getuid }, /* 199 = linux_getuid */ + { 0, (sy_call_t *)linux_getgid }, /* 200 = linux_getgid */ + { 0, (sy_call_t *)geteuid }, /* 201 = geteuid */ + { 0, (sy_call_t *)getegid }, /* 202 = getegid */ + { AS(setreuid_args), (sy_call_t *)setreuid }, /* 203 = setreuid */ + { AS(setregid_args), (sy_call_t *)setregid }, /* 204 = setregid */ + { AS(linux_getgroups_args), (sy_call_t *)linux_getgroups }, /* 205 = linux_getgroups */ + { AS(linux_setgroups_args), (sy_call_t *)linux_setgroups }, /* 206 = linux_setgroups */ + { AS(linux_fchown_args), (sy_call_t *)linux_fchown }, /* 207 = linux_fchown */ + { AS(setresuid_args), (sy_call_t *)setresuid }, /* 208 = setresuid */ + { AS(getresuid_args), (sy_call_t *)getresuid }, /* 209 = getresuid */ + { AS(setresgid_args), (sy_call_t *)setresgid }, /* 210 = setresgid */ + { AS(getresgid_args), (sy_call_t *)getresgid }, /* 211 = getresgid */ + { AS(linux_chown_args), (sy_call_t *)linux_chown }, /* 212 = linux_chown */ + { AS(setuid_args), (sy_call_t *)setuid }, /* 213 = setuid */ + { AS(setgid_args), (sy_call_t *)setgid }, /* 214 = setgid */ + { AS(linux_setfsuid_args), (sy_call_t *)linux_setfsuid }, /* 215 = linux_setfsuid */ + { AS(linux_setfsgid_args), (sy_call_t *)linux_setfsgid }, /* 216 = linux_setfsgid */ + { AS(linux_pivot_root_args), (sy_call_t *)linux_pivot_root }, /* 217 = linux_pivot_root */ + { AS(linux_mincore_args), (sy_call_t *)linux_mincore }, /* 218 = linux_mincore */ + { 0, (sy_call_t *)linux_madvise }, /* 219 = linux_madvise */ + { AS(linux_getdents64_args), (sy_call_t *)linux_getdents64 }, /* 220 = linux_getdents64 */ + { AS(linux_fcntl64_args), (sy_call_t *)linux_fcntl64 }, /* 221 = linux_fcntl64 */ }; diff --git a/sys/i386/linux/linux_sysvec.c b/sys/i386/linux/linux_sysvec.c index 306b411..eaab863 100644 --- a/sys/i386/linux/linux_sysvec.c +++ b/sys/i386/linux/linux_sysvec.c @@ -212,7 +212,7 @@ linux_rt_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code) { register struct proc *p = curproc; register struct trapframe *regs; - struct linux_rt_sigframe *fp, frame; + struct l_rt_sigframe *fp, frame; int oonstack; PROC_LOCK_ASSERT(p, MA_OWNED); @@ -220,7 +220,7 @@ linux_rt_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code) oonstack = sigonstack(regs->tf_esp); #ifdef DEBUG - if (ldebug(sigreturn)) + if (ldebug(rt_sendsig)) printf(ARGS(rt_sendsig, "%p, %d, %p, %lu"), catcher, sig, (void*)mask, code); #endif @@ -229,10 +229,10 @@ linux_rt_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code) */ if ((p->p_flag & P_ALTSTACK) && !oonstack && SIGISMEMBER(p->p_sigacts->ps_sigonstack, sig)) { - fp = (struct linux_rt_sigframe *)(p->p_sigstk.ss_sp + - p->p_sigstk.ss_size - sizeof(struct linux_rt_sigframe)); + fp = (struct l_rt_sigframe *)(p->p_sigstk.ss_sp + + p->p_sigstk.ss_size - sizeof(struct l_rt_sigframe)); } else - fp = (struct linux_rt_sigframe *)regs->tf_esp - 1; + fp = (struct l_rt_sigframe *)regs->tf_esp - 1; PROC_UNLOCK(p); /* @@ -241,7 +241,7 @@ linux_rt_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code) * if access is denied. */ if ((grow_stack (p, (int)fp) == FALSE) || - !useracc((caddr_t)fp, sizeof (struct linux_rt_sigframe), + !useracc((caddr_t)fp, sizeof (struct l_rt_sigframe), VM_PROT_WRITE)) { /* * Process has trashed its stack; give it an illegal @@ -253,7 +253,7 @@ linux_rt_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code) SIGDELSET(p->p_sigcatch, SIGILL); SIGDELSET(p->p_sigmask, SIGILL); #ifdef DEBUG - if (ldebug(sigreturn)) + if (ldebug(rt_sendsig)) printf(LMSG("rt_sendsig: bad stack %p, oonstack=%x"), fp, oonstack); #endif @@ -314,7 +314,7 @@ linux_rt_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code) frame.sf_sc.uc_mcontext.sc_trapno = code; /* XXX ???? */ #ifdef DEBUG - if (ldebug(sigreturn)) + if (ldebug(rt_sendsig)) printf(LMSG("rt_sendsig flags: 0x%x, sp: %p, ss: 0x%x, mask: 0x%x"), frame.sf_sc.uc_stack.ss_flags, p->p_sigstk.ss_sp, p->p_sigstk.ss_size, frame.sf_sc.uc_mcontext.sc_mask); @@ -362,8 +362,8 @@ linux_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code) { register struct proc *p = curproc; register struct trapframe *regs; - struct linux_sigframe *fp, frame; - linux_sigset_t lmask; + struct l_sigframe *fp, frame; + l_sigset_t lmask; int oonstack, i; if (SIGISMEMBER(p->p_sigacts->ps_siginfo, sig)) { @@ -376,7 +376,7 @@ linux_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code) oonstack = sigonstack(regs->tf_esp); #ifdef DEBUG - if (ldebug(sigreturn)) + if (ldebug(sendsig)) printf(ARGS(sendsig, "%p, %d, %p, %lu"), catcher, sig, (void*)mask, code); #endif @@ -384,13 +384,12 @@ linux_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code) /* * Allocate space for the signal handler context. */ - PROC_LOCK(p); if ((p->p_flag & P_ALTSTACK) && !oonstack && SIGISMEMBER(p->p_sigacts->ps_sigonstack, sig)) { - fp = (struct linux_sigframe *)(p->p_sigstk.ss_sp + - p->p_sigstk.ss_size - sizeof(struct linux_sigframe)); + fp = (struct l_sigframe *)(p->p_sigstk.ss_sp + + p->p_sigstk.ss_size - sizeof(struct l_sigframe)); } else - fp = (struct linux_sigframe *)regs->tf_esp - 1; + fp = (struct l_sigframe *)regs->tf_esp - 1; PROC_UNLOCK(p); /* @@ -399,7 +398,7 @@ linux_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code) * if access is denied. */ if ((grow_stack (p, (int)fp) == FALSE) || - !useracc((caddr_t)fp, sizeof (struct linux_sigframe), + !useracc((caddr_t)fp, sizeof (struct l_sigframe), VM_PROT_WRITE)) { /* * Process has trashed its stack; give it an illegal @@ -411,7 +410,6 @@ linux_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code) SIGDELSET(p->p_sigcatch, SIGILL); SIGDELSET(p->p_sigmask, SIGILL); psignal(p, SIGILL); - PROC_UNLOCK(p); return; } @@ -450,7 +448,7 @@ linux_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code) frame.sf_sc.sc_err = regs->tf_err; frame.sf_sc.sc_trapno = code; /* XXX ???? */ - bzero(&frame.sf_fpstate, sizeof(struct linux_fpstate)); + bzero(&frame.sf_fpstate, sizeof(struct l_fpstate)); for (i = 0; i < (LINUX_NSIG_WORDS-1); i++) frame.sf_extramask[i] = lmask.__bits[i+1]; @@ -476,6 +474,7 @@ linux_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code) regs->tf_es = _udatasel; regs->tf_fs = _udatasel; regs->tf_ss = _udatasel; + PROC_LOCK(p); } /* @@ -493,9 +492,9 @@ linux_sigreturn(p, args) struct proc *p; struct linux_sigreturn_args *args; { - struct linux_sigframe frame; + struct l_sigframe frame; register struct trapframe *regs; - linux_sigset_t lmask; + l_sigset_t lmask; int eflags, i; regs = p->p_frame; @@ -589,9 +588,9 @@ linux_rt_sigreturn(p, args) struct linux_rt_sigreturn_args *args; { struct sigaltstack_args sasargs; - struct linux_ucontext uc; - struct linux_sigcontext *context; - linux_stack_t *lss; + struct l_ucontext uc; + struct l_sigcontext *context; + l_stack_t *lss; stack_t *ss; register struct trapframe *regs; int eflags; diff --git a/sys/modules/linux/Makefile b/sys/modules/linux/Makefile index 3360a40..226d22d 100644 --- a/sys/modules/linux/Makefile +++ b/sys/modules/linux/Makefile @@ -5,14 +5,14 @@ MAINTAINER= marcel@FreeBSD.org .PATH: ${.CURDIR}/../../compat/linux ${.CURDIR}/../../${MACHINE_ARCH}/linux KMOD= linux -SRCS= linux_file.c linux_getcwd.c linux_ioctl.c linux_ipc.c linux_machdep.c \ - linux_misc.c linux_signal.c linux_socket.c linux_stats.c linux_mib.c \ - linux_dummy.c linux_sysent.c linux_sysvec.c linux_util.c \ - opt_compat.h opt_linux.h opt_vmpage.h vnode_if.h +SRCS= linux_dummy.c linux_file.c linux_getcwd.c linux_ioctl.c linux_ipc.c \ + linux_machdep.c linux_mib.c linux_misc.c linux_signal.c linux_socket.c \ + linux_stats.c linux_sysctl.c linux_sysent.c linux_sysvec.c \ + linux_util.c opt_compat.h opt_linux.h opt_vmpage.h vnode_if.h OBJS= linux_locore.o .if ${MACHINE_ARCH} == "i386" -SRCS+= imgact_linux.c +SRCS+= linux_uid16.c imgact_linux.c .endif CLEANFILES= linux_assym.h linux_genassym.o |