Home | History | Annotate | Line # | Download | only in netbsd32
netbsd32_compat_43.c revision 1.8.2.1
      1  1.8.2.1  bouyer /*	$NetBSD: netbsd32_compat_43.c,v 1.8.2.1 2000/11/20 18:08:27 bouyer 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.7     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.7     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.8.2.1  bouyer #include <uvm/uvm_extern.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.8.2.1  bouyer static void netbsd32_from_stat43 __P((struct stat43 *, struct netbsd32_stat43 *));
     49  1.8.2.1  bouyer int compat_43_netbsd32_sethostid __P((struct proc *, void *, register_t *));
     50  1.8.2.1  bouyer int compat_43_netbsd32_killpg __P((struct proc *, void *, register_t *retval));
     51  1.8.2.1  bouyer int compat_43_netbsd32_sigblock __P((struct proc *, void *, register_t *retval));
     52  1.8.2.1  bouyer int compat_43_netbsd32_sigblock __P((struct proc *, void *, register_t *retval));
     53  1.8.2.1  bouyer 
     54  1.8.2.1  bouyer static void
     55      1.5     mrg netbsd32_from_stat43(sp43, sp32)
     56      1.1     mrg 	struct stat43 *sp43;
     57      1.5     mrg 	struct netbsd32_stat43 *sp32;
     58      1.1     mrg {
     59      1.1     mrg 
     60      1.1     mrg 	sp32->st_dev = sp43->st_dev;
     61      1.1     mrg 	sp32->st_ino = sp43->st_ino;
     62      1.1     mrg 	sp32->st_mode = sp43->st_mode;
     63      1.1     mrg 	sp32->st_nlink = sp43->st_nlink;
     64      1.1     mrg 	sp32->st_uid = sp43->st_uid;
     65      1.1     mrg 	sp32->st_gid = sp43->st_gid;
     66      1.1     mrg 	sp32->st_rdev = sp43->st_rdev;
     67      1.1     mrg 	sp32->st_size = sp43->st_size;
     68      1.1     mrg 	sp32->st_atimespec.tv_sec = sp43->st_atimespec.tv_sec;
     69      1.1     mrg 	sp32->st_atimespec.tv_nsec = sp43->st_atimespec.tv_nsec;
     70      1.1     mrg 	sp32->st_mtimespec.tv_sec = sp43->st_mtimespec.tv_sec;
     71      1.1     mrg 	sp32->st_mtimespec.tv_nsec = sp43->st_mtimespec.tv_nsec;
     72      1.1     mrg 	sp32->st_ctimespec.tv_sec = sp43->st_ctimespec.tv_sec;
     73      1.1     mrg 	sp32->st_ctimespec.tv_nsec = sp43->st_ctimespec.tv_nsec;
     74      1.1     mrg 	sp32->st_blksize = sp43->st_blksize;
     75      1.1     mrg 	sp32->st_blocks = sp43->st_blocks;
     76      1.1     mrg 	sp32->st_flags = sp43->st_flags;
     77      1.1     mrg 	sp32->st_gen = sp43->st_gen;
     78      1.1     mrg }
     79      1.1     mrg 
     80      1.1     mrg /* file system syscalls */
     81      1.1     mrg int
     82      1.8     eeh compat_43_netbsd32_ocreat(p, v, retval)
     83      1.1     mrg 	struct proc *p;
     84      1.1     mrg 	void *v;
     85      1.1     mrg 	register_t *retval;
     86      1.1     mrg {
     87      1.8     eeh 	struct compat_43_netbsd32_ocreat_args /* {
     88      1.5     mrg 		syscallarg(const netbsd32_charp) path;
     89      1.1     mrg 		syscallarg(mode_t) mode;
     90      1.1     mrg 	} */ *uap = v;
     91      1.1     mrg 	struct sys_open_args  ua;
     92      1.1     mrg 	caddr_t sg;
     93      1.1     mrg 
     94      1.6     mrg 	NETBSD32TOP_UAP(path, const char);
     95      1.6     mrg 	NETBSD32TO64_UAP(mode);
     96      1.1     mrg 	SCARG(&ua, flags) = O_WRONLY | O_CREAT | O_TRUNC;
     97      1.1     mrg 	sg = stackgap_init(p->p_emul);
     98      1.6     mrg 	NETBSD32_CHECK_ALT_EXIST(p, &sg, SCARG(&ua, path));
     99      1.1     mrg 
    100      1.1     mrg 	return (sys_open(p, &ua, retval));
    101      1.1     mrg }
    102      1.1     mrg 
    103      1.1     mrg int
    104      1.8     eeh compat_43_netbsd32_olseek(p, v, retval)
    105      1.1     mrg 	struct proc *p;
    106      1.1     mrg 	void *v;
    107      1.1     mrg 	register_t *retval;
    108      1.1     mrg {
    109      1.8     eeh 	struct compat_43_netbsd32_olseek_args /* {
    110      1.1     mrg 		syscallarg(int) fd;
    111      1.5     mrg 		syscallarg(netbsd32_long) offset;
    112      1.1     mrg 		syscallarg(int) whence;
    113      1.1     mrg 	} */ *uap = v;
    114      1.1     mrg 	struct sys_lseek_args ua;
    115      1.1     mrg 	int rv;
    116      1.1     mrg 	off_t rt;
    117      1.1     mrg 
    118      1.1     mrg 	SCARG(&ua, fd) = SCARG(uap, fd);
    119      1.6     mrg 	NETBSD32TOX_UAP(offset, long);
    120      1.6     mrg 	NETBSD32TO64_UAP(whence);
    121      1.1     mrg 	rv = sys_lseek(p, &ua, (register_t *)&rt);
    122      1.5     mrg 	*(netbsd32_long *)retval = rt;
    123      1.1     mrg 
    124      1.1     mrg 	return (rv);
    125      1.1     mrg }
    126      1.1     mrg 
    127      1.1     mrg int
    128      1.8     eeh compat_43_netbsd32_stat43(p, v, retval)
    129      1.1     mrg 	struct proc *p;
    130      1.1     mrg 	void *v;
    131      1.1     mrg 	register_t *retval;
    132      1.1     mrg {
    133      1.8     eeh 	struct compat_43_netbsd32_stat43_args /* {
    134      1.5     mrg 		syscallarg(const netbsd32_charp) path;
    135      1.5     mrg 		syscallarg(netbsd32_stat43p_t) ub;
    136      1.1     mrg 	} */ *uap = v;
    137      1.5     mrg 	struct netbsd32_stat43 *sp32;
    138      1.1     mrg 	struct stat43 sb43;
    139      1.1     mrg 	struct stat43 *sp43 = &sb43;
    140      1.1     mrg 	struct compat_43_sys_stat_args ua;
    141      1.1     mrg 	caddr_t sg;
    142      1.1     mrg 	int rv;
    143      1.1     mrg 
    144      1.6     mrg 	NETBSD32TOP_UAP(path, const char);
    145      1.1     mrg 	SCARG(&ua, ub) = &sb43;
    146      1.1     mrg 	sg = stackgap_init(p->p_emul);
    147      1.6     mrg 	NETBSD32_CHECK_ALT_EXIST(p, &sg, SCARG(&ua, path));
    148      1.1     mrg 
    149      1.1     mrg 	rv = compat_43_sys_stat(p, &ua, retval);
    150      1.1     mrg 
    151      1.5     mrg 	sp32 = (struct netbsd32_stat43 *)(u_long)SCARG(uap, ub);
    152      1.5     mrg 	netbsd32_from_stat43(sp43, sp32);
    153      1.1     mrg 
    154      1.1     mrg 	return (rv);
    155      1.1     mrg }
    156      1.1     mrg 
    157      1.1     mrg int
    158      1.8     eeh compat_43_netbsd32_lstat43(p, v, retval)
    159      1.1     mrg 	struct proc *p;
    160      1.1     mrg 	void *v;
    161      1.1     mrg 	register_t *retval;
    162      1.1     mrg {
    163      1.8     eeh 	struct compat_43_netbsd32_lstat43_args /* {
    164      1.5     mrg 		syscallarg(const netbsd32_charp) path;
    165      1.5     mrg 		syscallarg(netbsd32_stat43p_t) ub;
    166      1.1     mrg 	} */ *uap = v;
    167      1.5     mrg 	struct netbsd32_stat43 *sp32;
    168      1.1     mrg 	struct stat43 sb43;
    169      1.1     mrg 	struct stat43 *sp43 = &sb43;
    170      1.1     mrg 	struct compat_43_sys_lstat_args ua;
    171      1.1     mrg 	caddr_t sg;
    172      1.1     mrg 	int rv;
    173      1.1     mrg 
    174      1.6     mrg 	NETBSD32TOP_UAP(path, const char);
    175      1.1     mrg 	SCARG(&ua, ub) = &sb43;
    176      1.1     mrg 	sg = stackgap_init(p->p_emul);
    177      1.6     mrg 	NETBSD32_CHECK_ALT_EXIST(p, &sg, SCARG(&ua, path));
    178      1.1     mrg 
    179      1.1     mrg 	rv = compat_43_sys_stat(p, &ua, retval);
    180      1.1     mrg 
    181      1.5     mrg 	sp32 = (struct netbsd32_stat43 *)(u_long)SCARG(uap, ub);
    182      1.5     mrg 	netbsd32_from_stat43(sp43, sp32);
    183      1.1     mrg 
    184      1.1     mrg 	return (rv);
    185      1.1     mrg }
    186      1.1     mrg 
    187      1.1     mrg int
    188      1.8     eeh compat_43_netbsd32_fstat43(p, v, retval)
    189      1.1     mrg 	struct proc *p;
    190      1.1     mrg 	void *v;
    191      1.1     mrg 	register_t *retval;
    192      1.1     mrg {
    193      1.8     eeh 	struct compat_43_netbsd32_fstat43_args /* {
    194      1.1     mrg 		syscallarg(int) fd;
    195      1.5     mrg 		syscallarg(netbsd32_stat43p_t) sb;
    196      1.1     mrg 	} */ *uap = v;
    197      1.5     mrg 	struct netbsd32_stat43 *sp32;
    198      1.1     mrg 	struct stat43 sb43;
    199      1.1     mrg 	struct stat43 *sp43 = &sb43;
    200      1.1     mrg 	struct compat_43_sys_fstat_args ua;
    201      1.1     mrg 	int rv;
    202      1.1     mrg 
    203      1.6     mrg 	NETBSD32TO64_UAP(fd);
    204      1.1     mrg 	SCARG(&ua, sb) = &sb43;
    205      1.1     mrg 	rv = compat_43_sys_fstat(p, &ua, retval);
    206      1.1     mrg 
    207      1.5     mrg 	sp32 = (struct netbsd32_stat43 *)(u_long)SCARG(uap, sb);
    208      1.5     mrg 	netbsd32_from_stat43(sp43, sp32);
    209      1.1     mrg 
    210      1.1     mrg 	return (rv);
    211      1.1     mrg }
    212      1.1     mrg 
    213      1.1     mrg int
    214      1.8     eeh compat_43_netbsd32_otruncate(p, v, retval)
    215      1.1     mrg 	struct proc *p;
    216      1.1     mrg 	void *v;
    217      1.1     mrg 	register_t *retval;
    218      1.1     mrg {
    219      1.8     eeh 	struct compat_43_netbsd32_otruncate_args /* {
    220      1.5     mrg 		syscallarg(const netbsd32_charp) path;
    221      1.5     mrg 		syscallarg(netbsd32_long) length;
    222      1.1     mrg 	} */ *uap = v;
    223      1.1     mrg 	struct sys_truncate_args ua;
    224      1.1     mrg 
    225      1.6     mrg 	NETBSD32TOP_UAP(path, const char);
    226      1.6     mrg 	NETBSD32TO64_UAP(length);
    227      1.1     mrg 	return (sys_ftruncate(p, &ua, retval));
    228      1.1     mrg }
    229      1.1     mrg 
    230      1.1     mrg int
    231      1.8     eeh compat_43_netbsd32_oftruncate(p, v, retval)
    232      1.1     mrg 	struct proc *p;
    233      1.1     mrg 	void *v;
    234      1.1     mrg 	register_t *retval;
    235      1.1     mrg {
    236      1.8     eeh 	struct compat_43_netbsd32_oftruncate_args /* {
    237      1.1     mrg 		syscallarg(int) fd;
    238      1.5     mrg 		syscallarg(netbsd32_long) length;
    239      1.1     mrg 	} */ *uap = v;
    240      1.1     mrg 	struct sys_ftruncate_args ua;
    241      1.1     mrg 
    242      1.6     mrg 	NETBSD32TO64_UAP(fd);
    243      1.6     mrg 	NETBSD32TO64_UAP(length);
    244      1.1     mrg 	return (sys_ftruncate(p, &ua, retval));
    245      1.1     mrg }
    246      1.1     mrg 
    247      1.1     mrg int
    248      1.8     eeh compat_43_netbsd32_ogetdirentries(p, v, retval)
    249      1.1     mrg 	struct proc *p;
    250      1.1     mrg 	void *v;
    251      1.1     mrg 	register_t *retval;
    252      1.1     mrg {
    253      1.8     eeh 	struct compat_43_netbsd32_ogetdirentries_args /* {
    254      1.1     mrg 		syscallarg(int) fd;
    255      1.5     mrg 		syscallarg(netbsd32_charp) buf;
    256      1.1     mrg 		syscallarg(u_int) count;
    257      1.5     mrg 		syscallarg(netbsd32_longp) basep;
    258      1.1     mrg 	} */ *uap = v;
    259      1.1     mrg 	struct compat_43_sys_getdirentries_args ua;
    260      1.1     mrg 
    261      1.6     mrg 	NETBSD32TO64_UAP(fd);
    262      1.6     mrg 	NETBSD32TOP_UAP(buf, char);
    263      1.6     mrg 	NETBSD32TO64_UAP(count);
    264      1.6     mrg 	NETBSD32TOP_UAP(basep, long);
    265      1.1     mrg 	return (compat_43_sys_getdirentries(p, &ua, retval));
    266      1.1     mrg }
    267      1.1     mrg 
    268      1.1     mrg /* kernel syscalls */
    269      1.1     mrg int
    270      1.8     eeh compat_43_netbsd32_ogetkerninfo(p, v, retval)
    271      1.1     mrg 	struct proc *p;
    272      1.1     mrg 	void *v;
    273      1.1     mrg 	register_t *retval;
    274      1.1     mrg {
    275      1.8     eeh 	struct compat_43_netbsd32_ogetkerninfo_args /* {
    276      1.1     mrg 		syscallarg(int) op;
    277      1.5     mrg 		syscallarg(netbsd32_charp) where;
    278      1.5     mrg 		syscallarg(netbsd32_intp) size;
    279      1.1     mrg 		syscallarg(int) arg;
    280      1.1     mrg 	} */ *uap = v;
    281      1.1     mrg 	struct compat_43_sys_getkerninfo_args ua;
    282      1.1     mrg 
    283      1.6     mrg 	NETBSD32TO64_UAP(op);
    284      1.6     mrg 	NETBSD32TOP_UAP(where, char);
    285      1.6     mrg 	NETBSD32TOP_UAP(size, int);
    286      1.6     mrg 	NETBSD32TO64_UAP(arg);
    287      1.1     mrg 	return (compat_43_sys_getkerninfo(p, &ua, retval));
    288      1.1     mrg }
    289      1.1     mrg 
    290      1.1     mrg int
    291      1.8     eeh compat_43_netbsd32_ogethostname(p, v, retval)
    292      1.1     mrg 	struct proc *p;
    293      1.1     mrg 	void *v;
    294      1.1     mrg 	register_t *retval;
    295      1.1     mrg {
    296      1.8     eeh 	struct compat_43_netbsd32_ogethostname_args /* {
    297      1.5     mrg 		syscallarg(netbsd32_charp) hostname;
    298      1.1     mrg 		syscallarg(u_int) len;
    299      1.1     mrg 	} */ *uap = v;
    300      1.1     mrg 	int name;
    301      1.1     mrg 	size_t sz;
    302      1.1     mrg 
    303      1.1     mrg 	name = KERN_HOSTNAME;
    304      1.1     mrg 	sz = SCARG(uap, len);
    305      1.1     mrg 	return (kern_sysctl(&name, 1, (char *)(u_long)SCARG(uap, hostname),
    306      1.1     mrg 	    &sz, 0, 0, p));
    307      1.1     mrg }
    308      1.1     mrg 
    309      1.1     mrg int
    310      1.8     eeh compat_43_netbsd32_osethostname(p, v, retval)
    311      1.1     mrg 	struct proc *p;
    312      1.1     mrg 	void *v;
    313      1.1     mrg 	register_t *retval;
    314      1.1     mrg {
    315      1.8     eeh 	struct compat_43_netbsd32_osethostname_args /* {
    316      1.5     mrg 		syscallarg(netbsd32_charp) hostname;
    317      1.1     mrg 		syscallarg(u_int) len;
    318      1.1     mrg 	} */ *uap = v;
    319      1.1     mrg 	int name;
    320      1.1     mrg 	int error;
    321      1.1     mrg 
    322      1.1     mrg 	if ((error = suser(p->p_ucred, &p->p_acflag)) != 0)
    323      1.1     mrg 		return (error);
    324      1.1     mrg 	name = KERN_HOSTNAME;
    325      1.1     mrg 	return (kern_sysctl(&name, 1, 0, 0, (char *)(u_long)SCARG(uap,
    326      1.1     mrg 	    hostname), SCARG(uap, len), p));
    327      1.1     mrg }
    328      1.1     mrg 
    329      1.1     mrg int
    330      1.8     eeh compat_43_netbsd32_sethostid(p, v, retval)
    331      1.4     eeh 	struct proc *p;
    332      1.4     eeh 	void *v;
    333      1.4     eeh 	register_t *retval;
    334      1.4     eeh {
    335      1.8     eeh 	struct compat_43_netbsd32_sethostid_args /* {
    336      1.4     eeh 		syscallarg(int32_t) hostid;
    337      1.4     eeh 	} */ *uap = v;
    338      1.4     eeh 	struct compat_43_sys_sethostid_args ua;
    339      1.4     eeh 
    340      1.6     mrg 	NETBSD32TO64_UAP(hostid);
    341      1.4     eeh 	return (compat_43_sys_sethostid(p, &ua, retval));
    342      1.4     eeh }
    343      1.4     eeh 
    344      1.4     eeh int
    345      1.8     eeh compat_43_netbsd32_ogetrlimit(p, v, retval)
    346      1.1     mrg 	struct proc *p;
    347      1.1     mrg 	void *v;
    348      1.1     mrg 	register_t *retval;
    349      1.1     mrg {
    350      1.8     eeh 	struct compat_43_netbsd32_ogetrlimit_args /* {
    351      1.1     mrg 		syscallarg(int) which;
    352      1.5     mrg 		syscallarg(netbsd32_orlimitp_t) rlp;
    353      1.1     mrg 	} */ *uap = v;
    354      1.1     mrg 	struct compat_43_sys_getrlimit_args ua;
    355      1.1     mrg 
    356      1.6     mrg 	NETBSD32TO64_UAP(which);
    357      1.6     mrg 	NETBSD32TOP_UAP(rlp, struct orlimit);
    358      1.1     mrg 	return (compat_43_sys_getrlimit(p, &ua, retval));
    359      1.1     mrg }
    360      1.1     mrg 
    361      1.1     mrg int
    362      1.8     eeh compat_43_netbsd32_osetrlimit(p, v, retval)
    363      1.1     mrg 	struct proc *p;
    364      1.1     mrg 	void *v;
    365      1.1     mrg 	register_t *retval;
    366      1.1     mrg {
    367      1.8     eeh 	struct compat_43_netbsd32_osetrlimit_args /* {
    368      1.1     mrg 		syscallarg(int) which;
    369      1.5     mrg 		syscallarg(netbsd32_orlimitp_t) rlp;
    370      1.1     mrg 	} */ *uap = v;
    371      1.1     mrg 	struct compat_43_sys_setrlimit_args ua;
    372      1.1     mrg 
    373      1.6     mrg 	NETBSD32TO64_UAP(which);
    374      1.6     mrg 	NETBSD32TOP_UAP(rlp, struct orlimit);
    375      1.1     mrg 	return (compat_43_sys_setrlimit(p, &ua, retval));
    376      1.1     mrg }
    377      1.1     mrg 
    378      1.4     eeh int
    379      1.8     eeh compat_43_netbsd32_killpg(p, v, retval)
    380      1.4     eeh 	struct proc *p;
    381      1.4     eeh 	void *v;
    382      1.4     eeh 	register_t *retval;
    383      1.4     eeh {
    384      1.8     eeh 	struct compat_43_netbsd32_killpg_args /* {
    385      1.4     eeh 		syscallarg(int) pgid;
    386      1.4     eeh 		syscallarg(int) signum;
    387      1.4     eeh 	} */ *uap = v;
    388      1.4     eeh 	struct compat_43_sys_killpg_args ua;
    389      1.4     eeh 
    390      1.6     mrg 	NETBSD32TO64_UAP(pgid);
    391      1.6     mrg 	NETBSD32TO64_UAP(signum);
    392      1.4     eeh 	return (compat_43_sys_killpg(p, &ua, retval));
    393      1.4     eeh }
    394      1.4     eeh 
    395      1.1     mrg /* virtual memory syscalls */
    396      1.1     mrg int
    397      1.8     eeh compat_43_netbsd32_ommap(p, v, retval)
    398      1.1     mrg 	struct proc *p;
    399      1.1     mrg 	void *v;
    400      1.1     mrg 	register_t *retval;
    401      1.1     mrg {
    402      1.8     eeh 	struct compat_43_netbsd32_ommap_args /* {
    403      1.5     mrg 		syscallarg(netbsd32_caddr_t) addr;
    404      1.5     mrg 		syscallarg(netbsd32_size_t) len;
    405      1.1     mrg 		syscallarg(int) prot;
    406      1.1     mrg 		syscallarg(int) flags;
    407      1.1     mrg 		syscallarg(int) fd;
    408      1.5     mrg 		syscallarg(netbsd32_long) pos;
    409      1.1     mrg 	} */ *uap = v;
    410      1.1     mrg 	struct compat_43_sys_mmap_args ua;
    411      1.1     mrg 
    412      1.6     mrg 	NETBSD32TOX64_UAP(addr, caddr_t);
    413      1.6     mrg 	NETBSD32TOX_UAP(len, size_t);
    414      1.6     mrg 	NETBSD32TO64_UAP(prot);
    415      1.6     mrg 	NETBSD32TO64_UAP(flags);
    416      1.6     mrg 	NETBSD32TO64_UAP(fd);
    417      1.6     mrg 	NETBSD32TOX_UAP(pos, long);
    418      1.2     mrg 	return (compat_43_sys_mmap(p, &ua, retval));
    419      1.4     eeh }
    420      1.4     eeh 
    421      1.1     mrg /* network syscalls */
    422      1.1     mrg int
    423      1.8     eeh compat_43_netbsd32_oaccept(p, v, retval)
    424      1.1     mrg 	struct proc *p;
    425      1.1     mrg 	void *v;
    426      1.1     mrg 	register_t *retval;
    427      1.1     mrg {
    428      1.8     eeh 	struct compat_43_netbsd32_oaccept_args /* {
    429      1.1     mrg 		syscallarg(int) s;
    430      1.5     mrg 		syscallarg(netbsd32_caddr_t) name;
    431      1.5     mrg 		syscallarg(netbsd32_intp) anamelen;
    432      1.1     mrg 	} */ *uap = v;
    433      1.1     mrg 	struct compat_43_sys_accept_args ua;
    434      1.1     mrg 
    435      1.6     mrg 	NETBSD32TOX_UAP(s, int);
    436      1.6     mrg 	NETBSD32TOX64_UAP(name, caddr_t);
    437      1.6     mrg 	NETBSD32TOP_UAP(anamelen, int);
    438      1.2     mrg 	return (compat_43_sys_accept(p, &ua, retval));
    439      1.1     mrg }
    440      1.1     mrg 
    441      1.1     mrg int
    442      1.8     eeh compat_43_netbsd32_osend(p, v, retval)
    443      1.1     mrg 	struct proc *p;
    444      1.1     mrg 	void *v;
    445      1.1     mrg 	register_t *retval;
    446      1.1     mrg {
    447      1.8     eeh 	struct compat_43_netbsd32_osend_args /* {
    448      1.1     mrg 		syscallarg(int) s;
    449      1.5     mrg 		syscallarg(netbsd32_caddr_t) buf;
    450      1.1     mrg 		syscallarg(int) len;
    451      1.1     mrg 		syscallarg(int) flags;
    452      1.1     mrg 	} */ *uap = v;
    453      1.1     mrg 	struct compat_43_sys_send_args ua;
    454      1.1     mrg 
    455      1.6     mrg 	NETBSD32TO64_UAP(s);
    456      1.6     mrg 	NETBSD32TOX64_UAP(buf, caddr_t);
    457      1.6     mrg 	NETBSD32TO64_UAP(len);
    458      1.6     mrg 	NETBSD32TO64_UAP(flags);
    459      1.2     mrg 	return (compat_43_sys_send(p, &ua, retval));
    460      1.1     mrg }
    461      1.1     mrg 
    462      1.1     mrg int
    463      1.8     eeh compat_43_netbsd32_orecv(p, v, retval)
    464      1.1     mrg 	struct proc *p;
    465      1.1     mrg 	void *v;
    466      1.1     mrg 	register_t *retval;
    467      1.1     mrg {
    468      1.8     eeh 	struct compat_43_netbsd32_orecv_args /* {
    469      1.1     mrg 		syscallarg(int) s;
    470      1.5     mrg 		syscallarg(netbsd32_caddr_t) buf;
    471      1.1     mrg 		syscallarg(int) len;
    472      1.1     mrg 		syscallarg(int) flags;
    473      1.1     mrg 	} */ *uap = v;
    474      1.1     mrg 	struct compat_43_sys_recv_args ua;
    475      1.1     mrg 
    476      1.6     mrg 	NETBSD32TO64_UAP(s);
    477      1.6     mrg 	NETBSD32TOX64_UAP(buf, caddr_t);
    478      1.6     mrg 	NETBSD32TO64_UAP(len);
    479      1.6     mrg 	NETBSD32TO64_UAP(flags);
    480      1.2     mrg 	return (compat_43_sys_recv(p, &ua, retval));
    481      1.1     mrg }
    482      1.1     mrg 
    483      1.1     mrg /*
    484      1.1     mrg  * XXX convert these to use a common iovec code to the native
    485      1.1     mrg  * netbsd call.
    486      1.1     mrg  */
    487      1.1     mrg int
    488      1.8     eeh compat_43_netbsd32_orecvmsg(p, v, retval)
    489      1.1     mrg 	struct proc *p;
    490      1.1     mrg 	void *v;
    491      1.1     mrg 	register_t *retval;
    492      1.1     mrg {
    493      1.8     eeh 	struct compat_43_netbsd32_orecvmsg_args /* {
    494      1.1     mrg 		syscallarg(int) s;
    495      1.5     mrg 		syscallarg(netbsd32_omsghdrp_t) msg;
    496      1.1     mrg 		syscallarg(int) flags;
    497      1.1     mrg 	} */ *uap = v;
    498      1.1     mrg 	struct compat_43_sys_recvmsg_args ua;
    499      1.1     mrg 	struct omsghdr omh;
    500      1.1     mrg 	struct omsghdr *omhp = &omh;
    501      1.5     mrg 	struct netbsd32_omsghdr *omhp32;
    502      1.1     mrg 	struct iovec *iovec43p;
    503      1.5     mrg 	struct netbsd32_iovec *iovec32p;
    504      1.1     mrg 	int i;
    505      1.1     mrg 
    506      1.6     mrg 	NETBSD32TO64_UAP(s);
    507      1.6     mrg 	NETBSD32TO64_UAP(flags);
    508      1.1     mrg 
    509      1.1     mrg 	SCARG(&ua, msg) = omhp;
    510      1.5     mrg 	omhp32 = (struct netbsd32_omsghdr *)(u_long)SCARG(uap, msg);
    511      1.1     mrg 	omhp->msg_name = (caddr_t)(u_long)omhp32->msg_name;
    512      1.1     mrg 	omhp->msg_namelen = omhp32->msg_namelen;
    513      1.1     mrg 	omhp->msg_iovlen = (size_t)omhp32->msg_iovlen;
    514      1.1     mrg 	MALLOC(omhp->msg_iov, struct iovec *, sizeof(struct iovec) * omhp->msg_iovlen, M_TEMP, M_WAITOK);
    515      1.1     mrg 	iovec43p = omhp->msg_iov;
    516      1.5     mrg 	iovec32p = (struct netbsd32_iovec *)(u_long)omhp32->msg_iov;
    517      1.1     mrg 	for (i = 0; i < omhp->msg_iovlen; i++, iovec43p++, iovec32p++) {
    518      1.1     mrg 		iovec43p->iov_base = (struct iovec *)(u_long)iovec32p->iov_base;
    519      1.1     mrg 		iovec43p->iov_len = (size_t)iovec32p->iov_len;
    520      1.1     mrg 	}
    521      1.1     mrg 
    522      1.1     mrg 	omhp->msg_accrights = (caddr_t)(u_long)omhp32->msg_accrights;
    523      1.1     mrg 	omhp->msg_accrightslen = omhp32->msg_accrightslen;
    524      1.1     mrg 
    525      1.1     mrg 	return (compat_43_sys_recvmsg(p, &ua, retval));
    526      1.1     mrg }
    527      1.1     mrg 
    528      1.1     mrg int
    529      1.8     eeh compat_43_netbsd32_osendmsg(p, v, retval)
    530      1.1     mrg 	struct proc *p;
    531      1.1     mrg 	void *v;
    532      1.1     mrg 	register_t *retval;
    533      1.1     mrg {
    534      1.8     eeh 	struct compat_43_netbsd32_osendmsg_args /* {
    535      1.1     mrg 		syscallarg(int) s;
    536      1.5     mrg 		syscallarg(netbsd32_caddr_t) msg;
    537      1.1     mrg 		syscallarg(int) flags;
    538      1.1     mrg 	} */ *uap = v;
    539      1.1     mrg 	struct compat_43_sys_sendmsg_args ua;
    540      1.1     mrg 	struct omsghdr omh;
    541      1.1     mrg 	struct omsghdr *omhp = &omh;
    542      1.5     mrg 	struct netbsd32_omsghdr *omhp32;
    543      1.1     mrg 	struct iovec *iovec43p;
    544      1.5     mrg 	struct netbsd32_iovec *iovec32p;
    545      1.1     mrg 	int i;
    546      1.1     mrg 
    547      1.6     mrg 	NETBSD32TO64_UAP(s);
    548      1.6     mrg 	NETBSD32TO64_UAP(flags);
    549      1.1     mrg 
    550      1.1     mrg 	SCARG(&ua, msg) = (caddr_t)(u_long)omhp;
    551      1.5     mrg 	omhp32 = (struct netbsd32_omsghdr *)(u_long)SCARG(uap, msg);
    552      1.1     mrg 	omhp->msg_name = (caddr_t)(u_long)omhp32->msg_name;
    553      1.1     mrg 	omhp->msg_namelen = omhp32->msg_namelen;
    554      1.1     mrg 	omhp->msg_iovlen = (size_t)omhp32->msg_iovlen;
    555      1.1     mrg 	MALLOC(omhp->msg_iov, struct iovec *, sizeof(struct iovec) * omhp->msg_iovlen, M_TEMP, M_WAITOK);
    556      1.1     mrg 	iovec43p = omhp->msg_iov;
    557      1.5     mrg 	iovec32p = (struct netbsd32_iovec *)(u_long)omhp32->msg_iov;
    558      1.1     mrg 	for (i = 0; i < omhp->msg_iovlen; i++, iovec43p++, iovec32p++) {
    559      1.1     mrg 		iovec43p->iov_base = (void *)(u_long)iovec32p->iov_base;
    560      1.1     mrg 		iovec43p->iov_len = (size_t)iovec32p->iov_len;
    561      1.1     mrg 	}
    562      1.1     mrg 
    563      1.1     mrg 	omhp->msg_accrights = (caddr_t)(u_long)omhp32->msg_accrights;
    564      1.1     mrg 	omhp->msg_accrightslen = omhp32->msg_accrightslen;
    565      1.1     mrg 
    566      1.1     mrg 	return (compat_43_sys_sendmsg(p, &ua, retval));
    567      1.1     mrg }
    568      1.1     mrg 
    569      1.1     mrg int
    570      1.8     eeh compat_43_netbsd32_orecvfrom(p, v, retval)
    571      1.1     mrg 	struct proc *p;
    572      1.1     mrg 	void *v;
    573      1.1     mrg 	register_t *retval;
    574      1.1     mrg {
    575      1.8     eeh 	struct compat_43_netbsd32_orecvfrom_args /* {
    576      1.1     mrg 		syscallarg(int) s;
    577      1.5     mrg 		syscallarg(netbsd32_caddr_t) buf;
    578      1.5     mrg 		syscallarg(netbsd32_size_t) len;
    579      1.1     mrg 		syscallarg(int) flags;
    580      1.5     mrg 		syscallarg(netbsd32_caddr_t) from;
    581      1.5     mrg 		syscallarg(netbsd32_intp) fromlenaddr;
    582      1.1     mrg 	} */ *uap = v;
    583      1.1     mrg 	struct compat_43_sys_recvfrom_args ua;
    584      1.1     mrg 
    585      1.6     mrg 	NETBSD32TO64_UAP(s);
    586      1.6     mrg 	NETBSD32TOX64_UAP(buf, caddr_t);
    587      1.6     mrg 	NETBSD32TOX_UAP(len, size_t);
    588      1.6     mrg 	NETBSD32TO64_UAP(flags);
    589      1.6     mrg 	NETBSD32TOX64_UAP(from, caddr_t);
    590      1.6     mrg 	NETBSD32TOP_UAP(fromlenaddr, int);
    591      1.1     mrg 	return (compat_43_sys_recvfrom(p, &ua, retval));
    592      1.1     mrg }
    593      1.1     mrg 
    594      1.1     mrg int
    595      1.8     eeh compat_43_netbsd32_ogetsockname(p, v, retval)
    596      1.1     mrg 	struct proc *p;
    597      1.1     mrg 	void *v;
    598      1.1     mrg 	register_t *retval;
    599      1.1     mrg {
    600      1.8     eeh 	struct compat_43_netbsd32_ogetsockname_args /* {
    601      1.1     mrg 		syscallarg(int) fdec;
    602      1.5     mrg 		syscallarg(netbsd32_caddr_t) asa;
    603      1.5     mrg 		syscallarg(netbsd32_intp) alen;
    604      1.1     mrg 	} */ *uap = v;
    605      1.1     mrg 	struct compat_43_sys_getsockname_args ua;
    606      1.1     mrg 
    607      1.6     mrg 	NETBSD32TO64_UAP(fdec);
    608      1.6     mrg 	NETBSD32TOX64_UAP(asa, caddr_t);
    609      1.6     mrg 	NETBSD32TOP_UAP(alen, int);
    610      1.1     mrg 	return (compat_43_sys_getsockname(p, &ua, retval));
    611      1.1     mrg }
    612      1.1     mrg 
    613      1.1     mrg int
    614      1.8     eeh compat_43_netbsd32_ogetpeername(p, v, retval)
    615      1.1     mrg 	struct proc *p;
    616      1.1     mrg 	void *v;
    617      1.1     mrg 	register_t *retval;
    618      1.1     mrg {
    619      1.8     eeh 	struct compat_43_netbsd32_ogetpeername_args /* {
    620      1.1     mrg 		syscallarg(int) fdes;
    621      1.5     mrg 		syscallarg(netbsd32_caddr_t) asa;
    622      1.5     mrg 		syscallarg(netbsd32_intp) alen;
    623      1.1     mrg 	} */ *uap = v;
    624      1.1     mrg 	struct compat_43_sys_getpeername_args ua;
    625      1.1     mrg 
    626      1.6     mrg 	NETBSD32TO64_UAP(fdes);
    627      1.6     mrg 	NETBSD32TOX64_UAP(asa, caddr_t);
    628      1.6     mrg 	NETBSD32TOP_UAP(alen, int);
    629      1.1     mrg 	return (compat_43_sys_getpeername(p, &ua, retval));
    630      1.1     mrg }
    631      1.1     mrg 
    632      1.1     mrg /* signal syscalls */
    633      1.1     mrg int
    634      1.8     eeh compat_43_netbsd32_osigvec(p, v, retval)
    635      1.1     mrg 	struct proc *p;
    636      1.1     mrg 	void *v;
    637      1.1     mrg 	register_t *retval;
    638      1.1     mrg {
    639      1.8     eeh 	struct compat_43_netbsd32_osigvec_args /* {
    640      1.1     mrg 		syscallarg(int) signum;
    641      1.5     mrg 		syscallarg(netbsd32_sigvecp_t) nsv;
    642      1.5     mrg 		syscallarg(netbsd32_sigvecp_t) osv;
    643      1.1     mrg 	} */ *uap = v;
    644      1.1     mrg 	struct compat_43_sys_sigvec_args ua;
    645      1.5     mrg 	struct netbsd32_sigvec *sv32p;
    646      1.1     mrg 	struct sigvec nsv, osv;
    647      1.1     mrg 	int rv;
    648      1.1     mrg 
    649      1.6     mrg 	NETBSD32TO64_UAP(signum);
    650      1.1     mrg 	if (SCARG(uap, osv))
    651      1.1     mrg 		SCARG(&ua, osv) = &osv;
    652      1.1     mrg 	else
    653      1.1     mrg 		SCARG(&ua, osv) = NULL;
    654      1.1     mrg 	if (SCARG(uap, nsv)) {
    655      1.1     mrg 		SCARG(&ua, nsv) = &nsv;
    656      1.5     mrg 		sv32p = (struct netbsd32_sigvec *)(u_long)SCARG(uap, nsv);
    657      1.1     mrg 		nsv.sv_handler = (void *)(u_long)sv32p->sv_handler;
    658      1.1     mrg 		nsv.sv_mask = sv32p->sv_mask;
    659      1.1     mrg 		nsv.sv_flags = sv32p->sv_flags;
    660      1.1     mrg 	} else
    661      1.1     mrg 		SCARG(&ua, nsv) = NULL;
    662      1.1     mrg 	rv = compat_43_sys_sigvec(p, &ua, retval);
    663      1.1     mrg 	if (rv)
    664      1.1     mrg 		return (rv);
    665      1.1     mrg 
    666      1.1     mrg 	if (SCARG(uap, osv)) {
    667      1.5     mrg 		sv32p = (struct netbsd32_sigvec *)(u_long)SCARG(uap, osv);
    668      1.5     mrg 		sv32p->sv_handler = (netbsd32_sigvecp_t)(u_long)osv.sv_handler;
    669      1.1     mrg 		sv32p->sv_mask = osv.sv_mask;
    670      1.1     mrg 		sv32p->sv_flags = osv.sv_flags;
    671      1.1     mrg 	}
    672      1.1     mrg 
    673      1.1     mrg 	return (0);
    674      1.4     eeh }
    675      1.4     eeh 
    676      1.4     eeh int
    677      1.8     eeh compat_43_netbsd32_sigblock(p, v, retval)
    678      1.4     eeh 	struct proc *p;
    679      1.4     eeh 	void *v;
    680      1.4     eeh 	register_t *retval;
    681      1.4     eeh {
    682      1.8     eeh 	struct compat_43_netbsd32_sigblock_args /* {
    683      1.4     eeh 		syscallarg(int) mask;
    684      1.4     eeh 	} */ *uap = v;
    685      1.4     eeh 	struct compat_43_sys_sigblock_args ua;
    686      1.4     eeh 
    687      1.6     mrg 	NETBSD32TO64_UAP(mask);
    688      1.4     eeh 	return (compat_43_sys_sigblock(p, &ua, retval));
    689      1.4     eeh }
    690      1.4     eeh 
    691      1.4     eeh int
    692      1.8     eeh compat_43_netbsd32_sigsetmask(p, v, retval)
    693      1.4     eeh 	struct proc *p;
    694      1.4     eeh 	void *v;
    695      1.4     eeh 	register_t *retval;
    696      1.4     eeh {
    697      1.8     eeh 	struct compat_43_netbsd32_sigsetmask_args /* {
    698      1.4     eeh 		syscallarg(int) mask;
    699      1.4     eeh 	} */ *uap = v;
    700      1.4     eeh 	struct compat_43_sys_sigsetmask_args ua;
    701      1.4     eeh 
    702      1.6     mrg 	NETBSD32TO64_UAP(mask);
    703      1.4     eeh 	return (compat_43_sys_sigsetmask(p, &ua, retval));
    704      1.1     mrg }
    705      1.1     mrg 
    706      1.1     mrg int
    707      1.8     eeh compat_43_netbsd32_osigstack(p, v, retval)
    708      1.1     mrg 	struct proc *p;
    709      1.1     mrg 	void *v;
    710      1.1     mrg 	register_t *retval;
    711      1.1     mrg {
    712      1.8     eeh 	struct compat_43_netbsd32_osigstack_args /* {
    713      1.5     mrg 		syscallarg(netbsd32_sigstackp_t) nss;
    714      1.5     mrg 		syscallarg(netbsd32_sigstackp_t) oss;
    715      1.1     mrg 	} */ *uap = v;
    716      1.1     mrg 	struct compat_43_sys_sigstack_args ua;
    717      1.5     mrg 	struct netbsd32_sigstack *ss32p;
    718      1.1     mrg 	struct sigstack nss, oss;
    719      1.1     mrg 	int rv;
    720      1.1     mrg 
    721      1.1     mrg 	if (SCARG(uap, oss))
    722      1.1     mrg 		SCARG(&ua, oss) = &oss;
    723      1.1     mrg 	else
    724      1.1     mrg 		SCARG(&ua, oss) = NULL;
    725      1.1     mrg 	if (SCARG(uap, nss)) {
    726      1.1     mrg 		SCARG(&ua, nss) = &nss;
    727      1.5     mrg 		ss32p = (struct netbsd32_sigstack *)(u_long)SCARG(uap, nss);
    728      1.1     mrg 		nss.ss_sp = (void *)(u_long)ss32p->ss_sp;
    729      1.1     mrg 		nss.ss_onstack = ss32p->ss_onstack;
    730      1.1     mrg 	} else
    731      1.1     mrg 		SCARG(&ua, nss) = NULL;
    732      1.1     mrg 
    733      1.1     mrg 	rv = compat_43_sys_sigstack(p, &ua, retval);
    734      1.1     mrg 	if (rv)
    735      1.1     mrg 		return (rv);
    736      1.1     mrg 
    737      1.1     mrg 	if (SCARG(uap, oss)) {
    738      1.5     mrg 		ss32p = (struct netbsd32_sigstack *)(u_long)SCARG(uap, oss);
    739      1.5     mrg 		ss32p->ss_sp = (netbsd32_sigstackp_t)(u_long)oss.ss_sp;
    740      1.1     mrg 		ss32p->ss_onstack = oss.ss_onstack;
    741      1.1     mrg 	}
    742      1.1     mrg 
    743      1.1     mrg 	return (0);
    744      1.1     mrg }
    745