diff options
-rw-r--r-- | sys/compat/freebsd32/freebsd32.h | 6 | ||||
-rw-r--r-- | sys/compat/freebsd32/freebsd32_misc.c | 141 | ||||
-rw-r--r-- | sys/compat/freebsd32/freebsd32_util.h | 16 |
3 files changed, 84 insertions, 79 deletions
diff --git a/sys/compat/freebsd32/freebsd32.h b/sys/compat/freebsd32/freebsd32.h index 943b24c..ced0bce 100644 --- a/sys/compat/freebsd32/freebsd32.h +++ b/sys/compat/freebsd32/freebsd32.h @@ -26,8 +26,8 @@ * $FreeBSD$ */ -#ifndef _IA64_IA32_IA32_H_ -#define _IA64_IA32_IA32_H_ +#ifndef _COMPAT_FREEBSD32_FREEBSD32_H_ +#define _COMPAT_FREEBSD32_FREEBSD32_H_ #define PTRIN(v) (void *)(uintptr_t) (v) #define PTROUT(v) (u_int32_t)(uintptr_t) (v) @@ -100,4 +100,4 @@ struct statfs32 { int32_t f_spare[2]; }; -#endif /* !_IA64_IA32_IA32_H_ */ +#endif /* !_COMPAT_FREEBSD32_FREEBSD32_H_ */ diff --git a/sys/compat/freebsd32/freebsd32_misc.c b/sys/compat/freebsd32/freebsd32_misc.c index a38be87..3d52a5c 100644 --- a/sys/compat/freebsd32/freebsd32_misc.c +++ b/sys/compat/freebsd32/freebsd32_misc.c @@ -75,11 +75,12 @@ __FBSDID("$FreeBSD$"); #include <vm/vm_object.h> #include <vm/vm_extern.h> -#include <amd64/ia32/ia32_util.h> -#include <amd64/ia32/ia32.h> -#include <amd64/ia32/ia32_proto.h> +#include <compat/freebsd32/freebsd32_util.h> +#include <compat/freebsd32/freebsd32.h> +#include <compat/freebsd32/freebsd32_proto.h> + +extern const char freebsd32_emul_path[]; -static const char ia32_emul_path[] = "/compat/ia32"; /* * [ taken from the linux emulator ] * Search an alternate path before passing pathname arguments on @@ -90,7 +91,7 @@ static const char ia32_emul_path[] = "/compat/ia32"; * be in exists. */ int -ia32_emul_find(td, sgp, prefix, path, pbuf, cflag) +freebsd32_emul_find(td, sgp, prefix, path, pbuf, cflag) struct thread *td; caddr_t *sgp; /* Pointer to stackgap memory */ const char *prefix; @@ -163,15 +164,15 @@ ia32_emul_find(td, sgp, prefix, path, pbuf, cflag) } /* - * We now compare the vnode of the ia32_root to the one + * We now compare the vnode of the freebsd32_root to the one * vnode asked. If they resolve to be the same, then we * ignore the match so that the real root gets used. * This avoids the problem of traversing "../.." to find the * root directory and never finding it, because "/" resolves * to the emulation root directory. This is expensive :-( */ - NDINIT(&ndroot, LOOKUP, FOLLOW, UIO_SYSSPACE, ia32_emul_path, - td); + NDINIT(&ndroot, LOOKUP, FOLLOW, UIO_SYSSPACE, + freebsd32_emul_path, td); if ((error = namei(&ndroot)) != 0) { /* Cannot happen! */ @@ -220,7 +221,7 @@ bad: } int -ia32_open(struct thread *td, struct ia32_open_args *uap) +freebsd32_open(struct thread *td, struct freebsd32_open_args *uap) { caddr_t sg; @@ -231,7 +232,7 @@ ia32_open(struct thread *td, struct ia32_open_args *uap) } int -ia32_wait4(struct thread *td, struct ia32_wait4_args *uap) +freebsd32_wait4(struct thread *td, struct freebsd32_wait4_args *uap) { int error; caddr_t sg; @@ -297,7 +298,7 @@ copy_statfs(struct statfs *in, struct statfs32 *out) } int -ia32_getfsstat(struct thread *td, struct ia32_getfsstat_args *uap) +freebsd32_getfsstat(struct thread *td, struct freebsd32_getfsstat_args *uap) { int error; caddr_t sg; @@ -330,7 +331,7 @@ ia32_getfsstat(struct thread *td, struct ia32_getfsstat_args *uap) } int -ia32_access(struct thread *td, struct ia32_access_args *uap) +freebsd32_access(struct thread *td, struct freebsd32_access_args *uap) { caddr_t sg; @@ -341,7 +342,7 @@ ia32_access(struct thread *td, struct ia32_access_args *uap) } int -ia32_chflags(struct thread *td, struct ia32_chflags_args *uap) +freebsd32_chflags(struct thread *td, struct freebsd32_chflags_args *uap) { caddr_t sg; @@ -358,7 +359,8 @@ struct sigaltstack32 { }; int -ia32_sigaltstack(struct thread *td, struct ia32_sigaltstack_args *uap) +freebsd32_sigaltstack(struct thread *td, + struct freebsd32_sigaltstack_args *uap) { struct sigaltstack32 s32; struct sigaltstack ss, oss, *ssp; @@ -385,7 +387,7 @@ ia32_sigaltstack(struct thread *td, struct ia32_sigaltstack_args *uap) } int -ia32_execve(struct thread *td, struct ia32_execve_args *uap) +freebsd32_execve(struct thread *td, struct freebsd32_execve_args *uap) { int error; caddr_t sg; @@ -442,8 +444,8 @@ ia32_execve(struct thread *td, struct ia32_execve_args *uap) #ifdef __ia64__ static int -ia32_mmap_partial(struct thread *td, vm_offset_t start, vm_offset_t end, - int prot, int fd, off_t pos) +freebsd32_mmap_partial(struct thread *td, vm_offset_t start, vm_offset_t end, + int prot, int fd, off_t pos) { vm_map_t map; vm_map_entry_t entry; @@ -490,7 +492,7 @@ ia32_mmap_partial(struct thread *td, vm_offset_t start, vm_offset_t end, #endif int -ia32_mmap(struct thread *td, struct ia32_mmap_args *uap) +freebsd32_mmap(struct thread *td, struct freebsd32_mmap_args *uap) { struct mmap_args ap; vm_offset_t addr = (vm_offset_t) uap->addr; @@ -514,15 +516,16 @@ ia32_mmap(struct thread *td, struct ia32_mmap_args *uap) end = addr + len; if (start != trunc_page(start)) { - error = ia32_mmap_partial(td, start, round_page(start), - prot, fd, pos); + error = freebsd32_mmap_partial(td, start, + round_page(start), prot, + fd, pos); if (fd != -1) pos += round_page(start) - start; start = round_page(start); } if (end != round_page(end)) { vm_offset_t t = trunc_page(end); - error = ia32_mmap_partial(td, t, end, + error = freebsd32_mmap_partial(td, t, end, prot, fd, pos + t - start); end = trunc_page(end); @@ -589,7 +592,7 @@ struct itimerval32 { }; int -ia32_setitimer(struct thread *td, struct ia32_setitimer_args *uap) +freebsd32_setitimer(struct thread *td, struct freebsd32_setitimer_args *uap) { int error; caddr_t sg; @@ -631,7 +634,7 @@ ia32_setitimer(struct thread *td, struct ia32_setitimer_args *uap) } int -ia32_select(struct thread *td, struct ia32_select_args *uap) +freebsd32_select(struct thread *td, struct freebsd32_select_args *uap) { int error; caddr_t sg; @@ -668,7 +671,7 @@ struct kevent32 { }; int -ia32_kevent(struct thread *td, struct ia32_kevent_args *uap) +freebsd32_kevent(struct thread *td, struct freebsd32_kevent_args *uap) { int error; caddr_t sg; @@ -700,9 +703,11 @@ ia32_kevent(struct thread *td, struct ia32_kevent_args *uap) return (error); } if (uap->changelist) { - a.changelist = (struct kevent *)stackgap_alloc(&sg, uap->nchanges * sizeof(struct kevent)); + a.changelist = (struct kevent *)stackgap_alloc(&sg, + uap->nchanges * sizeof(struct kevent)); for (i = 0; i < uap->nchanges; i++) { - error = copyin(&uap->changelist[i], &ks32, sizeof(ks32)); + error = copyin(&uap->changelist[i], &ks32, + sizeof(ks32)); if (error) return (error); ks = (struct kevent *)(uintptr_t)&a.changelist[i]; @@ -715,7 +720,8 @@ ia32_kevent(struct thread *td, struct ia32_kevent_args *uap) } } if (uap->eventlist) { - a.eventlist = stackgap_alloc(&sg, uap->nevents * sizeof(struct kevent)); + a.eventlist = stackgap_alloc(&sg, + uap->nevents * sizeof(struct kevent)); } error = kevent(td, &a); if (uap->eventlist && error > 0) { @@ -727,7 +733,8 @@ ia32_kevent(struct thread *td, struct ia32_kevent_args *uap) CP(*ks, ks32, fflags); CP(*ks, ks32, data); PTROUT_CP(*ks, ks32, udata); - error = copyout(&ks32, &uap->eventlist[i], sizeof(ks32)); + error = copyout(&ks32, &uap->eventlist[i], + sizeof(ks32)); if (error) return (error); } @@ -736,7 +743,8 @@ ia32_kevent(struct thread *td, struct ia32_kevent_args *uap) } int -ia32_gettimeofday(struct thread *td, struct ia32_gettimeofday_args *uap) +freebsd32_gettimeofday(struct thread *td, + struct freebsd32_gettimeofday_args *uap) { int error; caddr_t sg; @@ -766,7 +774,7 @@ ia32_gettimeofday(struct thread *td, struct ia32_gettimeofday_args *uap) } int -ia32_getrusage(struct thread *td, struct ia32_getrusage_args *uap) +freebsd32_getrusage(struct thread *td, struct freebsd32_getrusage_args *uap) { int error; caddr_t sg; @@ -814,7 +822,7 @@ struct iovec32 { #define STACKGAPLEN 400 int -ia32_readv(struct thread *td, struct ia32_readv_args *uap) +freebsd32_readv(struct thread *td, struct freebsd32_readv_args *uap) { int error, osize, nsize, i; caddr_t sg; @@ -860,7 +868,7 @@ punt: } int -ia32_writev(struct thread *td, struct ia32_writev_args *uap) +freebsd32_writev(struct thread *td, struct freebsd32_writev_args *uap) { int error, i, nsize, osize; caddr_t sg; @@ -906,7 +914,8 @@ punt: } int -ia32_settimeofday(struct thread *td, struct ia32_settimeofday_args *uap) +freebsd32_settimeofday(struct thread *td, + struct freebsd32_settimeofday_args *uap) { int error; caddr_t sg; @@ -931,7 +940,7 @@ ia32_settimeofday(struct thread *td, struct ia32_settimeofday_args *uap) } int -ia32_utimes(struct thread *td, struct ia32_utimes_args *uap) +freebsd32_utimes(struct thread *td, struct freebsd32_utimes_args *uap) { int error; caddr_t sg; @@ -958,7 +967,7 @@ ia32_utimes(struct thread *td, struct ia32_utimes_args *uap) } int -ia32_adjtime(struct thread *td, struct ia32_adjtime_args *uap) +freebsd32_adjtime(struct thread *td, struct freebsd32_adjtime_args *uap) { int error; caddr_t sg; @@ -1000,7 +1009,7 @@ ia32_adjtime(struct thread *td, struct ia32_adjtime_args *uap) } int -ia32_statfs(struct thread *td, struct ia32_statfs_args *uap) +freebsd32_statfs(struct thread *td, struct freebsd32_statfs_args *uap) { int error; caddr_t sg; @@ -1027,7 +1036,7 @@ ia32_statfs(struct thread *td, struct ia32_statfs_args *uap) } int -ia32_fstatfs(struct thread *td, struct ia32_fstatfs_args *uap) +freebsd32_fstatfs(struct thread *td, struct freebsd32_fstatfs_args *uap) { int error; caddr_t sg; @@ -1054,7 +1063,7 @@ ia32_fstatfs(struct thread *td, struct ia32_fstatfs_args *uap) } int -ia32_semsys(struct thread *td, struct ia32_semsys_args *uap) +freebsd32_semsys(struct thread *td, struct freebsd32_semsys_args *uap) { /* * Vector through to semsys if it is loaded. @@ -1063,7 +1072,7 @@ ia32_semsys(struct thread *td, struct ia32_semsys_args *uap) } int -ia32_msgsys(struct thread *td, struct ia32_msgsys_args *uap) +freebsd32_msgsys(struct thread *td, struct freebsd32_msgsys_args *uap) { /* * Vector through to msgsys if it is loaded. @@ -1072,7 +1081,7 @@ ia32_msgsys(struct thread *td, struct ia32_msgsys_args *uap) } int -ia32_shmsys(struct thread *td, struct ia32_shmsys_args *uap) +freebsd32_shmsys(struct thread *td, struct freebsd32_shmsys_args *uap) { /* * Vector through to shmsys if it is loaded. @@ -1081,41 +1090,38 @@ ia32_shmsys(struct thread *td, struct ia32_shmsys_args *uap) } int -ia32_pread(struct thread *td, struct ia32_pread_args *uap) +freebsd32_pread(struct thread *td, struct freebsd32_pread_args *uap) { struct pread_args ap; ap.fd = uap->fd; ap.buf = uap->buf; ap.nbyte = uap->nbyte; - ap.offset = (uap->offsetlo - | ((off_t)uap->offsethi << 32)); + ap.offset = (uap->offsetlo | ((off_t)uap->offsethi << 32)); return (pread(td, &ap)); } int -ia32_pwrite(struct thread *td, struct ia32_pwrite_args *uap) +freebsd32_pwrite(struct thread *td, struct freebsd32_pwrite_args *uap) { struct pwrite_args ap; ap.fd = uap->fd; ap.buf = uap->buf; ap.nbyte = uap->nbyte; - ap.offset = (uap->offsetlo - | ((off_t)uap->offsethi << 32)); + ap.offset = (uap->offsetlo | ((off_t)uap->offsethi << 32)); return (pwrite(td, &ap)); } int -ia32_lseek(struct thread *td, struct ia32_lseek_args *uap) +freebsd32_lseek(struct thread *td, struct freebsd32_lseek_args *uap) { int error; struct lseek_args ap; off_t pos; ap.fd = uap->fd; - ap.offset = (uap->offsetlo - | ((off_t)uap->offsethi << 32)); + ap.offset = (uap->offsetlo | ((off_t)uap->offsethi << 32)); ap.whence = uap->whence; error = lseek(td, &ap); /* Expand the quad return into two parts for eax and edx */ @@ -1126,38 +1132,35 @@ ia32_lseek(struct thread *td, struct ia32_lseek_args *uap) } int -ia32_truncate(struct thread *td, struct ia32_truncate_args *uap) +freebsd32_truncate(struct thread *td, struct freebsd32_truncate_args *uap) { struct truncate_args ap; ap.path = uap->path; - ap.length = (uap->lengthlo - | ((off_t)uap->lengthhi << 32)); + ap.length = (uap->lengthlo | ((off_t)uap->lengthhi << 32)); return (truncate(td, &ap)); } int -ia32_ftruncate(struct thread *td, struct ia32_ftruncate_args *uap) +freebsd32_ftruncate(struct thread *td, struct freebsd32_ftruncate_args *uap) { struct ftruncate_args ap; ap.fd = uap->fd; - ap.length = (uap->lengthlo - | ((off_t)uap->lengthhi << 32)); + ap.length = (uap->lengthlo | ((off_t)uap->lengthhi << 32)); return (ftruncate(td, &ap)); } #ifdef COMPAT_FREEBSD4 int -freebsd4_ia32_sendfile(struct thread *td, - struct freebsd4_ia32_sendfile_args *uap) +freebsd4_freebsd32_sendfile(struct thread *td, + struct freebsd4_freebsd32_sendfile_args *uap) { struct freebsd4_sendfile_args ap; ap.fd = uap->fd; ap.s = uap->s; - ap.offset = (uap->offsetlo - | ((off_t)uap->offsethi << 32)); + ap.offset = (uap->offsetlo | ((off_t)uap->offsethi << 32)); ap.nbytes = uap->nbytes; /* XXX check */ ap.hdtr = uap->hdtr; /* XXX check */ ap.sbytes = uap->sbytes; /* XXX FIXME!! */ @@ -1167,14 +1170,13 @@ freebsd4_ia32_sendfile(struct thread *td, #endif int -ia32_sendfile(struct thread *td, struct ia32_sendfile_args *uap) +freebsd32_sendfile(struct thread *td, struct freebsd32_sendfile_args *uap) { struct sendfile_args ap; ap.fd = uap->fd; ap.s = uap->s; - ap.offset = (uap->offsetlo - | ((off_t)uap->offsethi << 32)); + ap.offset = (uap->offsetlo | ((off_t)uap->offsethi << 32)); ap.nbytes = uap->nbytes; /* XXX check */ ap.hdtr = uap->hdtr; /* XXX check */ ap.sbytes = uap->sbytes; /* XXX FIXME!! */ @@ -1221,7 +1223,7 @@ copy_stat( struct stat *in, struct stat32 *out) } int -ia32_stat(struct thread *td, struct ia32_stat_args *uap) +freebsd32_stat(struct thread *td, struct freebsd32_stat_args *uap) { int error; caddr_t sg; @@ -1248,7 +1250,7 @@ ia32_stat(struct thread *td, struct ia32_stat_args *uap) } int -ia32_fstat(struct thread *td, struct ia32_fstat_args *uap) +freebsd32_fstat(struct thread *td, struct freebsd32_fstat_args *uap) { int error; caddr_t sg; @@ -1275,7 +1277,7 @@ ia32_fstat(struct thread *td, struct ia32_fstat_args *uap) } int -ia32_lstat(struct thread *td, struct ia32_lstat_args *uap) +freebsd32_lstat(struct thread *td, struct freebsd32_lstat_args *uap) { int error; caddr_t sg; @@ -1305,7 +1307,7 @@ ia32_lstat(struct thread *td, struct ia32_lstat_args *uap) * MPSAFE */ int -ia32_sysctl(struct thread *td, struct ia32_sysctl_args *uap) +freebsd32_sysctl(struct thread *td, struct freebsd32_sysctl_args *uap) { int error, name[CTL_MAXNAME]; size_t j, oldlen; @@ -1343,7 +1345,7 @@ struct sigaction32 { }; int -ia32_sigaction(struct thread *td, struct ia32_sigaction_args *uap) +freebsd32_sigaction(struct thread *td, struct freebsd32_sigaction_args *uap) { struct sigaction32 s32; struct sigaction sa, osa, *sap; @@ -1371,7 +1373,8 @@ ia32_sigaction(struct thread *td, struct ia32_sigaction_args *uap) #ifdef COMPAT_FREEBSD4 int -freebsd4_ia32_sigaction(struct thread *td, struct freebsd4_ia32_sigaction_args *uap) +freebsd4_freebsd32_sigaction(struct thread *td, + struct freebsd4_freebsd32_sigaction_args *uap) { struct sigaction32 s32; struct sigaction sa, osa, *sap; @@ -1401,7 +1404,7 @@ freebsd4_ia32_sigaction(struct thread *td, struct freebsd4_ia32_sigaction_args * #if 0 int -ia32_xxx(struct thread *td, struct ia32_xxx_args *uap) +freebsd32_xxx(struct thread *td, struct freebsd32_xxx_args *uap) { int error; caddr_t sg; diff --git a/sys/compat/freebsd32/freebsd32_util.h b/sys/compat/freebsd32/freebsd32_util.h index 64fa293..c2672db 100644 --- a/sys/compat/freebsd32/freebsd32_util.h +++ b/sys/compat/freebsd32/freebsd32_util.h @@ -37,15 +37,15 @@ #include <sys/sysent.h> #include <sys/cdefs.h> -struct ia32_ps_strings { +struct freebsd32_ps_strings { u_int32_t ps_argvstr; /* first of 0 or more argument strings */ int ps_nargvstr; /* the number of argument strings */ u_int32_t ps_envstr; /* first of 0 or more environment strings */ int ps_nenvstr; /* the number of environment strings */ }; -#define IA32_USRSTACK ((1ul << 32) - PAGE_SIZE) -#define IA32_PS_STRINGS (IA32_USRSTACK - sizeof(struct ia32_ps_strings)) +#define FREEBSD32_PS_STRINGS \ + (FREEBSD32_USRSTACK - sizeof(struct freebsd32_ps_strings)) static __inline caddr_t stackgap_init(void); static __inline void *stackgap_alloc(caddr_t *, size_t); @@ -54,7 +54,8 @@ static __inline caddr_t stackgap_init() { #define szsigcode (*(curproc->p_sysent->sv_szsigcode)) - return (caddr_t)(((caddr_t)IA32_PS_STRINGS) - szsigcode - SPARE_USRSPACE); + return (caddr_t)(((caddr_t)FREEBSD32_PS_STRINGS) - szsigcode - + SPARE_USRSPACE); #undef szsigcode } @@ -71,15 +72,16 @@ stackgap_alloc(sgp, sz) } -extern const char ia32_emul_path[]; -int ia32_emul_find(struct thread *, caddr_t *, const char *, char *, +extern const char freebsd32_emul_path[]; +int freebsd32_emul_find(struct thread *, caddr_t *, const char *, char *, char **, int); #define CHECKALT(p, sgp, path, i) \ do { \ int _error; \ \ - _error = ia32_emul_find(p, sgp, ia32_emul_path, path, \ + _error = freebsd32_emul_find(p, sgp, \ + freebsd32_emul_path, path, \ &path, i); \ if (_error == EFAULT) \ return (_error); \ |