Home | History | Annotate | Line # | Download | only in netbsd32
netbsd32_compat_43.c revision 1.6.2.1.2.1
      1  1.6.2.1  mrg /*	$NetBSD: netbsd32_compat_43.c,v 1.6.2.1.2.1 1999/06/21 01:08:08 thorpej Exp $	*/
      2      1.1  mrg 
      3      1.1  mrg /*
      4      1.1  mrg  * Copyright (c) 1998 Matthew R. Green
      5      1.1  mrg  * All rights reserved.
      6      1.1  mrg  *
      7      1.1  mrg  * Redistribution and use in source and binary forms, with or without
      8      1.1  mrg  * modification, are permitted provided that the following conditions
      9      1.1  mrg  * are met:
     10      1.1  mrg  * 1. Redistributions of source code must retain the above copyright
     11      1.1  mrg  *    notice, this list of conditions and the following disclaimer.
     12      1.1  mrg  * 2. Redistributions in binary form must reproduce the above copyright
     13      1.1  mrg  *    notice, this list of conditions and the following disclaimer in the
     14      1.1  mrg  *    documentation and/or other materials provided with the distribution.
     15      1.1  mrg  * 3. The name of the author may not be used to endorse or promote products
     16      1.1  mrg  *    derived from this software without specific prior written permission.
     17      1.1  mrg  *
     18      1.1  mrg  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     19      1.1  mrg  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     20      1.1  mrg  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     21      1.1  mrg  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     22  1.6.2.1  mrg  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     23      1.1  mrg  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     24      1.1  mrg  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
     25      1.1  mrg  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     26  1.6.2.1  mrg  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     27      1.1  mrg  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     28      1.1  mrg  * SUCH DAMAGE.
     29      1.1  mrg  */
     30      1.1  mrg 
     31      1.1  mrg #include <sys/param.h>
     32      1.1  mrg #include <sys/systm.h>
     33      1.1  mrg #include <sys/fcntl.h>
     34      1.1  mrg #include <sys/malloc.h>
     35      1.1  mrg #include <sys/mount.h>
     36      1.1  mrg #include <sys/proc.h>
     37      1.1  mrg #include <sys/stat.h>
     38      1.1  mrg #include <sys/syscallargs.h>
     39      1.1  mrg #include <sys/time.h>
     40      1.1  mrg #include <sys/ucred.h>
     41      1.1  mrg #include <vm/vm.h>	/* XXX for <sys/sysctl.h> */
     42      1.1  mrg #include <sys/sysctl.h>
     43      1.3  mrg #include <sys/swap.h>
     44      1.1  mrg 
     45      1.5  mrg #include <compat/netbsd32/netbsd32.h>
     46      1.5  mrg #include <compat/netbsd32/netbsd32_syscallargs.h>
     47      1.1  mrg 
     48      1.1  mrg static void
     49      1.5  mrg netbsd32_from_stat43(sp43, sp32)
     50      1.1  mrg 	struct stat43 *sp43;
     51      1.5  mrg 	struct netbsd32_stat43 *sp32;
     52      1.1  mrg {
     53      1.1  mrg 
     54      1.1  mrg 	sp32->st_dev = sp43->st_dev;
     55      1.1  mrg 	sp32->st_ino = sp43->st_ino;
     56      1.1  mrg 	sp32->st_mode = sp43->st_mode;
     57      1.1  mrg 	sp32->st_nlink = sp43->st_nlink;
     58      1.1  mrg 	sp32->st_uid = sp43->st_uid;
     59      1.1  mrg 	sp32->st_gid = sp43->st_gid;
     60      1.1  mrg 	sp32->st_rdev = sp43->st_rdev;
     61      1.1  mrg 	sp32->st_size = sp43->st_size;
     62      1.1  mrg 	sp32->st_atimespec.tv_sec = sp43->st_atimespec.tv_sec;
     63      1.1  mrg 	sp32->st_atimespec.tv_nsec = sp43->st_atimespec.tv_nsec;
     64      1.1  mrg 	sp32->st_mtimespec.tv_sec = sp43->st_mtimespec.tv_sec;
     65      1.1  mrg 	sp32->st_mtimespec.tv_nsec = sp43->st_mtimespec.tv_nsec;
     66      1.1  mrg 	sp32->st_ctimespec.tv_sec = sp43->st_ctimespec.tv_sec;
     67      1.1  mrg 	sp32->st_ctimespec.tv_nsec = sp43->st_ctimespec.tv_nsec;
     68      1.1  mrg 	sp32->st_blksize = sp43->st_blksize;
     69      1.1  mrg 	sp32->st_blocks = sp43->st_blocks;
     70      1.1  mrg 	sp32->st_flags = sp43->st_flags;
     71      1.1  mrg 	sp32->st_gen = sp43->st_gen;
     72      1.1  mrg }
     73      1.1  mrg 
     74      1.1  mrg /* file system syscalls */
     75      1.1  mrg int
     76      1.5  mrg compat_43_compat_netbsd32_ocreat(p, v, retval)
     77      1.1  mrg 	struct proc *p;
     78      1.1  mrg 	void *v;
     79      1.1  mrg 	register_t *retval;
     80      1.1  mrg {
     81      1.5  mrg 	struct compat_43_compat_netbsd32_ocreat_args /* {
     82      1.5  mrg 		syscallarg(const netbsd32_charp) path;
     83      1.1  mrg 		syscallarg(mode_t) mode;
     84      1.1  mrg 	} */ *uap = v;
     85      1.1  mrg 	struct sys_open_args  ua;
     86      1.1  mrg 	caddr_t sg;
     87      1.1  mrg 
     88      1.6  mrg 	NETBSD32TOP_UAP(path, const char);
     89      1.6  mrg 	NETBSD32TO64_UAP(mode);
     90      1.1  mrg 	SCARG(&ua, flags) = O_WRONLY | O_CREAT | O_TRUNC;
     91      1.1  mrg 	sg = stackgap_init(p->p_emul);
     92      1.6  mrg 	NETBSD32_CHECK_ALT_EXIST(p, &sg, SCARG(&ua, path));
     93      1.1  mrg 
     94      1.1  mrg 	return (sys_open(p, &ua, retval));
     95      1.1  mrg }
     96      1.1  mrg 
     97      1.1  mrg int
     98      1.5  mrg compat_43_compat_netbsd32_olseek(p, v, retval)
     99      1.1  mrg 	struct proc *p;
    100      1.1  mrg 	void *v;
    101      1.1  mrg 	register_t *retval;
    102      1.1  mrg {
    103      1.5  mrg 	struct compat_43_compat_netbsd32_olseek_args /* {
    104      1.1  mrg 		syscallarg(int) fd;
    105      1.5  mrg 		syscallarg(netbsd32_long) offset;
    106      1.1  mrg 		syscallarg(int) whence;
    107      1.1  mrg 	} */ *uap = v;
    108      1.1  mrg 	struct sys_lseek_args ua;
    109      1.1  mrg 	int rv;
    110      1.1  mrg 	off_t rt;
    111      1.1  mrg 
    112      1.1  mrg 	SCARG(&ua, fd) = SCARG(uap, fd);
    113      1.6  mrg 	NETBSD32TOX_UAP(offset, long);
    114      1.6  mrg 	NETBSD32TO64_UAP(whence);
    115      1.1  mrg 	rv = sys_lseek(p, &ua, (register_t *)&rt);
    116      1.5  mrg 	*(netbsd32_long *)retval = rt;
    117      1.1  mrg 
    118      1.1  mrg 	return (rv);
    119      1.1  mrg }
    120      1.1  mrg 
    121      1.1  mrg int
    122      1.5  mrg compat_43_compat_netbsd32_stat43(p, v, retval)
    123      1.1  mrg 	struct proc *p;
    124      1.1  mrg 	void *v;
    125      1.1  mrg 	register_t *retval;
    126      1.1  mrg {
    127      1.5  mrg 	struct compat_43_compat_netbsd32_stat43_args /* {
    128      1.5  mrg 		syscallarg(const netbsd32_charp) path;
    129      1.5  mrg 		syscallarg(netbsd32_stat43p_t) ub;
    130      1.1  mrg 	} */ *uap = v;
    131      1.5  mrg 	struct netbsd32_stat43 *sp32;
    132      1.1  mrg 	struct stat43 sb43;
    133      1.1  mrg 	struct stat43 *sp43 = &sb43;
    134      1.1  mrg 	struct compat_43_sys_stat_args ua;
    135      1.1  mrg 	caddr_t sg;
    136      1.1  mrg 	int rv;
    137      1.1  mrg 
    138      1.6  mrg 	NETBSD32TOP_UAP(path, const char);
    139      1.1  mrg 	SCARG(&ua, ub) = &sb43;
    140      1.1  mrg 	sg = stackgap_init(p->p_emul);
    141      1.6  mrg 	NETBSD32_CHECK_ALT_EXIST(p, &sg, SCARG(&ua, path));
    142      1.1  mrg 
    143      1.1  mrg 	rv = compat_43_sys_stat(p, &ua, retval);
    144      1.1  mrg 
    145      1.5  mrg 	sp32 = (struct netbsd32_stat43 *)(u_long)SCARG(uap, ub);
    146      1.5  mrg 	netbsd32_from_stat43(sp43, sp32);
    147      1.1  mrg 
    148      1.1  mrg 	return (rv);
    149      1.1  mrg }
    150      1.1  mrg 
    151      1.1  mrg int
    152      1.5  mrg compat_43_compat_netbsd32_lstat43(p, v, retval)
    153      1.1  mrg 	struct proc *p;
    154      1.1  mrg 	void *v;
    155      1.1  mrg 	register_t *retval;
    156      1.1  mrg {
    157      1.5  mrg 	struct compat_43_compat_netbsd32_lstat43_args /* {
    158      1.5  mrg 		syscallarg(const netbsd32_charp) path;
    159      1.5  mrg 		syscallarg(netbsd32_stat43p_t) ub;
    160      1.1  mrg 	} */ *uap = v;
    161      1.5  mrg 	struct netbsd32_stat43 *sp32;
    162      1.1  mrg 	struct stat43 sb43;
    163      1.1  mrg 	struct stat43 *sp43 = &sb43;
    164      1.1  mrg 	struct compat_43_sys_lstat_args ua;
    165      1.1  mrg 	caddr_t sg;
    166      1.1  mrg 	int rv;
    167      1.1  mrg 
    168      1.6  mrg 	NETBSD32TOP_UAP(path, const char);
    169      1.1  mrg 	SCARG(&ua, ub) = &sb43;
    170      1.1  mrg 	sg = stackgap_init(p->p_emul);
    171      1.6  mrg 	NETBSD32_CHECK_ALT_EXIST(p, &sg, SCARG(&ua, path));
    172      1.1  mrg 
    173      1.1  mrg 	rv = compat_43_sys_stat(p, &ua, retval);
    174      1.1  mrg 
    175      1.5  mrg 	sp32 = (struct netbsd32_stat43 *)(u_long)SCARG(uap, ub);
    176      1.5  mrg 	netbsd32_from_stat43(sp43, sp32);
    177      1.1  mrg 
    178      1.1  mrg 	return (rv);
    179      1.1  mrg }
    180      1.1  mrg 
    181      1.1  mrg int
    182      1.5  mrg compat_43_compat_netbsd32_fstat43(p, v, retval)
    183      1.1  mrg 	struct proc *p;
    184      1.1  mrg 	void *v;
    185      1.1  mrg 	register_t *retval;
    186      1.1  mrg {
    187      1.5  mrg 	struct compat_43_compat_netbsd32_fstat43_args /* {
    188      1.1  mrg 		syscallarg(int) fd;
    189      1.5  mrg 		syscallarg(netbsd32_stat43p_t) sb;
    190      1.1  mrg 	} */ *uap = v;
    191      1.5  mrg 	struct netbsd32_stat43 *sp32;
    192      1.1  mrg 	struct stat43 sb43;
    193      1.1  mrg 	struct stat43 *sp43 = &sb43;
    194      1.1  mrg 	struct compat_43_sys_fstat_args ua;
    195      1.1  mrg 	int rv;
    196      1.1  mrg 
    197      1.6  mrg 	NETBSD32TO64_UAP(fd);
    198      1.1  mrg 	SCARG(&ua, sb) = &sb43;
    199      1.1  mrg 	rv = compat_43_sys_fstat(p, &ua, retval);
    200      1.1  mrg 
    201      1.5  mrg 	sp32 = (struct netbsd32_stat43 *)(u_long)SCARG(uap, sb);
    202      1.5  mrg 	netbsd32_from_stat43(sp43, sp32);
    203      1.1  mrg 
    204      1.1  mrg 	return (rv);
    205      1.1  mrg }
    206      1.1  mrg 
    207      1.1  mrg int
    208      1.5  mrg compat_43_compat_netbsd32_otruncate(p, v, retval)
    209      1.1  mrg 	struct proc *p;
    210      1.1  mrg 	void *v;
    211      1.1  mrg 	register_t *retval;
    212      1.1  mrg {
    213      1.5  mrg 	struct compat_43_compat_netbsd32_otruncate_args /* {
    214      1.5  mrg 		syscallarg(const netbsd32_charp) path;
    215      1.5  mrg 		syscallarg(netbsd32_long) length;
    216      1.1  mrg 	} */ *uap = v;
    217      1.1  mrg 	struct sys_truncate_args ua;
    218      1.1  mrg 
    219      1.6  mrg 	NETBSD32TOP_UAP(path, const char);
    220      1.6  mrg 	NETBSD32TO64_UAP(length);
    221      1.1  mrg 	return (sys_ftruncate(p, &ua, retval));
    222      1.1  mrg }
    223      1.1  mrg 
    224      1.1  mrg int
    225      1.5  mrg compat_43_compat_netbsd32_oftruncate(p, v, retval)
    226      1.1  mrg 	struct proc *p;
    227      1.1  mrg 	void *v;
    228      1.1  mrg 	register_t *retval;
    229      1.1  mrg {
    230      1.5  mrg 	struct compat_43_compat_netbsd32_oftruncate_args /* {
    231      1.1  mrg 		syscallarg(int) fd;
    232      1.5  mrg 		syscallarg(netbsd32_long) length;
    233      1.1  mrg 	} */ *uap = v;
    234      1.1  mrg 	struct sys_ftruncate_args ua;
    235      1.1  mrg 
    236      1.6  mrg 	NETBSD32TO64_UAP(fd);
    237      1.6  mrg 	NETBSD32TO64_UAP(length);
    238      1.1  mrg 	return (sys_ftruncate(p, &ua, retval));
    239      1.1  mrg }
    240      1.1  mrg 
    241      1.1  mrg int
    242      1.5  mrg compat_43_compat_netbsd32_ogetdirentries(p, v, retval)
    243      1.1  mrg 	struct proc *p;
    244      1.1  mrg 	void *v;
    245      1.1  mrg 	register_t *retval;
    246      1.1  mrg {
    247      1.5  mrg 	struct compat_43_compat_netbsd32_ogetdirentries_args /* {
    248      1.1  mrg 		syscallarg(int) fd;
    249      1.5  mrg 		syscallarg(netbsd32_charp) buf;
    250      1.1  mrg 		syscallarg(u_int) count;
    251      1.5  mrg 		syscallarg(netbsd32_longp) basep;
    252      1.1  mrg 	} */ *uap = v;
    253      1.1  mrg 	struct compat_43_sys_getdirentries_args ua;
    254      1.1  mrg 
    255      1.6  mrg 	NETBSD32TO64_UAP(fd);
    256      1.6  mrg 	NETBSD32TOP_UAP(buf, char);
    257      1.6  mrg 	NETBSD32TO64_UAP(count);
    258      1.6  mrg 	NETBSD32TOP_UAP(basep, long);
    259      1.1  mrg 	return (compat_43_sys_getdirentries(p, &ua, retval));
    260      1.1  mrg }
    261      1.1  mrg 
    262      1.1  mrg /* kernel syscalls */
    263      1.1  mrg int
    264      1.5  mrg compat_43_compat_netbsd32_ogetkerninfo(p, v, retval)
    265      1.1  mrg 	struct proc *p;
    266      1.1  mrg 	void *v;
    267      1.1  mrg 	register_t *retval;
    268      1.1  mrg {
    269      1.5  mrg 	struct compat_43_compat_netbsd32_ogetkerninfo_args /* {
    270      1.1  mrg 		syscallarg(int) op;
    271      1.5  mrg 		syscallarg(netbsd32_charp) where;
    272      1.5  mrg 		syscallarg(netbsd32_intp) size;
    273      1.1  mrg 		syscallarg(int) arg;
    274      1.1  mrg 	} */ *uap = v;
    275      1.1  mrg 	struct compat_43_sys_getkerninfo_args ua;
    276      1.1  mrg 
    277      1.6  mrg 	NETBSD32TO64_UAP(op);
    278      1.6  mrg 	NETBSD32TOP_UAP(where, char);
    279      1.6  mrg 	NETBSD32TOP_UAP(size, int);
    280      1.6  mrg 	NETBSD32TO64_UAP(arg);
    281      1.1  mrg 	return (compat_43_sys_getkerninfo(p, &ua, retval));
    282      1.1  mrg }
    283      1.1  mrg 
    284      1.1  mrg int
    285      1.5  mrg compat_43_compat_netbsd32_ogethostname(p, v, retval)
    286      1.1  mrg 	struct proc *p;
    287      1.1  mrg 	void *v;
    288      1.1  mrg 	register_t *retval;
    289      1.1  mrg {
    290      1.5  mrg 	struct compat_43_compat_netbsd32_ogethostname_args /* {
    291      1.5  mrg 		syscallarg(netbsd32_charp) hostname;
    292      1.1  mrg 		syscallarg(u_int) len;
    293      1.1  mrg 	} */ *uap = v;
    294      1.1  mrg 	int name;
    295      1.1  mrg 	size_t sz;
    296      1.1  mrg 
    297      1.1  mrg 	name = KERN_HOSTNAME;
    298      1.1  mrg 	sz = SCARG(uap, len);
    299      1.1  mrg 	return (kern_sysctl(&name, 1, (char *)(u_long)SCARG(uap, hostname),
    300      1.1  mrg 	    &sz, 0, 0, p));
    301      1.1  mrg }
    302      1.1  mrg 
    303      1.1  mrg int
    304      1.5  mrg compat_43_compat_netbsd32_osethostname(p, v, retval)
    305      1.1  mrg 	struct proc *p;
    306      1.1  mrg 	void *v;
    307      1.1  mrg 	register_t *retval;
    308      1.1  mrg {
    309      1.5  mrg 	struct compat_43_compat_netbsd32_osethostname_args /* {
    310      1.5  mrg 		syscallarg(netbsd32_charp) hostname;
    311      1.1  mrg 		syscallarg(u_int) len;
    312      1.1  mrg 	} */ *uap = v;
    313      1.1  mrg 	int name;
    314      1.1  mrg 	int error;
    315      1.1  mrg 
    316      1.1  mrg 	if ((error = suser(p->p_ucred, &p->p_acflag)) != 0)
    317      1.1  mrg 		return (error);
    318      1.1  mrg 	name = KERN_HOSTNAME;
    319      1.1  mrg 	return (kern_sysctl(&name, 1, 0, 0, (char *)(u_long)SCARG(uap,
    320      1.1  mrg 	    hostname), SCARG(uap, len), p));
    321      1.1  mrg }
    322      1.1  mrg 
    323      1.1  mrg int
    324      1.5  mrg compat_43_compat_netbsd32_sethostid(p, v, retval)
    325      1.4  eeh 	struct proc *p;
    326      1.4  eeh 	void *v;
    327      1.4  eeh 	register_t *retval;
    328      1.4  eeh {
    329      1.5  mrg 	struct compat_43_compat_netbsd32_sethostid_args /* {
    330      1.4  eeh 		syscallarg(int32_t) hostid;
    331      1.4  eeh 	} */ *uap = v;
    332      1.4  eeh 	struct compat_43_sys_sethostid_args ua;
    333      1.4  eeh 
    334      1.6  mrg 	NETBSD32TO64_UAP(hostid);
    335      1.4  eeh 	return (compat_43_sys_sethostid(p, &ua, retval));
    336      1.4  eeh }
    337      1.4  eeh 
    338      1.4  eeh int
    339      1.5  mrg compat_43_compat_netbsd32_ogetrlimit(p, v, retval)
    340      1.1  mrg 	struct proc *p;
    341      1.1  mrg 	void *v;
    342      1.1  mrg 	register_t *retval;
    343      1.1  mrg {
    344      1.5  mrg 	struct compat_43_compat_netbsd32_ogetrlimit_args /* {
    345      1.1  mrg 		syscallarg(int) which;
    346      1.5  mrg 		syscallarg(netbsd32_orlimitp_t) rlp;
    347      1.1  mrg 	} */ *uap = v;
    348      1.1  mrg 	struct compat_43_sys_getrlimit_args ua;
    349      1.1  mrg 
    350      1.6  mrg 	NETBSD32TO64_UAP(which);
    351      1.6  mrg 	NETBSD32TOP_UAP(rlp, struct orlimit);
    352      1.1  mrg 	return (compat_43_sys_getrlimit(p, &ua, retval));
    353      1.1  mrg }
    354      1.1  mrg 
    355      1.1  mrg int
    356      1.5  mrg compat_43_compat_netbsd32_osetrlimit(p, v, retval)
    357      1.1  mrg 	struct proc *p;
    358      1.1  mrg 	void *v;
    359      1.1  mrg 	register_t *retval;
    360      1.1  mrg {
    361      1.5  mrg 	struct compat_43_compat_netbsd32_osetrlimit_args /* {
    362      1.1  mrg 		syscallarg(int) which;
    363      1.5  mrg 		syscallarg(netbsd32_orlimitp_t) rlp;
    364      1.1  mrg 	} */ *uap = v;
    365      1.1  mrg 	struct compat_43_sys_setrlimit_args ua;
    366      1.1  mrg 
    367      1.6  mrg 	NETBSD32TO64_UAP(which);
    368      1.6  mrg 	NETBSD32TOP_UAP(rlp, struct orlimit);
    369      1.1  mrg 	return (compat_43_sys_setrlimit(p, &ua, retval));
    370      1.1  mrg }
    371      1.1  mrg 
    372      1.4  eeh int
    373      1.5  mrg compat_43_compat_netbsd32_killpg(p, v, retval)
    374      1.4  eeh 	struct proc *p;
    375      1.4  eeh 	void *v;
    376      1.4  eeh 	register_t *retval;
    377      1.4  eeh {
    378      1.5  mrg 	struct compat_43_compat_netbsd32_killpg_args /* {
    379      1.4  eeh 		syscallarg(int) pgid;
    380      1.4  eeh 		syscallarg(int) signum;
    381      1.4  eeh 	} */ *uap = v;
    382      1.4  eeh 	struct compat_43_sys_killpg_args ua;
    383      1.4  eeh 
    384      1.6  mrg 	NETBSD32TO64_UAP(pgid);
    385      1.6  mrg 	NETBSD32TO64_UAP(signum);
    386      1.4  eeh 	return (compat_43_sys_killpg(p, &ua, retval));
    387      1.4  eeh }
    388      1.4  eeh 
    389      1.1  mrg /* virtual memory syscalls */
    390      1.1  mrg int
    391      1.5  mrg compat_43_compat_netbsd32_ommap(p, v, retval)
    392      1.1  mrg 	struct proc *p;
    393      1.1  mrg 	void *v;
    394      1.1  mrg 	register_t *retval;
    395      1.1  mrg {
    396      1.5  mrg 	struct compat_43_compat_netbsd32_ommap_args /* {
    397      1.5  mrg 		syscallarg(netbsd32_caddr_t) addr;
    398      1.5  mrg 		syscallarg(netbsd32_size_t) len;
    399      1.1  mrg 		syscallarg(int) prot;
    400      1.1  mrg 		syscallarg(int) flags;
    401      1.1  mrg 		syscallarg(int) fd;
    402      1.5  mrg 		syscallarg(netbsd32_long) pos;
    403      1.1  mrg 	} */ *uap = v;
    404      1.1  mrg 	struct compat_43_sys_mmap_args ua;
    405      1.1  mrg 
    406      1.6  mrg 	NETBSD32TOX64_UAP(addr, caddr_t);
    407      1.6  mrg 	NETBSD32TOX_UAP(len, size_t);
    408      1.6  mrg 	NETBSD32TO64_UAP(prot);
    409      1.6  mrg 	NETBSD32TO64_UAP(flags);
    410      1.6  mrg 	NETBSD32TO64_UAP(fd);
    411      1.6  mrg 	NETBSD32TOX_UAP(pos, long);
    412      1.2  mrg 	return (compat_43_sys_mmap(p, &ua, retval));
    413      1.1  mrg }
    414      1.1  mrg 
    415      1.4  eeh /* virtual memory syscalls */
    416      1.4  eeh int
    417      1.5  mrg compat_netbsd32_ovadvise(p, v, retval)
    418      1.4  eeh 	struct proc *p;
    419      1.4  eeh 	void *v;
    420      1.4  eeh 	register_t *retval;
    421      1.4  eeh {
    422      1.5  mrg 	struct compat_netbsd32_ovadvise_args /* {
    423      1.4  eeh 		syscallarg(int) anom;
    424      1.4  eeh 	} */ *uap = v;
    425      1.4  eeh 	struct sys_ovadvise_args ua;
    426      1.4  eeh 
    427      1.6  mrg 	NETBSD32TO64_UAP(anom);
    428      1.4  eeh 	return (sys_ovadvise(p, &ua, retval));
    429      1.4  eeh }
    430      1.4  eeh 
    431      1.1  mrg /* network syscalls */
    432      1.1  mrg int
    433      1.5  mrg compat_43_compat_netbsd32_oaccept(p, v, retval)
    434      1.1  mrg 	struct proc *p;
    435      1.1  mrg 	void *v;
    436      1.1  mrg 	register_t *retval;
    437      1.1  mrg {
    438      1.5  mrg 	struct compat_43_compat_netbsd32_oaccept_args /* {
    439      1.1  mrg 		syscallarg(int) s;
    440      1.5  mrg 		syscallarg(netbsd32_caddr_t) name;
    441      1.5  mrg 		syscallarg(netbsd32_intp) anamelen;
    442      1.1  mrg 	} */ *uap = v;
    443      1.1  mrg 	struct compat_43_sys_accept_args ua;
    444      1.1  mrg 
    445      1.6  mrg 	NETBSD32TOX_UAP(s, int);
    446      1.6  mrg 	NETBSD32TOX64_UAP(name, caddr_t);
    447      1.6  mrg 	NETBSD32TOP_UAP(anamelen, int);
    448      1.2  mrg 	return (compat_43_sys_accept(p, &ua, retval));
    449      1.1  mrg }
    450      1.1  mrg 
    451      1.1  mrg int
    452      1.5  mrg compat_43_compat_netbsd32_osend(p, v, retval)
    453      1.1  mrg 	struct proc *p;
    454      1.1  mrg 	void *v;
    455      1.1  mrg 	register_t *retval;
    456      1.1  mrg {
    457      1.5  mrg 	struct compat_43_compat_netbsd32_osend_args /* {
    458      1.1  mrg 		syscallarg(int) s;
    459      1.5  mrg 		syscallarg(netbsd32_caddr_t) buf;
    460      1.1  mrg 		syscallarg(int) len;
    461      1.1  mrg 		syscallarg(int) flags;
    462      1.1  mrg 	} */ *uap = v;
    463      1.1  mrg 	struct compat_43_sys_send_args ua;
    464      1.1  mrg 
    465      1.6  mrg 	NETBSD32TO64_UAP(s);
    466      1.6  mrg 	NETBSD32TOX64_UAP(buf, caddr_t);
    467      1.6  mrg 	NETBSD32TO64_UAP(len);
    468      1.6  mrg 	NETBSD32TO64_UAP(flags);
    469      1.2  mrg 	return (compat_43_sys_send(p, &ua, retval));
    470      1.1  mrg }
    471      1.1  mrg 
    472      1.1  mrg int
    473      1.5  mrg compat_43_compat_netbsd32_orecv(p, v, retval)
    474      1.1  mrg 	struct proc *p;
    475      1.1  mrg 	void *v;
    476      1.1  mrg 	register_t *retval;
    477      1.1  mrg {
    478      1.5  mrg 	struct compat_43_compat_netbsd32_orecv_args /* {
    479      1.1  mrg 		syscallarg(int) s;
    480      1.5  mrg 		syscallarg(netbsd32_caddr_t) buf;
    481      1.1  mrg 		syscallarg(int) len;
    482      1.1  mrg 		syscallarg(int) flags;
    483      1.1  mrg 	} */ *uap = v;
    484      1.1  mrg 	struct compat_43_sys_recv_args ua;
    485      1.1  mrg 
    486      1.6  mrg 	NETBSD32TO64_UAP(s);
    487      1.6  mrg 	NETBSD32TOX64_UAP(buf, caddr_t);
    488      1.6  mrg 	NETBSD32TO64_UAP(len);
    489      1.6  mrg 	NETBSD32TO64_UAP(flags);
    490      1.2  mrg 	return (compat_43_sys_recv(p, &ua, retval));
    491      1.1  mrg }
    492      1.1  mrg 
    493      1.1  mrg /*
    494      1.1  mrg  * XXX convert these to use a common iovec code to the native
    495      1.1  mrg  * netbsd call.
    496      1.1  mrg  */
    497      1.1  mrg int
    498      1.5  mrg compat_43_compat_netbsd32_orecvmsg(p, v, retval)
    499      1.1  mrg 	struct proc *p;
    500      1.1  mrg 	void *v;
    501      1.1  mrg 	register_t *retval;
    502      1.1  mrg {
    503      1.5  mrg 	struct compat_43_compat_netbsd32_orecvmsg_args /* {
    504      1.1  mrg 		syscallarg(int) s;
    505      1.5  mrg 		syscallarg(netbsd32_omsghdrp_t) msg;
    506      1.1  mrg 		syscallarg(int) flags;
    507      1.1  mrg 	} */ *uap = v;
    508      1.1  mrg 	struct compat_43_sys_recvmsg_args ua;
    509      1.1  mrg 	struct omsghdr omh;
    510      1.1  mrg 	struct omsghdr *omhp = &omh;
    511      1.5  mrg 	struct netbsd32_omsghdr *omhp32;
    512      1.1  mrg 	struct iovec *iovec43p;
    513      1.5  mrg 	struct netbsd32_iovec *iovec32p;
    514      1.1  mrg 	int i;
    515      1.1  mrg 
    516      1.6  mrg 	NETBSD32TO64_UAP(s);
    517      1.6  mrg 	NETBSD32TO64_UAP(flags);
    518      1.1  mrg 
    519      1.1  mrg 	SCARG(&ua, msg) = omhp;
    520      1.5  mrg 	omhp32 = (struct netbsd32_omsghdr *)(u_long)SCARG(uap, msg);
    521      1.1  mrg 	omhp->msg_name = (caddr_t)(u_long)omhp32->msg_name;
    522      1.1  mrg 	omhp->msg_namelen = omhp32->msg_namelen;
    523      1.1  mrg 	omhp->msg_iovlen = (size_t)omhp32->msg_iovlen;
    524      1.1  mrg 	MALLOC(omhp->msg_iov, struct iovec *, sizeof(struct iovec) * omhp->msg_iovlen, M_TEMP, M_WAITOK);
    525      1.1  mrg 	iovec43p = omhp->msg_iov;
    526      1.5  mrg 	iovec32p = (struct netbsd32_iovec *)(u_long)omhp32->msg_iov;
    527      1.1  mrg 	for (i = 0; i < omhp->msg_iovlen; i++, iovec43p++, iovec32p++) {
    528      1.1  mrg 		iovec43p->iov_base = (struct iovec *)(u_long)iovec32p->iov_base;
    529      1.1  mrg 		iovec43p->iov_len = (size_t)iovec32p->iov_len;
    530      1.1  mrg 	}
    531      1.1  mrg 
    532      1.1  mrg 	omhp->msg_accrights = (caddr_t)(u_long)omhp32->msg_accrights;
    533      1.1  mrg 	omhp->msg_accrightslen = omhp32->msg_accrightslen;
    534      1.1  mrg 
    535      1.1  mrg 	return (compat_43_sys_recvmsg(p, &ua, retval));
    536      1.1  mrg }
    537      1.1  mrg 
    538      1.1  mrg int
    539      1.5  mrg compat_43_compat_netbsd32_osendmsg(p, v, retval)
    540      1.1  mrg 	struct proc *p;
    541      1.1  mrg 	void *v;
    542      1.1  mrg 	register_t *retval;
    543      1.1  mrg {
    544      1.5  mrg 	struct compat_43_compat_netbsd32_osendmsg_args /* {
    545      1.1  mrg 		syscallarg(int) s;
    546      1.5  mrg 		syscallarg(netbsd32_caddr_t) msg;
    547      1.1  mrg 		syscallarg(int) flags;
    548      1.1  mrg 	} */ *uap = v;
    549      1.1  mrg 	struct compat_43_sys_sendmsg_args ua;
    550      1.1  mrg 	struct omsghdr omh;
    551      1.1  mrg 	struct omsghdr *omhp = &omh;
    552      1.5  mrg 	struct netbsd32_omsghdr *omhp32;
    553      1.1  mrg 	struct iovec *iovec43p;
    554      1.5  mrg 	struct netbsd32_iovec *iovec32p;
    555      1.1  mrg 	int i;
    556      1.1  mrg 
    557      1.6  mrg 	NETBSD32TO64_UAP(s);
    558      1.6  mrg 	NETBSD32TO64_UAP(flags);
    559      1.1  mrg 
    560      1.1  mrg 	SCARG(&ua, msg) = (caddr_t)(u_long)omhp;
    561      1.5  mrg 	omhp32 = (struct netbsd32_omsghdr *)(u_long)SCARG(uap, msg);
    562      1.1  mrg 	omhp->msg_name = (caddr_t)(u_long)omhp32->msg_name;
    563      1.1  mrg 	omhp->msg_namelen = omhp32->msg_namelen;
    564      1.1  mrg 	omhp->msg_iovlen = (size_t)omhp32->msg_iovlen;
    565      1.1  mrg 	MALLOC(omhp->msg_iov, struct iovec *, sizeof(struct iovec) * omhp->msg_iovlen, M_TEMP, M_WAITOK);
    566      1.1  mrg 	iovec43p = omhp->msg_iov;
    567      1.5  mrg 	iovec32p = (struct netbsd32_iovec *)(u_long)omhp32->msg_iov;
    568      1.1  mrg 	for (i = 0; i < omhp->msg_iovlen; i++, iovec43p++, iovec32p++) {
    569      1.1  mrg 		iovec43p->iov_base = (void *)(u_long)iovec32p->iov_base;
    570      1.1  mrg 		iovec43p->iov_len = (size_t)iovec32p->iov_len;
    571      1.1  mrg 	}
    572      1.1  mrg 
    573      1.1  mrg 	omhp->msg_accrights = (caddr_t)(u_long)omhp32->msg_accrights;
    574      1.1  mrg 	omhp->msg_accrightslen = omhp32->msg_accrightslen;
    575      1.1  mrg 
    576      1.1  mrg 	return (compat_43_sys_sendmsg(p, &ua, retval));
    577      1.1  mrg }
    578      1.1  mrg 
    579      1.1  mrg int
    580      1.5  mrg compat_43_compat_netbsd32_orecvfrom(p, v, retval)
    581      1.1  mrg 	struct proc *p;
    582      1.1  mrg 	void *v;
    583      1.1  mrg 	register_t *retval;
    584      1.1  mrg {
    585      1.5  mrg 	struct compat_43_compat_netbsd32_orecvfrom_args /* {
    586      1.1  mrg 		syscallarg(int) s;
    587      1.5  mrg 		syscallarg(netbsd32_caddr_t) buf;
    588      1.5  mrg 		syscallarg(netbsd32_size_t) len;
    589      1.1  mrg 		syscallarg(int) flags;
    590      1.5  mrg 		syscallarg(netbsd32_caddr_t) from;
    591      1.5  mrg 		syscallarg(netbsd32_intp) fromlenaddr;
    592      1.1  mrg 	} */ *uap = v;
    593      1.1  mrg 	struct compat_43_sys_recvfrom_args ua;
    594      1.1  mrg 
    595      1.6  mrg 	NETBSD32TO64_UAP(s);
    596      1.6  mrg 	NETBSD32TOX64_UAP(buf, caddr_t);
    597      1.6  mrg 	NETBSD32TOX_UAP(len, size_t);
    598      1.6  mrg 	NETBSD32TO64_UAP(flags);
    599      1.6  mrg 	NETBSD32TOX64_UAP(from, caddr_t);
    600      1.6  mrg 	NETBSD32TOP_UAP(fromlenaddr, int);
    601      1.1  mrg 	return (compat_43_sys_recvfrom(p, &ua, retval));
    602      1.1  mrg }
    603      1.1  mrg 
    604      1.1  mrg int
    605      1.5  mrg compat_43_compat_netbsd32_ogetsockname(p, v, retval)
    606      1.1  mrg 	struct proc *p;
    607      1.1  mrg 	void *v;
    608      1.1  mrg 	register_t *retval;
    609      1.1  mrg {
    610      1.5  mrg 	struct compat_43_compat_netbsd32_ogetsockname_args /* {
    611      1.1  mrg 		syscallarg(int) fdec;
    612      1.5  mrg 		syscallarg(netbsd32_caddr_t) asa;
    613      1.5  mrg 		syscallarg(netbsd32_intp) alen;
    614      1.1  mrg 	} */ *uap = v;
    615      1.1  mrg 	struct compat_43_sys_getsockname_args ua;
    616      1.1  mrg 
    617      1.6  mrg 	NETBSD32TO64_UAP(fdec);
    618      1.6  mrg 	NETBSD32TOX64_UAP(asa, caddr_t);
    619      1.6  mrg 	NETBSD32TOP_UAP(alen, int);
    620      1.1  mrg 	return (compat_43_sys_getsockname(p, &ua, retval));
    621      1.1  mrg }
    622      1.1  mrg 
    623      1.1  mrg int
    624      1.5  mrg compat_43_compat_netbsd32_ogetpeername(p, v, retval)
    625      1.1  mrg 	struct proc *p;
    626      1.1  mrg 	void *v;
    627      1.1  mrg 	register_t *retval;
    628      1.1  mrg {
    629      1.5  mrg 	struct compat_43_compat_netbsd32_ogetpeername_args /* {
    630      1.1  mrg 		syscallarg(int) fdes;
    631      1.5  mrg 		syscallarg(netbsd32_caddr_t) asa;
    632      1.5  mrg 		syscallarg(netbsd32_intp) alen;
    633      1.1  mrg 	} */ *uap = v;
    634      1.1  mrg 	struct compat_43_sys_getpeername_args ua;
    635      1.1  mrg 
    636      1.6  mrg 	NETBSD32TO64_UAP(fdes);
    637      1.6  mrg 	NETBSD32TOX64_UAP(asa, caddr_t);
    638      1.6  mrg 	NETBSD32TOP_UAP(alen, int);
    639      1.1  mrg 	return (compat_43_sys_getpeername(p, &ua, retval));
    640      1.1  mrg }
    641      1.1  mrg 
    642      1.1  mrg /* signal syscalls */
    643      1.1  mrg int
    644      1.5  mrg compat_43_compat_netbsd32_osigvec(p, v, retval)
    645      1.1  mrg 	struct proc *p;
    646      1.1  mrg 	void *v;
    647      1.1  mrg 	register_t *retval;
    648      1.1  mrg {
    649      1.5  mrg 	struct compat_43_compat_netbsd32_osigvec_args /* {
    650      1.1  mrg 		syscallarg(int) signum;
    651      1.5  mrg 		syscallarg(netbsd32_sigvecp_t) nsv;
    652      1.5  mrg 		syscallarg(netbsd32_sigvecp_t) osv;
    653      1.1  mrg 	} */ *uap = v;
    654      1.1  mrg 	struct compat_43_sys_sigvec_args ua;
    655      1.5  mrg 	struct netbsd32_sigvec *sv32p;
    656      1.1  mrg 	struct sigvec nsv, osv;
    657      1.1  mrg 	int rv;
    658      1.1  mrg 
    659      1.6  mrg 	NETBSD32TO64_UAP(signum);
    660      1.1  mrg 	if (SCARG(uap, osv))
    661      1.1  mrg 		SCARG(&ua, osv) = &osv;
    662      1.1  mrg 	else
    663      1.1  mrg 		SCARG(&ua, osv) = NULL;
    664      1.1  mrg 	if (SCARG(uap, nsv)) {
    665      1.1  mrg 		SCARG(&ua, nsv) = &nsv;
    666      1.5  mrg 		sv32p = (struct netbsd32_sigvec *)(u_long)SCARG(uap, nsv);
    667      1.1  mrg 		nsv.sv_handler = (void *)(u_long)sv32p->sv_handler;
    668      1.1  mrg 		nsv.sv_mask = sv32p->sv_mask;
    669      1.1  mrg 		nsv.sv_flags = sv32p->sv_flags;
    670      1.1  mrg 	} else
    671      1.1  mrg 		SCARG(&ua, nsv) = NULL;
    672      1.1  mrg 	rv = compat_43_sys_sigvec(p, &ua, retval);
    673      1.1  mrg 	if (rv)
    674      1.1  mrg 		return (rv);
    675      1.1  mrg 
    676      1.1  mrg 	if (SCARG(uap, osv)) {
    677      1.5  mrg 		sv32p = (struct netbsd32_sigvec *)(u_long)SCARG(uap, osv);
    678      1.5  mrg 		sv32p->sv_handler = (netbsd32_sigvecp_t)(u_long)osv.sv_handler;
    679      1.1  mrg 		sv32p->sv_mask = osv.sv_mask;
    680      1.1  mrg 		sv32p->sv_flags = osv.sv_flags;
    681      1.1  mrg 	}
    682      1.1  mrg 
    683      1.1  mrg 	return (0);
    684      1.4  eeh }
    685      1.4  eeh 
    686      1.4  eeh int
    687      1.5  mrg compat_43_compat_netbsd32_sigblock(p, v, retval)
    688      1.4  eeh 	struct proc *p;
    689      1.4  eeh 	void *v;
    690      1.4  eeh 	register_t *retval;
    691      1.4  eeh {
    692      1.5  mrg 	struct compat_43_compat_netbsd32_sigblock_args /* {
    693      1.4  eeh 		syscallarg(int) mask;
    694      1.4  eeh 	} */ *uap = v;
    695      1.4  eeh 	struct compat_43_sys_sigblock_args ua;
    696      1.4  eeh 
    697      1.6  mrg 	NETBSD32TO64_UAP(mask);
    698      1.4  eeh 	return (compat_43_sys_sigblock(p, &ua, retval));
    699      1.4  eeh }
    700      1.4  eeh 
    701      1.4  eeh int
    702      1.5  mrg compat_43_compat_netbsd32_sigsetmask(p, v, retval)
    703      1.4  eeh 	struct proc *p;
    704      1.4  eeh 	void *v;
    705      1.4  eeh 	register_t *retval;
    706      1.4  eeh {
    707      1.5  mrg 	struct compat_43_compat_netbsd32_sigsetmask_args /* {
    708      1.4  eeh 		syscallarg(int) mask;
    709      1.4  eeh 	} */ *uap = v;
    710      1.4  eeh 	struct compat_43_sys_sigsetmask_args ua;
    711      1.4  eeh 
    712      1.6  mrg 	NETBSD32TO64_UAP(mask);
    713      1.4  eeh 	return (compat_43_sys_sigsetmask(p, &ua, retval));
    714      1.1  mrg }
    715      1.1  mrg 
    716      1.1  mrg int
    717      1.5  mrg compat_43_compat_netbsd32_osigstack(p, v, retval)
    718      1.1  mrg 	struct proc *p;
    719      1.1  mrg 	void *v;
    720      1.1  mrg 	register_t *retval;
    721      1.1  mrg {
    722      1.5  mrg 	struct compat_43_compat_netbsd32_osigstack_args /* {
    723      1.5  mrg 		syscallarg(netbsd32_sigstackp_t) nss;
    724      1.5  mrg 		syscallarg(netbsd32_sigstackp_t) oss;
    725      1.1  mrg 	} */ *uap = v;
    726      1.1  mrg 	struct compat_43_sys_sigstack_args ua;
    727      1.5  mrg 	struct netbsd32_sigstack *ss32p;
    728      1.1  mrg 	struct sigstack nss, oss;
    729      1.1  mrg 	int rv;
    730      1.1  mrg 
    731      1.1  mrg 	if (SCARG(uap, oss))
    732      1.1  mrg 		SCARG(&ua, oss) = &oss;
    733      1.1  mrg 	else
    734      1.1  mrg 		SCARG(&ua, oss) = NULL;
    735      1.1  mrg 	if (SCARG(uap, nss)) {
    736      1.1  mrg 		SCARG(&ua, nss) = &nss;
    737      1.5  mrg 		ss32p = (struct netbsd32_sigstack *)(u_long)SCARG(uap, nss);
    738      1.1  mrg 		nss.ss_sp = (void *)(u_long)ss32p->ss_sp;
    739      1.1  mrg 		nss.ss_onstack = ss32p->ss_onstack;
    740      1.1  mrg 	} else
    741      1.1  mrg 		SCARG(&ua, nss) = NULL;
    742      1.1  mrg 
    743      1.1  mrg 	rv = compat_43_sys_sigstack(p, &ua, retval);
    744      1.1  mrg 	if (rv)
    745      1.1  mrg 		return (rv);
    746      1.1  mrg 
    747      1.1  mrg 	if (SCARG(uap, oss)) {
    748      1.5  mrg 		ss32p = (struct netbsd32_sigstack *)(u_long)SCARG(uap, oss);
    749      1.5  mrg 		ss32p->ss_sp = (netbsd32_sigstackp_t)(u_long)oss.ss_sp;
    750      1.1  mrg 		ss32p->ss_onstack = oss.ss_onstack;
    751      1.1  mrg 	}
    752      1.1  mrg 
    753      1.1  mrg 	return (0);
    754      1.1  mrg }
    755