Home | History | Annotate | Line # | Download | only in netbsd32
netbsd32_netbsd.c revision 1.57.2.2
      1 /*	$NetBSD: netbsd32_netbsd.c,v 1.57.2.2 2001/09/21 22:35:21 nathanw Exp $	*/
      2 
      3 /*
      4  * Copyright (c) 1998, 2001 Matthew R. Green
      5  * All rights reserved.
      6  *
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  * 1. Redistributions of source code must retain the above copyright
     11  *    notice, this list of conditions and the following disclaimer.
     12  * 2. Redistributions in binary form must reproduce the above copyright
     13  *    notice, this list of conditions and the following disclaimer in the
     14  *    documentation and/or other materials provided with the distribution.
     15  * 3. The name of the author may not be used to endorse or promote products
     16  *    derived from this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     19  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     20  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     21  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     22  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     23  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     24  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
     25  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     26  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     27  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     28  * SUCH DAMAGE.
     29  */
     30 
     31 #if defined(_KERNEL_OPT)
     32 #include "opt_ddb.h"
     33 #include "opt_ktrace.h"
     34 #include "opt_ntp.h"
     35 #include "opt_compat_netbsd.h"
     36 #include "opt_compat_43.h"
     37 #include "opt_sysv.h"
     38 
     39 #include "fs_lfs.h"
     40 #include "fs_nfs.h"
     41 #endif
     42 
     43 /*
     44  * Though COMPAT_OLDSOCK is needed only for COMPAT_43, SunOS, Linux,
     45  * HP-UX, FreeBSD, Ultrix, OSF1, we define it unconditionally so that
     46  * this would be LKM-safe.
     47  */
     48 #define COMPAT_OLDSOCK /* used by <sys/socket.h> */
     49 
     50 #include <sys/param.h>
     51 #include <sys/systm.h>
     52 #include <sys/kernel.h>
     53 //#define msg __msg /* Don't ask me! */
     54 #include <sys/malloc.h>
     55 #include <sys/mount.h>
     56 #include <sys/socket.h>
     57 #include <sys/sockio.h>
     58 #include <sys/socketvar.h>
     59 #include <sys/mbuf.h>
     60 #include <sys/stat.h>
     61 #include <sys/time.h>
     62 #include <sys/signalvar.h>
     63 #include <sys/ptrace.h>
     64 #include <sys/ktrace.h>
     65 #include <sys/trace.h>
     66 #include <sys/resourcevar.h>
     67 #include <sys/pool.h>
     68 #include <sys/vnode.h>
     69 #include <sys/file.h>
     70 #include <sys/filedesc.h>
     71 #include <sys/namei.h>
     72 
     73 #include <uvm/uvm_extern.h>
     74 
     75 #include <sys/syscallargs.h>
     76 #include <sys/proc.h>
     77 #include <sys/acct.h>
     78 #include <sys/exec.h>
     79 
     80 #include <net/if.h>
     81 
     82 #include <compat/netbsd32/netbsd32.h>
     83 #include <compat/netbsd32/netbsd32_syscall.h>
     84 #include <compat/netbsd32/netbsd32_syscallargs.h>
     85 #include <compat/netbsd32/netbsd32_conv.h>
     86 
     87 #include <machine/frame.h>
     88 
     89 #if defined(DDB)
     90 #include <ddb/ddbvar.h>
     91 #endif
     92 
     93 extern char netbsd32_sigcode[], netbsd32_esigcode[];
     94 extern struct sysent netbsd32_sysent[];
     95 #ifdef SYSCALL_DEBUG
     96 extern const char * const netbsd32_syscallnames[];
     97 #endif
     98 #ifdef __HAVE_SYSCALL_INTERN
     99 void netbsd32_syscall_intern __P((struct proc *));
    100 #else
    101 void syscall __P((void));
    102 #endif
    103 
    104 const struct emul emul_netbsd32 = {
    105 	"netbsd32",
    106 	"/emul/netbsd32",
    107 #ifndef __HAVE_MINIMAL_EMUL
    108 	0,
    109 	NULL,
    110 	netbsd32_SYS_syscall,
    111 	netbsd32_SYS_MAXSYSCALL,
    112 #endif
    113 	netbsd32_sysent,
    114 #ifdef SYSCALL_DEBUG
    115 	netbsd32_syscallnames,
    116 #else
    117 	NULL,
    118 #endif
    119 	netbsd32_sendsig,
    120 	trapsignal,
    121 	netbsd32_sigcode,
    122 	netbsd32_esigcode,
    123 	netbsd32_setregs,
    124 	NULL,
    125 	NULL,
    126 	NULL,
    127 #ifdef __HAVE_SYSCALL_INTERN
    128 	netbsd32_syscall_intern,
    129 #else
    130 	syscall,
    131 #endif
    132 };
    133 
    134 /*
    135  * below are all the standard NetBSD system calls, in the 32bit
    136  * environment, with the necessary conversions to 64bit before
    137  * calling the real syscall.  anything that needs special
    138  * attention is handled elsewhere.
    139  */
    140 
    141 int
    142 netbsd32_exit(p, v, retval)
    143 	struct proc *p;
    144 	void *v;
    145 	register_t *retval;
    146 {
    147 	struct netbsd32_exit_args /* {
    148 		syscallarg(int) rval;
    149 	} */ *uap = v;
    150 	struct sys_exit_args ua;
    151 
    152 	NETBSD32TO64_UAP(rval);
    153 	return sys_exit(p, &ua, retval);
    154 }
    155 
    156 int
    157 netbsd32_read(p, v, retval)
    158 	struct proc *p;
    159 	void *v;
    160 	register_t *retval;
    161 {
    162 	struct netbsd32_read_args /* {
    163 		syscallarg(int) fd;
    164 		syscallarg(netbsd32_voidp) buf;
    165 		syscallarg(netbsd32_size_t) nbyte;
    166 	} */ *uap = v;
    167 	struct sys_read_args ua;
    168 
    169 	NETBSD32TO64_UAP(fd);
    170 	NETBSD32TOP_UAP(buf, void *);
    171 	NETBSD32TOX_UAP(nbyte, size_t);
    172 	return sys_read(p, &ua, retval);
    173 }
    174 
    175 int
    176 netbsd32_write(p, v, retval)
    177 	struct proc *p;
    178 	void *v;
    179 	register_t *retval;
    180 {
    181 	struct netbsd32_write_args /* {
    182 		syscallarg(int) fd;
    183 		syscallarg(const netbsd32_voidp) buf;
    184 		syscallarg(netbsd32_size_t) nbyte;
    185 	} */ *uap = v;
    186 	struct sys_write_args ua;
    187 
    188 	NETBSD32TO64_UAP(fd);
    189 	NETBSD32TOP_UAP(buf, void *);
    190 	NETBSD32TOX_UAP(nbyte, size_t);
    191 	return sys_write(p, &ua, retval);
    192 }
    193 
    194 int
    195 netbsd32_close(p, v, retval)
    196 	struct proc *p;
    197 	void *v;
    198 	register_t *retval;
    199 {
    200 	struct netbsd32_close_args /* {
    201 		syscallarg(int) fd;
    202 	} */ *uap = v;
    203 	struct sys_close_args ua;
    204 
    205 	NETBSD32TO64_UAP(fd);
    206 	return sys_close(p, &ua, retval);
    207 }
    208 
    209 int
    210 netbsd32_open(p, v, retval)
    211 	struct proc *p;
    212 	void *v;
    213 	register_t *retval;
    214 {
    215 	struct netbsd32_open_args /* {
    216 		syscallarg(const netbsd32_charp) path;
    217 		syscallarg(int) flags;
    218 		syscallarg(mode_t) mode;
    219 	} */ *uap = v;
    220 	struct sys_open_args ua;
    221 	caddr_t sg;
    222 
    223 	NETBSD32TOP_UAP(path, const char);
    224 	NETBSD32TO64_UAP(flags);
    225 	NETBSD32TO64_UAP(mode);
    226 	sg = stackgap_init(p->p_emul);
    227 	CHECK_ALT_EXIST(p, &sg, SCARG(&ua, path));
    228 
    229 	return (sys_open(p, &ua, retval));
    230 }
    231 
    232 int
    233 netbsd32_link(p, v, retval)
    234 	struct proc *p;
    235 	void *v;
    236 	register_t *retval;
    237 {
    238 	struct netbsd32_link_args /* {
    239 		syscallarg(const netbsd32_charp) path;
    240 		syscallarg(const netbsd32_charp) link;
    241 	} */ *uap = v;
    242 	struct sys_link_args ua;
    243 
    244 	NETBSD32TOP_UAP(path, const char);
    245 	NETBSD32TOP_UAP(link, const char);
    246 	return (sys_link(p, &ua, retval));
    247 }
    248 
    249 int
    250 netbsd32_unlink(p, v, retval)
    251 	struct proc *p;
    252 	void *v;
    253 	register_t *retval;
    254 {
    255 	struct netbsd32_unlink_args /* {
    256 		syscallarg(const netbsd32_charp) path;
    257 	} */ *uap = v;
    258 	struct sys_unlink_args ua;
    259 
    260 	NETBSD32TOP_UAP(path, const char);
    261 
    262 	return (sys_unlink(p, &ua, retval));
    263 }
    264 
    265 int
    266 netbsd32_chdir(p, v, retval)
    267 	struct proc *p;
    268 	void *v;
    269 	register_t *retval;
    270 {
    271 	struct netbsd32_chdir_args /* {
    272 		syscallarg(const netbsd32_charp) path;
    273 	} */ *uap = v;
    274 	struct sys_chdir_args ua;
    275 
    276 	NETBSD32TOP_UAP(path, const char);
    277 
    278 	return (sys_chdir(p, &ua, retval));
    279 }
    280 
    281 int
    282 netbsd32_fchdir(p, v, retval)
    283 	struct proc *p;
    284 	void *v;
    285 	register_t *retval;
    286 {
    287 	struct netbsd32_fchdir_args /* {
    288 		syscallarg(int) fd;
    289 	} */ *uap = v;
    290 	struct sys_fchdir_args ua;
    291 
    292 	NETBSD32TO64_UAP(fd);
    293 
    294 	return (sys_fchdir(p, &ua, retval));
    295 }
    296 
    297 int
    298 netbsd32_mknod(p, v, retval)
    299 	struct proc *p;
    300 	void *v;
    301 	register_t *retval;
    302 {
    303 	struct netbsd32_mknod_args /* {
    304 		syscallarg(const netbsd32_charp) path;
    305 		syscallarg(mode_t) mode;
    306 		syscallarg(dev_t) dev;
    307 	} */ *uap = v;
    308 	struct sys_mknod_args ua;
    309 
    310 	NETBSD32TOP_UAP(path, const char);
    311 	NETBSD32TO64_UAP(dev);
    312 	NETBSD32TO64_UAP(mode);
    313 
    314 	return (sys_mknod(p, &ua, retval));
    315 }
    316 
    317 int
    318 netbsd32_chmod(p, v, retval)
    319 	struct proc *p;
    320 	void *v;
    321 	register_t *retval;
    322 {
    323 	struct netbsd32_chmod_args /* {
    324 		syscallarg(const netbsd32_charp) path;
    325 		syscallarg(mode_t) mode;
    326 	} */ *uap = v;
    327 	struct sys_chmod_args ua;
    328 
    329 	NETBSD32TOP_UAP(path, const char);
    330 	NETBSD32TO64_UAP(mode);
    331 
    332 	return (sys_chmod(p, &ua, retval));
    333 }
    334 
    335 int
    336 netbsd32_chown(p, v, retval)
    337 	struct proc *p;
    338 	void *v;
    339 	register_t *retval;
    340 {
    341 	struct netbsd32_chown_args /* {
    342 		syscallarg(const netbsd32_charp) path;
    343 		syscallarg(uid_t) uid;
    344 		syscallarg(gid_t) gid;
    345 	} */ *uap = v;
    346 	struct sys_chown_args ua;
    347 
    348 	NETBSD32TOP_UAP(path, const char);
    349 	NETBSD32TO64_UAP(uid);
    350 	NETBSD32TO64_UAP(gid);
    351 
    352 	return (sys_chown(p, &ua, retval));
    353 }
    354 
    355 int
    356 netbsd32_break(p, v, retval)
    357 	struct proc *p;
    358 	void *v;
    359 	register_t *retval;
    360 {
    361 	struct netbsd32_break_args /* {
    362 		syscallarg(netbsd32_charp) nsize;
    363 	} */ *uap = v;
    364 	struct sys_obreak_args ua;
    365 
    366 	SCARG(&ua, nsize) = (char *)(u_long)SCARG(uap, nsize);
    367 	NETBSD32TOP_UAP(nsize, char);
    368 	return (sys_obreak(p, &ua, retval));
    369 }
    370 
    371 int
    372 netbsd32_mount(p, v, retval)
    373 	struct proc *p;
    374 	void *v;
    375 	register_t *retval;
    376 {
    377 	struct netbsd32_mount_args /* {
    378 		syscallarg(const netbsd32_charp) type;
    379 		syscallarg(const netbsd32_charp) path;
    380 		syscallarg(int) flags;
    381 		syscallarg(netbsd32_voidp) data;
    382 	} */ *uap = v;
    383 	struct sys_mount_args ua;
    384 
    385 	NETBSD32TOP_UAP(type, const char);
    386 	NETBSD32TOP_UAP(path, const char);
    387 	NETBSD32TO64_UAP(flags);
    388 	NETBSD32TOP_UAP(data, void);
    389 	return (sys_mount(p, &ua, retval));
    390 }
    391 
    392 int
    393 netbsd32_unmount(p, v, retval)
    394 	struct proc *p;
    395 	void *v;
    396 	register_t *retval;
    397 {
    398 	struct netbsd32_unmount_args /* {
    399 		syscallarg(const netbsd32_charp) path;
    400 		syscallarg(int) flags;
    401 	} */ *uap = v;
    402 	struct sys_unmount_args ua;
    403 
    404 	NETBSD32TOP_UAP(path, const char);
    405 	NETBSD32TO64_UAP(flags);
    406 	return (sys_unmount(p, &ua, retval));
    407 }
    408 
    409 int
    410 netbsd32_setuid(p, v, retval)
    411 	struct proc *p;
    412 	void *v;
    413 	register_t *retval;
    414 {
    415 	struct netbsd32_setuid_args /* {
    416 		syscallarg(uid_t) uid;
    417 	} */ *uap = v;
    418 	struct sys_setuid_args ua;
    419 
    420 	NETBSD32TO64_UAP(uid);
    421 	return (sys_setuid(p, &ua, retval));
    422 }
    423 
    424 int
    425 netbsd32_ptrace(p, v, retval)
    426 	struct proc *p;
    427 	void *v;
    428 	register_t *retval;
    429 {
    430 	struct netbsd32_ptrace_args /* {
    431 		syscallarg(int) req;
    432 		syscallarg(pid_t) pid;
    433 		syscallarg(netbsd32_caddr_t) addr;
    434 		syscallarg(int) data;
    435 	} */ *uap = v;
    436 	struct sys_ptrace_args ua;
    437 
    438 	NETBSD32TO64_UAP(req);
    439 	NETBSD32TO64_UAP(pid);
    440 	NETBSD32TOX64_UAP(addr, caddr_t);
    441 	NETBSD32TO64_UAP(data);
    442 	return (sys_ptrace(p, &ua, retval));
    443 }
    444 
    445 int
    446 netbsd32_accept(p, v, retval)
    447 	struct proc *p;
    448 	void *v;
    449 	register_t *retval;
    450 {
    451 	struct netbsd32_accept_args /* {
    452 		syscallarg(int) s;
    453 		syscallarg(netbsd32_sockaddrp_t) name;
    454 		syscallarg(netbsd32_intp) anamelen;
    455 	} */ *uap = v;
    456 	struct sys_accept_args ua;
    457 
    458 	NETBSD32TO64_UAP(s);
    459 	NETBSD32TOP_UAP(name, struct sockaddr);
    460 	NETBSD32TOP_UAP(anamelen, int);
    461 	return (sys_accept(p, &ua, retval));
    462 }
    463 
    464 int
    465 netbsd32_getpeername(p, v, retval)
    466 	struct proc *p;
    467 	void *v;
    468 	register_t *retval;
    469 {
    470 	struct netbsd32_getpeername_args /* {
    471 		syscallarg(int) fdes;
    472 		syscallarg(netbsd32_sockaddrp_t) asa;
    473 		syscallarg(netbsd32_intp) alen;
    474 	} */ *uap = v;
    475 	struct sys_getpeername_args ua;
    476 
    477 	NETBSD32TO64_UAP(fdes);
    478 	NETBSD32TOP_UAP(asa, struct sockaddr);
    479 	NETBSD32TOP_UAP(alen, int);
    480 /* NB: do the protocol specific sockaddrs need to be converted? */
    481 	return (sys_getpeername(p, &ua, retval));
    482 }
    483 
    484 int
    485 netbsd32_getsockname(p, v, retval)
    486 	struct proc *p;
    487 	void *v;
    488 	register_t *retval;
    489 {
    490 	struct netbsd32_getsockname_args /* {
    491 		syscallarg(int) fdes;
    492 		syscallarg(netbsd32_sockaddrp_t) asa;
    493 		syscallarg(netbsd32_intp) alen;
    494 	} */ *uap = v;
    495 	struct sys_getsockname_args ua;
    496 
    497 	NETBSD32TO64_UAP(fdes);
    498 	NETBSD32TOP_UAP(asa, struct sockaddr);
    499 	NETBSD32TOP_UAP(alen, int);
    500 	return (sys_getsockname(p, &ua, retval));
    501 }
    502 
    503 int
    504 netbsd32_access(p, v, retval)
    505 	struct proc *p;
    506 	void *v;
    507 	register_t *retval;
    508 {
    509 	struct netbsd32_access_args /* {
    510 		syscallarg(const netbsd32_charp) path;
    511 		syscallarg(int) flags;
    512 	} */ *uap = v;
    513 	struct sys_access_args ua;
    514 	caddr_t sg;
    515 
    516 	NETBSD32TOP_UAP(path, const char);
    517 	NETBSD32TO64_UAP(flags);
    518 	sg = stackgap_init(p->p_emul);
    519 	CHECK_ALT_EXIST(p, &sg, SCARG(&ua, path));
    520 
    521 	return (sys_access(p, &ua, retval));
    522 }
    523 
    524 int
    525 netbsd32_chflags(p, v, retval)
    526 	struct proc *p;
    527 	void *v;
    528 	register_t *retval;
    529 {
    530 	struct netbsd32_chflags_args /* {
    531 		syscallarg(const netbsd32_charp) path;
    532 		syscallarg(netbsd32_u_long) flags;
    533 	} */ *uap = v;
    534 	struct sys_chflags_args ua;
    535 
    536 	NETBSD32TOP_UAP(path, const char);
    537 	NETBSD32TO64_UAP(flags);
    538 
    539 	return (sys_chflags(p, &ua, retval));
    540 }
    541 
    542 int
    543 netbsd32_fchflags(p, v, retval)
    544 	struct proc *p;
    545 	void *v;
    546 	register_t *retval;
    547 {
    548 	struct netbsd32_fchflags_args /* {
    549 		syscallarg(int) fd;
    550 		syscallarg(netbsd32_u_long) flags;
    551 	} */ *uap = v;
    552 	struct sys_fchflags_args ua;
    553 
    554 	NETBSD32TO64_UAP(fd);
    555 	NETBSD32TO64_UAP(flags);
    556 
    557 	return (sys_fchflags(p, &ua, retval));
    558 }
    559 
    560 int
    561 netbsd32_lchflags(p, v, retval)
    562 	struct proc *p;
    563 	void *v;
    564 	register_t *retval;
    565 {
    566 	struct netbsd32_lchflags_args /* {
    567 		syscallarg(int) fd;
    568 		syscallarg(netbsd32_u_long) flags;
    569 	} */ *uap = v;
    570 	struct sys_lchflags_args ua;
    571 
    572 	NETBSD32TOP_UAP(path, const char);
    573 	NETBSD32TO64_UAP(flags);
    574 
    575 	return (sys_lchflags(p, &ua, retval));
    576 }
    577 
    578 int
    579 netbsd32_kill(p, v, retval)
    580 	struct proc *p;
    581 	void *v;
    582 	register_t *retval;
    583 {
    584 	struct netbsd32_kill_args /* {
    585 		syscallarg(int) pid;
    586 		syscallarg(int) signum;
    587 	} */ *uap = v;
    588 	struct sys_kill_args ua;
    589 
    590 	NETBSD32TO64_UAP(pid);
    591 	NETBSD32TO64_UAP(signum);
    592 
    593 	return (sys_kill(p, &ua, retval));
    594 }
    595 
    596 int
    597 netbsd32_dup(p, v, retval)
    598 	struct proc *p;
    599 	void *v;
    600 	register_t *retval;
    601 {
    602 	struct netbsd32_dup_args /* {
    603 		syscallarg(int) fd;
    604 	} */ *uap = v;
    605 	struct sys_dup_args ua;
    606 
    607 	NETBSD32TO64_UAP(fd);
    608 
    609 	return (sys_dup(p, &ua, retval));
    610 }
    611 
    612 int
    613 netbsd32_profil(p, v, retval)
    614 	struct proc *p;
    615 	void *v;
    616 	register_t *retval;
    617 {
    618 	struct netbsd32_profil_args /* {
    619 		syscallarg(netbsd32_caddr_t) samples;
    620 		syscallarg(netbsd32_size_t) size;
    621 		syscallarg(netbsd32_u_long) offset;
    622 		syscallarg(u_int) scale;
    623 	} */ *uap = v;
    624 	struct sys_profil_args ua;
    625 
    626 	NETBSD32TOX64_UAP(samples, caddr_t);
    627 	NETBSD32TOX_UAP(size, size_t);
    628 	NETBSD32TOX_UAP(offset, u_long);
    629 	NETBSD32TO64_UAP(scale);
    630 	return (sys_profil(p, &ua, retval));
    631 }
    632 
    633 #ifdef KTRACE
    634 int
    635 netbsd32_ktrace(p, v, retval)
    636 	struct proc *p;
    637 	void *v;
    638 	register_t *retval;
    639 {
    640 	struct netbsd32_ktrace_args /* {
    641 		syscallarg(const netbsd32_charp) fname;
    642 		syscallarg(int) ops;
    643 		syscallarg(int) facs;
    644 		syscallarg(int) pid;
    645 	} */ *uap = v;
    646 	struct sys_ktrace_args ua;
    647 
    648 	NETBSD32TOP_UAP(fname, const char);
    649 	NETBSD32TO64_UAP(ops);
    650 	NETBSD32TO64_UAP(facs);
    651 	NETBSD32TO64_UAP(pid);
    652 	return (sys_ktrace(p, &ua, retval));
    653 }
    654 #endif /* KTRACE */
    655 
    656 int
    657 netbsd32_utrace(p, v, retval)
    658 	struct proc *p;
    659 	void *v;
    660 	register_t *retval;
    661 {
    662 	struct netbsd32_utrace_args /* {
    663 		syscallarg(const netbsd32_charp) label;
    664 		syscallarg(netbsd32_voidp) addr;
    665 		syscallarg(netbsd32_size_t) len;
    666 	} */ *uap = v;
    667 	struct sys_utrace_args ua;
    668 
    669 	NETBSD32TOP_UAP(label, const char);
    670 	NETBSD32TOP_UAP(addr, void);
    671 	NETBSD32TO64_UAP(len);
    672 	return (sys_utrace(p, &ua, retval));
    673 }
    674 
    675 int
    676 netbsd32___getlogin(p, v, retval)
    677 	struct proc *p;
    678 	void *v;
    679 	register_t *retval;
    680 {
    681 	struct netbsd32___getlogin_args /* {
    682 		syscallarg(netbsd32_charp) namebuf;
    683 		syscallarg(u_int) namelen;
    684 	} */ *uap = v;
    685 	struct sys___getlogin_args ua;
    686 
    687 	NETBSD32TOP_UAP(namebuf, char);
    688 	NETBSD32TO64_UAP(namelen);
    689 	return (sys___getlogin(p, &ua, retval));
    690 }
    691 
    692 int
    693 netbsd32_setlogin(p, v, retval)
    694 	struct proc *p;
    695 	void *v;
    696 	register_t *retval;
    697 {
    698 	struct netbsd32_setlogin_args /* {
    699 		syscallarg(const netbsd32_charp) namebuf;
    700 	} */ *uap = v;
    701 	struct sys_setlogin_args ua;
    702 
    703 	NETBSD32TOP_UAP(namebuf, char);
    704 	return (sys_setlogin(p, &ua, retval));
    705 }
    706 
    707 int
    708 netbsd32_acct(p, v, retval)
    709 	struct proc *p;
    710 	void *v;
    711 	register_t *retval;
    712 {
    713 	struct netbsd32_acct_args /* {
    714 		syscallarg(const netbsd32_charp) path;
    715 	} */ *uap = v;
    716 	struct sys_acct_args ua;
    717 
    718 	NETBSD32TOP_UAP(path, const char);
    719 	return (sys_acct(p, &ua, retval));
    720 }
    721 
    722 int
    723 netbsd32_revoke(p, v, retval)
    724 	struct proc *p;
    725 	void *v;
    726 	register_t *retval;
    727 {
    728 	struct netbsd32_revoke_args /* {
    729 		syscallarg(const netbsd32_charp) path;
    730 	} */ *uap = v;
    731 	struct sys_revoke_args ua;
    732 	caddr_t sg;
    733 
    734 	NETBSD32TOP_UAP(path, const char);
    735 	sg = stackgap_init(p->p_emul);
    736 	CHECK_ALT_EXIST(p, &sg, SCARG(&ua, path));
    737 
    738 	return (sys_revoke(p, &ua, retval));
    739 }
    740 
    741 int
    742 netbsd32_symlink(p, v, retval)
    743 	struct proc *p;
    744 	void *v;
    745 	register_t *retval;
    746 {
    747 	struct netbsd32_symlink_args /* {
    748 		syscallarg(const netbsd32_charp) path;
    749 		syscallarg(const netbsd32_charp) link;
    750 	} */ *uap = v;
    751 	struct sys_symlink_args ua;
    752 
    753 	NETBSD32TOP_UAP(path, const char);
    754 	NETBSD32TOP_UAP(link, const char);
    755 
    756 	return (sys_symlink(p, &ua, retval));
    757 }
    758 
    759 int
    760 netbsd32_readlink(p, v, retval)
    761 	struct proc *p;
    762 	void *v;
    763 	register_t *retval;
    764 {
    765 	struct netbsd32_readlink_args /* {
    766 		syscallarg(const netbsd32_charp) path;
    767 		syscallarg(netbsd32_charp) buf;
    768 		syscallarg(netbsd32_size_t) count;
    769 	} */ *uap = v;
    770 	struct sys_readlink_args ua;
    771 	caddr_t sg;
    772 
    773 	NETBSD32TOP_UAP(path, const char);
    774 	NETBSD32TOP_UAP(buf, char);
    775 	NETBSD32TOX_UAP(count, size_t);
    776 	sg = stackgap_init(p->p_emul);
    777 	CHECK_ALT_SYMLINK(p, &sg, SCARG(&ua, path));
    778 
    779 	return (sys_readlink(p, &ua, retval));
    780 }
    781 
    782 int
    783 netbsd32_umask(p, v, retval)
    784 	struct proc *p;
    785 	void *v;
    786 	register_t *retval;
    787 {
    788 	struct netbsd32_umask_args /* {
    789 		syscallarg(mode_t) newmask;
    790 	} */ *uap = v;
    791 	struct sys_umask_args ua;
    792 
    793 	NETBSD32TO64_UAP(newmask);
    794 	return (sys_umask(p, &ua, retval));
    795 }
    796 
    797 int
    798 netbsd32_chroot(p, v, retval)
    799 	struct proc *p;
    800 	void *v;
    801 	register_t *retval;
    802 {
    803 	struct netbsd32_chroot_args /* {
    804 		syscallarg(const netbsd32_charp) path;
    805 	} */ *uap = v;
    806 	struct sys_chroot_args ua;
    807 
    808 	NETBSD32TOP_UAP(path, const char);
    809 	return (sys_chroot(p, &ua, retval));
    810 }
    811 
    812 int
    813 netbsd32_sbrk(p, v, retval)
    814 	struct proc *p;
    815 	void *v;
    816 	register_t *retval;
    817 {
    818 	struct netbsd32_sbrk_args /* {
    819 		syscallarg(int) incr;
    820 	} */ *uap = v;
    821 	struct sys_sbrk_args ua;
    822 
    823 	NETBSD32TO64_UAP(incr);
    824 	return (sys_sbrk(p, &ua, retval));
    825 }
    826 
    827 int
    828 netbsd32_sstk(p, v, retval)
    829 	struct proc *p;
    830 	void *v;
    831 	register_t *retval;
    832 {
    833 	struct netbsd32_sstk_args /* {
    834 		syscallarg(int) incr;
    835 	} */ *uap = v;
    836 	struct sys_sstk_args ua;
    837 
    838 	NETBSD32TO64_UAP(incr);
    839 	return (sys_sstk(p, &ua, retval));
    840 }
    841 
    842 int
    843 netbsd32_munmap(p, v, retval)
    844 	struct proc *p;
    845 	void *v;
    846 	register_t *retval;
    847 {
    848 	struct netbsd32_munmap_args /* {
    849 		syscallarg(netbsd32_voidp) addr;
    850 		syscallarg(netbsd32_size_t) len;
    851 	} */ *uap = v;
    852 	struct sys_munmap_args ua;
    853 
    854 	NETBSD32TOP_UAP(addr, void);
    855 	NETBSD32TOX_UAP(len, size_t);
    856 	return (sys_munmap(p, &ua, retval));
    857 }
    858 
    859 int
    860 netbsd32_mprotect(p, v, retval)
    861 	struct proc *p;
    862 	void *v;
    863 	register_t *retval;
    864 {
    865 	struct netbsd32_mprotect_args /* {
    866 		syscallarg(netbsd32_voidp) addr;
    867 		syscallarg(netbsd32_size_t) len;
    868 		syscallarg(int) prot;
    869 	} */ *uap = v;
    870 	struct sys_mprotect_args ua;
    871 
    872 	NETBSD32TOP_UAP(addr, void);
    873 	NETBSD32TOX_UAP(len, size_t);
    874 	NETBSD32TO64_UAP(prot);
    875 	return (sys_mprotect(p, &ua, retval));
    876 }
    877 
    878 int
    879 netbsd32_madvise(p, v, retval)
    880 	struct proc *p;
    881 	void *v;
    882 	register_t *retval;
    883 {
    884 	struct netbsd32_madvise_args /* {
    885 		syscallarg(netbsd32_voidp) addr;
    886 		syscallarg(netbsd32_size_t) len;
    887 		syscallarg(int) behav;
    888 	} */ *uap = v;
    889 	struct sys_madvise_args ua;
    890 
    891 	NETBSD32TOP_UAP(addr, void);
    892 	NETBSD32TOX_UAP(len, size_t);
    893 	NETBSD32TO64_UAP(behav);
    894 	return (sys_madvise(p, &ua, retval));
    895 }
    896 
    897 int
    898 netbsd32_mincore(p, v, retval)
    899 	struct proc *p;
    900 	void *v;
    901 	register_t *retval;
    902 {
    903 	struct netbsd32_mincore_args /* {
    904 		syscallarg(netbsd32_caddr_t) addr;
    905 		syscallarg(netbsd32_size_t) len;
    906 		syscallarg(netbsd32_charp) vec;
    907 	} */ *uap = v;
    908 	struct sys_mincore_args ua;
    909 
    910 	NETBSD32TOX64_UAP(addr, caddr_t);
    911 	NETBSD32TOX_UAP(len, size_t);
    912 	NETBSD32TOP_UAP(vec, char);
    913 	return (sys_mincore(p, &ua, retval));
    914 }
    915 
    916 /* XXX MOVE ME XXX ? */
    917 int
    918 netbsd32_getgroups(p, v, retval)
    919 	struct proc *p;
    920 	void *v;
    921 	register_t *retval;
    922 {
    923 	struct netbsd32_getgroups_args /* {
    924 		syscallarg(int) gidsetsize;
    925 		syscallarg(netbsd32_gid_tp) gidset;
    926 	} */ *uap = v;
    927 	struct pcred *pc = p->p_cred;
    928 	int ngrp;
    929 	int error;
    930 
    931 	ngrp = SCARG(uap, gidsetsize);
    932 	if (ngrp == 0) {
    933 		*retval = pc->pc_ucred->cr_ngroups;
    934 		return (0);
    935 	}
    936 	if (ngrp < pc->pc_ucred->cr_ngroups)
    937 		return (EINVAL);
    938 	ngrp = pc->pc_ucred->cr_ngroups;
    939 	/* Should convert gid_t to netbsd32_gid_t, but they're the same */
    940 	error = copyout((caddr_t)pc->pc_ucred->cr_groups,
    941 			(caddr_t)(u_long)SCARG(uap, gidset),
    942 			ngrp * sizeof(gid_t));
    943 	if (error)
    944 		return (error);
    945 	*retval = ngrp;
    946 	return (0);
    947 }
    948 
    949 int
    950 netbsd32_setgroups(p, v, retval)
    951 	struct proc *p;
    952 	void *v;
    953 	register_t *retval;
    954 {
    955 	struct netbsd32_setgroups_args /* {
    956 		syscallarg(int) gidsetsize;
    957 		syscallarg(const netbsd32_gid_tp) gidset;
    958 	} */ *uap = v;
    959 	struct sys_setgroups_args ua;
    960 
    961 	NETBSD32TO64_UAP(gidsetsize);
    962 	NETBSD32TOP_UAP(gidset, gid_t);
    963 	return (sys_setgroups(p, &ua, retval));
    964 }
    965 
    966 int
    967 netbsd32_setpgid(p, v, retval)
    968 	struct proc *p;
    969 	void *v;
    970 	register_t *retval;
    971 {
    972 	struct netbsd32_setpgid_args /* {
    973 		syscallarg(int) pid;
    974 		syscallarg(int) pgid;
    975 	} */ *uap = v;
    976 	struct sys_setpgid_args ua;
    977 
    978 	NETBSD32TO64_UAP(pid);
    979 	NETBSD32TO64_UAP(pgid);
    980 	return (sys_setpgid(p, &ua, retval));
    981 }
    982 
    983 int
    984 netbsd32_fcntl(p, v, retval)
    985 	struct proc *p;
    986 	void *v;
    987 	register_t *retval;
    988 {
    989 	struct netbsd32_fcntl_args /* {
    990 		syscallarg(int) fd;
    991 		syscallarg(int) cmd;
    992 		syscallarg(netbsd32_voidp) arg;
    993 	} */ *uap = v;
    994 	struct sys_fcntl_args ua;
    995 
    996 	NETBSD32TO64_UAP(fd);
    997 	NETBSD32TO64_UAP(cmd);
    998 	NETBSD32TOP_UAP(arg, void);
    999 	/* we can do this because `struct flock' doesn't change */
   1000 	return (sys_fcntl(p, &ua, retval));
   1001 }
   1002 
   1003 int
   1004 netbsd32_dup2(p, v, retval)
   1005 	struct proc *p;
   1006 	void *v;
   1007 	register_t *retval;
   1008 {
   1009 	struct netbsd32_dup2_args /* {
   1010 		syscallarg(int) from;
   1011 		syscallarg(int) to;
   1012 	} */ *uap = v;
   1013 	struct sys_dup2_args ua;
   1014 
   1015 	NETBSD32TO64_UAP(from);
   1016 	NETBSD32TO64_UAP(to);
   1017 	return (sys_dup2(p, &ua, retval));
   1018 }
   1019 
   1020 int
   1021 netbsd32_fsync(p, v, retval)
   1022 	struct proc *p;
   1023 	void *v;
   1024 	register_t *retval;
   1025 {
   1026 	struct netbsd32_fsync_args /* {
   1027 		syscallarg(int) fd;
   1028 	} */ *uap = v;
   1029 	struct sys_fsync_args ua;
   1030 
   1031 	NETBSD32TO64_UAP(fd);
   1032 	return (sys_fsync(p, &ua, retval));
   1033 }
   1034 
   1035 int
   1036 netbsd32_setpriority(p, v, retval)
   1037 	struct proc *p;
   1038 	void *v;
   1039 	register_t *retval;
   1040 {
   1041 	struct netbsd32_setpriority_args /* {
   1042 		syscallarg(int) which;
   1043 		syscallarg(int) who;
   1044 		syscallarg(int) prio;
   1045 	} */ *uap = v;
   1046 	struct sys_setpriority_args ua;
   1047 
   1048 	NETBSD32TO64_UAP(which);
   1049 	NETBSD32TO64_UAP(who);
   1050 	NETBSD32TO64_UAP(prio);
   1051 	return (sys_setpriority(p, &ua, retval));
   1052 }
   1053 
   1054 int
   1055 netbsd32_socket(p, v, retval)
   1056 	struct proc *p;
   1057 	void *v;
   1058 	register_t *retval;
   1059 {
   1060 	struct netbsd32_socket_args /* {
   1061 		syscallarg(int) domain;
   1062 		syscallarg(int) type;
   1063 		syscallarg(int) protocol;
   1064 	} */ *uap = v;
   1065 	struct sys_socket_args ua;
   1066 
   1067 	NETBSD32TO64_UAP(domain);
   1068 	NETBSD32TO64_UAP(type);
   1069 	NETBSD32TO64_UAP(protocol);
   1070 	return (sys_socket(p, &ua, retval));
   1071 }
   1072 
   1073 int
   1074 netbsd32_connect(p, v, retval)
   1075 	struct proc *p;
   1076 	void *v;
   1077 	register_t *retval;
   1078 {
   1079 	struct netbsd32_connect_args /* {
   1080 		syscallarg(int) s;
   1081 		syscallarg(const netbsd32_sockaddrp_t) name;
   1082 		syscallarg(int) namelen;
   1083 	} */ *uap = v;
   1084 	struct sys_connect_args ua;
   1085 
   1086 	NETBSD32TO64_UAP(s);
   1087 	NETBSD32TOP_UAP(name, struct sockaddr);
   1088 	NETBSD32TO64_UAP(namelen);
   1089 	return (sys_connect(p, &ua, retval));
   1090 }
   1091 
   1092 int
   1093 netbsd32_getpriority(p, v, retval)
   1094 	struct proc *p;
   1095 	void *v;
   1096 	register_t *retval;
   1097 {
   1098 	struct netbsd32_getpriority_args /* {
   1099 		syscallarg(int) which;
   1100 		syscallarg(int) who;
   1101 	} */ *uap = v;
   1102 	struct sys_getpriority_args ua;
   1103 
   1104 	NETBSD32TO64_UAP(which);
   1105 	NETBSD32TO64_UAP(who);
   1106 	return (sys_getpriority(p, &ua, retval));
   1107 }
   1108 
   1109 int
   1110 netbsd32_bind(p, v, retval)
   1111 	struct proc *p;
   1112 	void *v;
   1113 	register_t *retval;
   1114 {
   1115 	struct netbsd32_bind_args /* {
   1116 		syscallarg(int) s;
   1117 		syscallarg(const netbsd32_sockaddrp_t) name;
   1118 		syscallarg(int) namelen;
   1119 	} */ *uap = v;
   1120 	struct sys_bind_args ua;
   1121 
   1122 	NETBSD32TO64_UAP(s);
   1123 	NETBSD32TOP_UAP(name, struct sockaddr);
   1124 	NETBSD32TO64_UAP(namelen);
   1125 	return (sys_bind(p, &ua, retval));
   1126 }
   1127 
   1128 int
   1129 netbsd32_setsockopt(p, v, retval)
   1130 	struct proc *p;
   1131 	void *v;
   1132 	register_t *retval;
   1133 {
   1134 	struct netbsd32_setsockopt_args /* {
   1135 		syscallarg(int) s;
   1136 		syscallarg(int) level;
   1137 		syscallarg(int) name;
   1138 		syscallarg(const netbsd32_voidp) val;
   1139 		syscallarg(int) valsize;
   1140 	} */ *uap = v;
   1141 	struct sys_setsockopt_args ua;
   1142 
   1143 	NETBSD32TO64_UAP(s);
   1144 	NETBSD32TO64_UAP(level);
   1145 	NETBSD32TO64_UAP(name);
   1146 	NETBSD32TOP_UAP(val, void);
   1147 	NETBSD32TO64_UAP(valsize);
   1148 	/* may be more efficient to do this inline. */
   1149 	return (sys_setsockopt(p, &ua, retval));
   1150 }
   1151 
   1152 int
   1153 netbsd32_listen(p, v, retval)
   1154 	struct proc *p;
   1155 	void *v;
   1156 	register_t *retval;
   1157 {
   1158 	struct netbsd32_listen_args /* {
   1159 		syscallarg(int) s;
   1160 		syscallarg(int) backlog;
   1161 	} */ *uap = v;
   1162 	struct sys_listen_args ua;
   1163 
   1164 	NETBSD32TO64_UAP(s);
   1165 	NETBSD32TO64_UAP(backlog);
   1166 	return (sys_listen(p, &ua, retval));
   1167 }
   1168 
   1169 int
   1170 netbsd32_fchown(p, v, retval)
   1171 	struct proc *p;
   1172 	void *v;
   1173 	register_t *retval;
   1174 {
   1175 	struct netbsd32_fchown_args /* {
   1176 		syscallarg(int) fd;
   1177 		syscallarg(uid_t) uid;
   1178 		syscallarg(gid_t) gid;
   1179 	} */ *uap = v;
   1180 	struct sys_fchown_args ua;
   1181 
   1182 	NETBSD32TO64_UAP(fd);
   1183 	NETBSD32TO64_UAP(uid);
   1184 	NETBSD32TO64_UAP(gid);
   1185 	return (sys_fchown(p, &ua, retval));
   1186 }
   1187 
   1188 int
   1189 netbsd32_fchmod(p, v, retval)
   1190 	struct proc *p;
   1191 	void *v;
   1192 	register_t *retval;
   1193 {
   1194 	struct netbsd32_fchmod_args /* {
   1195 		syscallarg(int) fd;
   1196 		syscallarg(mode_t) mode;
   1197 	} */ *uap = v;
   1198 	struct sys_fchmod_args ua;
   1199 
   1200 	NETBSD32TO64_UAP(fd);
   1201 	NETBSD32TO64_UAP(mode);
   1202 	return (sys_fchmod(p, &ua, retval));
   1203 }
   1204 
   1205 int
   1206 netbsd32_setreuid(p, v, retval)
   1207 	struct proc *p;
   1208 	void *v;
   1209 	register_t *retval;
   1210 {
   1211 	struct netbsd32_setreuid_args /* {
   1212 		syscallarg(uid_t) ruid;
   1213 		syscallarg(uid_t) euid;
   1214 	} */ *uap = v;
   1215 	struct sys_setreuid_args ua;
   1216 
   1217 	NETBSD32TO64_UAP(ruid);
   1218 	NETBSD32TO64_UAP(euid);
   1219 	return (sys_setreuid(p, &ua, retval));
   1220 }
   1221 
   1222 int
   1223 netbsd32_setregid(p, v, retval)
   1224 	struct proc *p;
   1225 	void *v;
   1226 	register_t *retval;
   1227 {
   1228 	struct netbsd32_setregid_args /* {
   1229 		syscallarg(gid_t) rgid;
   1230 		syscallarg(gid_t) egid;
   1231 	} */ *uap = v;
   1232 	struct sys_setregid_args ua;
   1233 
   1234 	NETBSD32TO64_UAP(rgid);
   1235 	NETBSD32TO64_UAP(egid);
   1236 	return (sys_setregid(p, &ua, retval));
   1237 }
   1238 
   1239 int
   1240 netbsd32_getsockopt(p, v, retval)
   1241 	struct proc *p;
   1242 	void *v;
   1243 	register_t *retval;
   1244 {
   1245 	struct netbsd32_getsockopt_args /* {
   1246 		syscallarg(int) s;
   1247 		syscallarg(int) level;
   1248 		syscallarg(int) name;
   1249 		syscallarg(netbsd32_voidp) val;
   1250 		syscallarg(netbsd32_intp) avalsize;
   1251 	} */ *uap = v;
   1252 	struct sys_getsockopt_args ua;
   1253 
   1254 	NETBSD32TO64_UAP(s);
   1255 	NETBSD32TO64_UAP(level);
   1256 	NETBSD32TO64_UAP(name);
   1257 	NETBSD32TOP_UAP(val, void);
   1258 	NETBSD32TOP_UAP(avalsize, int);
   1259 	return (sys_getsockopt(p, &ua, retval));
   1260 }
   1261 
   1262 int
   1263 netbsd32_rename(p, v, retval)
   1264 	struct proc *p;
   1265 	void *v;
   1266 	register_t *retval;
   1267 {
   1268 	struct netbsd32_rename_args /* {
   1269 		syscallarg(const netbsd32_charp) from;
   1270 		syscallarg(const netbsd32_charp) to;
   1271 	} */ *uap = v;
   1272 	struct sys_rename_args ua;
   1273 
   1274 	NETBSD32TOP_UAP(from, const char);
   1275 	NETBSD32TOP_UAP(to, const char)
   1276 
   1277 	return (sys_rename(p, &ua, retval));
   1278 }
   1279 
   1280 int
   1281 netbsd32_flock(p, v, retval)
   1282 	struct proc *p;
   1283 	void *v;
   1284 	register_t *retval;
   1285 {
   1286 	struct netbsd32_flock_args /* {
   1287 		syscallarg(int) fd;
   1288 		syscallarg(int) how;
   1289 	} */ *uap = v;
   1290 	struct sys_flock_args ua;
   1291 
   1292 	NETBSD32TO64_UAP(fd);
   1293 	NETBSD32TO64_UAP(how)
   1294 
   1295 	return (sys_flock(p, &ua, retval));
   1296 }
   1297 
   1298 int
   1299 netbsd32_mkfifo(p, v, retval)
   1300 	struct proc *p;
   1301 	void *v;
   1302 	register_t *retval;
   1303 {
   1304 	struct netbsd32_mkfifo_args /* {
   1305 		syscallarg(const netbsd32_charp) path;
   1306 		syscallarg(mode_t) mode;
   1307 	} */ *uap = v;
   1308 	struct sys_mkfifo_args ua;
   1309 
   1310 	NETBSD32TOP_UAP(path, const char)
   1311 	NETBSD32TO64_UAP(mode);
   1312 	return (sys_mkfifo(p, &ua, retval));
   1313 }
   1314 
   1315 int
   1316 netbsd32_shutdown(p, v, retval)
   1317 	struct proc *p;
   1318 	void *v;
   1319 	register_t *retval;
   1320 {
   1321 	struct netbsd32_shutdown_args /* {
   1322 		syscallarg(int) s;
   1323 		syscallarg(int) how;
   1324 	} */ *uap = v;
   1325 	struct sys_shutdown_args ua;
   1326 
   1327 	NETBSD32TO64_UAP(s)
   1328 	NETBSD32TO64_UAP(how);
   1329 	return (sys_shutdown(p, &ua, retval));
   1330 }
   1331 
   1332 int
   1333 netbsd32_socketpair(p, v, retval)
   1334 	struct proc *p;
   1335 	void *v;
   1336 	register_t *retval;
   1337 {
   1338 	struct netbsd32_socketpair_args /* {
   1339 		syscallarg(int) domain;
   1340 		syscallarg(int) type;
   1341 		syscallarg(int) protocol;
   1342 		syscallarg(netbsd32_intp) rsv;
   1343 	} */ *uap = v;
   1344 	struct sys_socketpair_args ua;
   1345 
   1346 	NETBSD32TO64_UAP(domain);
   1347 	NETBSD32TO64_UAP(type);
   1348 	NETBSD32TO64_UAP(protocol);
   1349 	NETBSD32TOP_UAP(rsv, int);
   1350 	/* Since we're just copying out two `int's we can do this */
   1351 	return (sys_socketpair(p, &ua, retval));
   1352 }
   1353 
   1354 int
   1355 netbsd32_mkdir(p, v, retval)
   1356 	struct proc *p;
   1357 	void *v;
   1358 	register_t *retval;
   1359 {
   1360 	struct netbsd32_mkdir_args /* {
   1361 		syscallarg(const netbsd32_charp) path;
   1362 		syscallarg(mode_t) mode;
   1363 	} */ *uap = v;
   1364 	struct sys_mkdir_args ua;
   1365 
   1366 	NETBSD32TOP_UAP(path, const char)
   1367 	NETBSD32TO64_UAP(mode);
   1368 	return (sys_mkdir(p, &ua, retval));
   1369 }
   1370 
   1371 int
   1372 netbsd32_rmdir(p, v, retval)
   1373 	struct proc *p;
   1374 	void *v;
   1375 	register_t *retval;
   1376 {
   1377 	struct netbsd32_rmdir_args /* {
   1378 		syscallarg(const netbsd32_charp) path;
   1379 	} */ *uap = v;
   1380 	struct sys_rmdir_args ua;
   1381 
   1382 	NETBSD32TOP_UAP(path, const char);
   1383 	return (sys_rmdir(p, &ua, retval));
   1384 }
   1385 
   1386 int
   1387 netbsd32_quotactl(p, v, retval)
   1388 	struct proc *p;
   1389 	void *v;
   1390 	register_t *retval;
   1391 {
   1392 	struct netbsd32_quotactl_args /* {
   1393 		syscallarg(const netbsd32_charp) path;
   1394 		syscallarg(int) cmd;
   1395 		syscallarg(int) uid;
   1396 		syscallarg(netbsd32_caddr_t) arg;
   1397 	} */ *uap = v;
   1398 	struct sys_quotactl_args ua;
   1399 
   1400 	NETBSD32TOP_UAP(path, const char);
   1401 	NETBSD32TO64_UAP(cmd);
   1402 	NETBSD32TO64_UAP(uid);
   1403 	NETBSD32TOX64_UAP(arg, caddr_t);
   1404 	return (sys_quotactl(p, &ua, retval));
   1405 }
   1406 
   1407 #if defined(NFS) || defined(NFSSERVER)
   1408 int
   1409 netbsd32_nfssvc(p, v, retval)
   1410 	struct proc *p;
   1411 	void *v;
   1412 	register_t *retval;
   1413 {
   1414 #if 0
   1415 	struct netbsd32_nfssvc_args /* {
   1416 		syscallarg(int) flag;
   1417 		syscallarg(netbsd32_voidp) argp;
   1418 	} */ *uap = v;
   1419 	struct sys_nfssvc_args ua;
   1420 
   1421 	NETBSD32TO64_UAP(flag);
   1422 	NETBSD32TOP_UAP(argp, void);
   1423 	return (sys_nfssvc(p, &ua, retval));
   1424 #else
   1425 	/* Why would we want to support a 32-bit nfsd? */
   1426 	return (ENOSYS);
   1427 #endif
   1428 }
   1429 #endif
   1430 
   1431 #if defined(NFS) || defined(NFSSERVER)
   1432 int
   1433 netbsd32_getfh(p, v, retval)
   1434 	struct proc *p;
   1435 	void *v;
   1436 	register_t *retval;
   1437 {
   1438 	struct netbsd32_getfh_args /* {
   1439 		syscallarg(const netbsd32_charp) fname;
   1440 		syscallarg(netbsd32_fhandlep_t) fhp;
   1441 	} */ *uap = v;
   1442 	struct sys_getfh_args ua;
   1443 
   1444 	NETBSD32TOP_UAP(fname, const char);
   1445 	NETBSD32TOP_UAP(fhp, struct fhandle);
   1446 	/* Lucky for us a fhandlep_t doesn't change sizes */
   1447 	return (sys_getfh(p, &ua, retval));
   1448 }
   1449 #endif
   1450 
   1451 int
   1452 netbsd32_sysarch(p, v, retval)
   1453 	struct proc *p;
   1454 	void *v;
   1455 	register_t *retval;
   1456 {
   1457 	struct netbsd32_sysarch_args /* {
   1458 		syscallarg(int) op;
   1459 		syscallarg(netbsd32_voidp) parms;
   1460 	} */ *uap = v;
   1461 
   1462 	switch (SCARG(uap, op)) {
   1463 	default:
   1464 		printf("(%s) netbsd32_sysarch(%d)\n", MACHINE, SCARG(uap, op));
   1465 		return EINVAL;
   1466 	}
   1467 }
   1468 
   1469 int
   1470 netbsd32_pread(p, v, retval)
   1471 	struct proc *p;
   1472 	void *v;
   1473 	register_t *retval;
   1474 {
   1475 	struct netbsd32_pread_args /* {
   1476 		syscallarg(int) fd;
   1477 		syscallarg(netbsd32_voidp) buf;
   1478 		syscallarg(netbsd32_size_t) nbyte;
   1479 		syscallarg(int) pad;
   1480 		syscallarg(off_t) offset;
   1481 	} */ *uap = v;
   1482 	struct sys_pread_args ua;
   1483 	ssize_t rt;
   1484 	int error;
   1485 
   1486 	NETBSD32TO64_UAP(fd);
   1487 	NETBSD32TOP_UAP(buf, void);
   1488 	NETBSD32TOX_UAP(nbyte, size_t);
   1489 	NETBSD32TO64_UAP(pad);
   1490 	NETBSD32TO64_UAP(offset);
   1491 	error = sys_pread(p, &ua, (register_t *)&rt);
   1492 	*retval = rt;
   1493 	return (error);
   1494 }
   1495 
   1496 int
   1497 netbsd32_pwrite(p, v, retval)
   1498 	struct proc *p;
   1499 	void *v;
   1500 	register_t *retval;
   1501 {
   1502 	struct netbsd32_pwrite_args /* {
   1503 		syscallarg(int) fd;
   1504 		syscallarg(const netbsd32_voidp) buf;
   1505 		syscallarg(netbsd32_size_t) nbyte;
   1506 		syscallarg(int) pad;
   1507 		syscallarg(off_t) offset;
   1508 	} */ *uap = v;
   1509 	struct sys_pwrite_args ua;
   1510 	ssize_t rt;
   1511 	int error;
   1512 
   1513 	NETBSD32TO64_UAP(fd);
   1514 	NETBSD32TOP_UAP(buf, void);
   1515 	NETBSD32TOX_UAP(nbyte, size_t);
   1516 	NETBSD32TO64_UAP(pad);
   1517 	NETBSD32TO64_UAP(offset);
   1518 	error = sys_pwrite(p, &ua, (register_t *)&rt);
   1519 	*retval = rt;
   1520 	return (error);
   1521 }
   1522 
   1523 int
   1524 netbsd32_setgid(p, v, retval)
   1525 	struct proc *p;
   1526 	void *v;
   1527 	register_t *retval;
   1528 {
   1529 	struct netbsd32_setgid_args /* {
   1530 		syscallarg(gid_t) gid;
   1531 	} */ *uap = v;
   1532 	struct sys_setgid_args ua;
   1533 
   1534 	NETBSD32TO64_UAP(gid);
   1535 	return (sys_setgid(p, v, retval));
   1536 }
   1537 
   1538 int
   1539 netbsd32_setegid(p, v, retval)
   1540 	struct proc *p;
   1541 	void *v;
   1542 	register_t *retval;
   1543 {
   1544 	struct netbsd32_setegid_args /* {
   1545 		syscallarg(gid_t) egid;
   1546 	} */ *uap = v;
   1547 	struct sys_setegid_args ua;
   1548 
   1549 	NETBSD32TO64_UAP(egid);
   1550 	return (sys_setegid(p, v, retval));
   1551 }
   1552 
   1553 int
   1554 netbsd32_seteuid(p, v, retval)
   1555 	struct proc *p;
   1556 	void *v;
   1557 	register_t *retval;
   1558 {
   1559 	struct netbsd32_seteuid_args /* {
   1560 		syscallarg(gid_t) euid;
   1561 	} */ *uap = v;
   1562 	struct sys_seteuid_args ua;
   1563 
   1564 	NETBSD32TO64_UAP(euid);
   1565 	return (sys_seteuid(p, v, retval));
   1566 }
   1567 
   1568 #ifdef LFS
   1569 int
   1570 netbsd32_sys_lfs_bmapv(p, v, retval)
   1571 	struct proc *p;
   1572 	void *v;
   1573 	register_t *retval;
   1574 {
   1575 
   1576 	return (ENOSYS);	/* XXX */
   1577 }
   1578 
   1579 int
   1580 netbsd32_sys_lfs_markv(p, v, retval)
   1581 	struct proc *p;
   1582 	void *v;
   1583 	register_t *retval;
   1584 {
   1585 
   1586 	return (ENOSYS);	/* XXX */
   1587 }
   1588 
   1589 int
   1590 netbsd32_sys_lfs_segclean(p, v, retval)
   1591 	struct proc *p;
   1592 	void *v;
   1593 	register_t *retval;
   1594 {
   1595 
   1596 	return (ENOSYS);	/* XXX */
   1597 }
   1598 
   1599 int
   1600 netbsd32_sys_lfs_segwait(p, v, retval)
   1601 	struct proc *p;
   1602 	void *v;
   1603 	register_t *retval;
   1604 {
   1605 
   1606 	return (ENOSYS);	/* XXX */
   1607 }
   1608 #endif
   1609 
   1610 int
   1611 netbsd32_pathconf(p, v, retval)
   1612 	struct proc *p;
   1613 	void *v;
   1614 	register_t *retval;
   1615 {
   1616 	struct netbsd32_pathconf_args /* {
   1617 		syscallarg(int) fd;
   1618 		syscallarg(int) name;
   1619 	} */ *uap = v;
   1620 	struct sys_pathconf_args ua;
   1621 	long rt;
   1622 	int error;
   1623 
   1624 	NETBSD32TOP_UAP(path, const char);
   1625 	NETBSD32TO64_UAP(name);
   1626 	error = sys_pathconf(p, &ua, (register_t *)&rt);
   1627 	*retval = rt;
   1628 	return (error);
   1629 }
   1630 
   1631 int
   1632 netbsd32_fpathconf(p, v, retval)
   1633 	struct proc *p;
   1634 	void *v;
   1635 	register_t *retval;
   1636 {
   1637 	struct netbsd32_fpathconf_args /* {
   1638 		syscallarg(int) fd;
   1639 		syscallarg(int) name;
   1640 	} */ *uap = v;
   1641 	struct sys_fpathconf_args ua;
   1642 	long rt;
   1643 	int error;
   1644 
   1645 	NETBSD32TO64_UAP(fd);
   1646 	NETBSD32TO64_UAP(name);
   1647 	error = sys_fpathconf(p, &ua, (register_t *)&rt);
   1648 	*retval = rt;
   1649 	return (error);
   1650 }
   1651 
   1652 int
   1653 netbsd32_getrlimit(p, v, retval)
   1654 	struct proc *p;
   1655 	void *v;
   1656 	register_t *retval;
   1657 {
   1658 	struct netbsd32_getrlimit_args /* {
   1659 		syscallarg(int) which;
   1660 		syscallarg(netbsd32_rlimitp_t) rlp;
   1661 	} */ *uap = v;
   1662 	int which = SCARG(uap, which);
   1663 
   1664 	if ((u_int)which >= RLIM_NLIMITS)
   1665 		return (EINVAL);
   1666 	return (copyout(&p->p_rlimit[which], (caddr_t)(u_long)SCARG(uap, rlp),
   1667 	    sizeof(struct rlimit)));
   1668 }
   1669 
   1670 int
   1671 netbsd32_setrlimit(p, v, retval)
   1672 	struct proc *p;
   1673 	void *v;
   1674 	register_t *retval;
   1675 {
   1676 	struct netbsd32_setrlimit_args /* {
   1677 		syscallarg(int) which;
   1678 		syscallarg(const netbsd32_rlimitp_t) rlp;
   1679 	} */ *uap = v;
   1680 		int which = SCARG(uap, which);
   1681 	struct rlimit alim;
   1682 	int error;
   1683 
   1684 	error = copyin((caddr_t)(u_long)SCARG(uap, rlp), &alim, sizeof(struct rlimit));
   1685 	if (error)
   1686 		return (error);
   1687 	return (dosetrlimit(p, p->p_cred, which, &alim));
   1688 }
   1689 
   1690 int
   1691 netbsd32_mmap(p, v, retval)
   1692 	struct proc *p;
   1693 	void *v;
   1694 	register_t *retval;
   1695 {
   1696 	struct netbsd32_mmap_args /* {
   1697 		syscallarg(netbsd32_voidp) addr;
   1698 		syscallarg(netbsd32_size_t) len;
   1699 		syscallarg(int) prot;
   1700 		syscallarg(int) flags;
   1701 		syscallarg(int) fd;
   1702 		syscallarg(netbsd32_long) pad;
   1703 		syscallarg(off_t) pos;
   1704 	} */ *uap = v;
   1705 	struct sys_mmap_args ua;
   1706 	void *rt;
   1707 	int error;
   1708 
   1709 	NETBSD32TOP_UAP(addr, void);
   1710 	NETBSD32TOX_UAP(len, size_t);
   1711 	NETBSD32TO64_UAP(prot);
   1712 	NETBSD32TO64_UAP(flags);
   1713 	NETBSD32TO64_UAP(fd);
   1714 	NETBSD32TOX_UAP(pad, long);
   1715 	NETBSD32TOX_UAP(pos, off_t);
   1716 	error = sys_mmap(p, &ua, (register_t *)&rt);
   1717 	if ((u_long)rt > (u_long)UINT_MAX) {
   1718 		printf("netbsd32_mmap: retval out of range: %p", rt);
   1719 		/* Should try to recover and return an error here. */
   1720 	}
   1721 	*retval = (netbsd32_voidp)(u_long)rt;
   1722 	return (error);
   1723 }
   1724 
   1725 int
   1726 netbsd32_lseek(p, v, retval)
   1727 	struct proc *p;
   1728 	void *v;
   1729 	register_t *retval;
   1730 {
   1731 	struct netbsd32_lseek_args /* {
   1732 		syscallarg(int) fd;
   1733 		syscallarg(int) pad;
   1734 		syscallarg(off_t) offset;
   1735 		syscallarg(int) whence;
   1736 	} */ *uap = v;
   1737 	struct sys_lseek_args ua;
   1738 
   1739 	NETBSD32TO64_UAP(fd);
   1740 	NETBSD32TO64_UAP(pad);
   1741 	NETBSD32TO64_UAP(offset);
   1742 	NETBSD32TO64_UAP(whence);
   1743 	return (sys_lseek(p, &ua, retval));
   1744 }
   1745 
   1746 int
   1747 netbsd32_truncate(p, v, retval)
   1748 	struct proc *p;
   1749 	void *v;
   1750 	register_t *retval;
   1751 {
   1752 	struct netbsd32_truncate_args /* {
   1753 		syscallarg(const netbsd32_charp) path;
   1754 		syscallarg(int) pad;
   1755 		syscallarg(off_t) length;
   1756 	} */ *uap = v;
   1757 	struct sys_truncate_args ua;
   1758 
   1759 	NETBSD32TOP_UAP(path, const char);
   1760 	NETBSD32TO64_UAP(pad);
   1761 	NETBSD32TO64_UAP(length);
   1762 	return (sys_truncate(p, &ua, retval));
   1763 }
   1764 
   1765 int
   1766 netbsd32_ftruncate(p, v, retval)
   1767 	struct proc *p;
   1768 	void *v;
   1769 	register_t *retval;
   1770 {
   1771 	struct netbsd32_ftruncate_args /* {
   1772 		syscallarg(int) fd;
   1773 		syscallarg(int) pad;
   1774 		syscallarg(off_t) length;
   1775 	} */ *uap = v;
   1776 	struct sys_ftruncate_args ua;
   1777 
   1778 	NETBSD32TO64_UAP(fd);
   1779 	NETBSD32TO64_UAP(pad);
   1780 	NETBSD32TO64_UAP(length);
   1781 	return (sys_ftruncate(p, &ua, retval));
   1782 }
   1783 
   1784 int
   1785 netbsd32_mlock(p, v, retval)
   1786 	struct proc *p;
   1787 	void *v;
   1788 	register_t *retval;
   1789 {
   1790 	struct netbsd32_mlock_args /* {
   1791 		syscallarg(const netbsd32_voidp) addr;
   1792 		syscallarg(netbsd32_size_t) len;
   1793 	} */ *uap = v;
   1794 	struct sys_mlock_args ua;
   1795 
   1796 	NETBSD32TOP_UAP(addr, const void);
   1797 	NETBSD32TO64_UAP(len);
   1798 	return (sys_mlock(p, &ua, retval));
   1799 }
   1800 
   1801 int
   1802 netbsd32_munlock(p, v, retval)
   1803 	struct proc *p;
   1804 	void *v;
   1805 	register_t *retval;
   1806 {
   1807 	struct netbsd32_munlock_args /* {
   1808 		syscallarg(const netbsd32_voidp) addr;
   1809 		syscallarg(netbsd32_size_t) len;
   1810 	} */ *uap = v;
   1811 	struct sys_munlock_args ua;
   1812 
   1813 	NETBSD32TOP_UAP(addr, const void);
   1814 	NETBSD32TO64_UAP(len);
   1815 	return (sys_munlock(p, &ua, retval));
   1816 }
   1817 
   1818 int
   1819 netbsd32_undelete(p, v, retval)
   1820 	struct proc *p;
   1821 	void *v;
   1822 	register_t *retval;
   1823 {
   1824 	struct netbsd32_undelete_args /* {
   1825 		syscallarg(const netbsd32_charp) path;
   1826 	} */ *uap = v;
   1827 	struct sys_undelete_args ua;
   1828 
   1829 	NETBSD32TOP_UAP(path, const char);
   1830 	return (sys_undelete(p, &ua, retval));
   1831 }
   1832 
   1833 int
   1834 netbsd32_getpgid(p, v, retval)
   1835 	struct proc *p;
   1836 	void *v;
   1837 	register_t *retval;
   1838 {
   1839 	struct netbsd32_getpgid_args /* {
   1840 		syscallarg(pid_t) pid;
   1841 	} */ *uap = v;
   1842 	struct sys_getpgid_args ua;
   1843 
   1844 	NETBSD32TO64_UAP(pid);
   1845 	return (sys_getpgid(p, &ua, retval));
   1846 }
   1847 
   1848 int
   1849 netbsd32_reboot(p, v, retval)
   1850 	struct proc *p;
   1851 	void *v;
   1852 	register_t *retval;
   1853 {
   1854 	struct netbsd32_reboot_args /* {
   1855 		syscallarg(int) opt;
   1856 		syscallarg(netbsd32_charp) bootstr;
   1857 	} */ *uap = v;
   1858 	struct sys_reboot_args ua;
   1859 
   1860 	NETBSD32TO64_UAP(opt);
   1861 	NETBSD32TOP_UAP(bootstr, char);
   1862 	return (sys_reboot(p, &ua, retval));
   1863 }
   1864 
   1865 int
   1866 netbsd32_poll(p, v, retval)
   1867 	struct proc *p;
   1868 	void *v;
   1869 	register_t *retval;
   1870 {
   1871 	struct netbsd32_poll_args /* {
   1872 		syscallarg(netbsd32_pollfdp_t) fds;
   1873 		syscallarg(u_int) nfds;
   1874 		syscallarg(int) timeout;
   1875 	} */ *uap = v;
   1876 	struct sys_poll_args ua;
   1877 
   1878 	NETBSD32TOP_UAP(fds, struct pollfd);
   1879 	NETBSD32TO64_UAP(nfds);
   1880 	NETBSD32TO64_UAP(timeout);
   1881 	return (sys_poll(p, &ua, retval));
   1882 }
   1883 
   1884 int
   1885 netbsd32_fdatasync(p, v, retval)
   1886 	struct proc *p;
   1887 	void *v;
   1888 	register_t *retval;
   1889 {
   1890 	struct netbsd32_fdatasync_args /* {
   1891 		syscallarg(int) fd;
   1892 	} */ *uap = v;
   1893 	struct sys_fdatasync_args ua;
   1894 
   1895 	NETBSD32TO64_UAP(fd);
   1896 	return (sys_fdatasync(p, &ua, retval));
   1897 }
   1898 
   1899 int
   1900 netbsd32___posix_rename(p, v, retval)
   1901 	struct proc *p;
   1902 	void *v;
   1903 	register_t *retval;
   1904 {
   1905 	struct netbsd32___posix_rename_args /* {
   1906 		syscallarg(const netbsd32_charp) from;
   1907 		syscallarg(const netbsd32_charp) to;
   1908 	} */ *uap = v;
   1909 	struct sys___posix_rename_args ua;
   1910 
   1911 	NETBSD32TOP_UAP(from, const char);
   1912 	NETBSD32TOP_UAP(to, const char);
   1913 	return (sys___posix_rename(p, &ua, retval));
   1914 }
   1915 
   1916 int
   1917 netbsd32_swapctl(p, v, retval)
   1918 	struct proc *p;
   1919 	void *v;
   1920 	register_t *retval;
   1921 {
   1922 	struct netbsd32_swapctl_args /* {
   1923 		syscallarg(int) cmd;
   1924 		syscallarg(const netbsd32_voidp) arg;
   1925 		syscallarg(int) misc;
   1926 	} */ *uap = v;
   1927 	struct sys_swapctl_args ua;
   1928 
   1929 	NETBSD32TO64_UAP(cmd);
   1930 	NETBSD32TOP_UAP(arg, const void);
   1931 	NETBSD32TO64_UAP(misc);
   1932 	return (sys_swapctl(p, &ua, retval));
   1933 }
   1934 
   1935 int
   1936 netbsd32_minherit(p, v, retval)
   1937 	struct proc *p;
   1938 	void *v;
   1939 	register_t *retval;
   1940 {
   1941 	struct netbsd32_minherit_args /* {
   1942 		syscallarg(netbsd32_voidp) addr;
   1943 		syscallarg(netbsd32_size_t) len;
   1944 		syscallarg(int) inherit;
   1945 	} */ *uap = v;
   1946 	struct sys_minherit_args ua;
   1947 
   1948 	NETBSD32TOP_UAP(addr, void);
   1949 	NETBSD32TOX_UAP(len, size_t);
   1950 	NETBSD32TO64_UAP(inherit);
   1951 	return (sys_minherit(p, &ua, retval));
   1952 }
   1953 
   1954 int
   1955 netbsd32_lchmod(p, v, retval)
   1956 	struct proc *p;
   1957 	void *v;
   1958 	register_t *retval;
   1959 {
   1960 	struct netbsd32_lchmod_args /* {
   1961 		syscallarg(const netbsd32_charp) path;
   1962 		syscallarg(mode_t) mode;
   1963 	} */ *uap = v;
   1964 	struct sys_lchmod_args ua;
   1965 
   1966 	NETBSD32TOP_UAP(path, const char);
   1967 	NETBSD32TO64_UAP(mode);
   1968 	return (sys_lchmod(p, &ua, retval));
   1969 }
   1970 
   1971 int
   1972 netbsd32_lchown(p, v, retval)
   1973 	struct proc *p;
   1974 	void *v;
   1975 	register_t *retval;
   1976 {
   1977 	struct netbsd32_lchown_args /* {
   1978 		syscallarg(const netbsd32_charp) path;
   1979 		syscallarg(uid_t) uid;
   1980 		syscallarg(gid_t) gid;
   1981 	} */ *uap = v;
   1982 	struct sys_lchown_args ua;
   1983 
   1984 	NETBSD32TOP_UAP(path, const char);
   1985 	NETBSD32TO64_UAP(uid);
   1986 	NETBSD32TO64_UAP(gid);
   1987 	return (sys_lchown(p, &ua, retval));
   1988 }
   1989 
   1990 int
   1991 netbsd32___msync13(p, v, retval)
   1992 	struct proc *p;
   1993 	void *v;
   1994 	register_t *retval;
   1995 {
   1996 	struct netbsd32___msync13_args /* {
   1997 		syscallarg(netbsd32_voidp) addr;
   1998 		syscallarg(netbsd32_size_t) len;
   1999 		syscallarg(int) flags;
   2000 	} */ *uap = v;
   2001 	struct sys___msync13_args ua;
   2002 
   2003 	NETBSD32TOP_UAP(addr, void);
   2004 	NETBSD32TOX_UAP(len, size_t);
   2005 	NETBSD32TO64_UAP(flags);
   2006 	return (sys___msync13(p, &ua, retval));
   2007 }
   2008 
   2009 int
   2010 netbsd32___posix_chown(p, v, retval)
   2011 	struct proc *p;
   2012 	void *v;
   2013 	register_t *retval;
   2014 {
   2015 	struct netbsd32___posix_chown_args /* {
   2016 		syscallarg(const netbsd32_charp) path;
   2017 		syscallarg(uid_t) uid;
   2018 		syscallarg(gid_t) gid;
   2019 	} */ *uap = v;
   2020 	struct sys___posix_chown_args ua;
   2021 
   2022 	NETBSD32TOP_UAP(path, const char);
   2023 	NETBSD32TO64_UAP(uid);
   2024 	NETBSD32TO64_UAP(gid);
   2025 	return (sys___posix_chown(p, &ua, retval));
   2026 }
   2027 
   2028 int
   2029 netbsd32___posix_fchown(p, v, retval)
   2030 	struct proc *p;
   2031 	void *v;
   2032 	register_t *retval;
   2033 {
   2034 	struct netbsd32___posix_fchown_args /* {
   2035 		syscallarg(int) fd;
   2036 		syscallarg(uid_t) uid;
   2037 		syscallarg(gid_t) gid;
   2038 	} */ *uap = v;
   2039 	struct sys___posix_fchown_args ua;
   2040 
   2041 	NETBSD32TO64_UAP(fd);
   2042 	NETBSD32TO64_UAP(uid);
   2043 	NETBSD32TO64_UAP(gid);
   2044 	return (sys___posix_fchown(p, &ua, retval));
   2045 }
   2046 
   2047 int
   2048 netbsd32___posix_lchown(p, v, retval)
   2049 	struct proc *p;
   2050 	void *v;
   2051 	register_t *retval;
   2052 {
   2053 	struct netbsd32___posix_lchown_args /* {
   2054 		syscallarg(const netbsd32_charp) path;
   2055 		syscallarg(uid_t) uid;
   2056 		syscallarg(gid_t) gid;
   2057 	} */ *uap = v;
   2058 	struct sys___posix_lchown_args ua;
   2059 
   2060 	NETBSD32TOP_UAP(path, const char);
   2061 	NETBSD32TO64_UAP(uid);
   2062 	NETBSD32TO64_UAP(gid);
   2063 	return (sys___posix_lchown(p, &ua, retval));
   2064 }
   2065 
   2066 int
   2067 netbsd32_getsid(p, v, retval)
   2068 	struct proc *p;
   2069 	void *v;
   2070 	register_t *retval;
   2071 {
   2072 	struct netbsd32_getsid_args /* {
   2073 		syscallarg(pid_t) pid;
   2074 	} */ *uap = v;
   2075 	struct sys_getsid_args ua;
   2076 
   2077 	NETBSD32TO64_UAP(pid);
   2078 	return (sys_getsid(p, &ua, retval));
   2079 }
   2080 
   2081 #ifdef KTRACE
   2082 int
   2083 netbsd32_fktrace(p, v, retval)
   2084 	struct proc *p;
   2085 	void *v;
   2086 	register_t *retval;
   2087 {
   2088 	struct netbsd32_fktrace_args /* {
   2089 		syscallarg(const int) fd;
   2090 		syscallarg(int) ops;
   2091 		syscallarg(int) facs;
   2092 		syscallarg(int) pid;
   2093 	} */ *uap = v;
   2094 #if 0
   2095 	struct sys_fktrace_args ua;
   2096 #else
   2097 	/* XXXX */
   2098 	struct sys_fktrace_noconst_args {
   2099 		syscallarg(int) fd;
   2100 		syscallarg(int) ops;
   2101 		syscallarg(int) facs;
   2102 		syscallarg(int) pid;
   2103 	} ua;
   2104 #endif
   2105 
   2106 	NETBSD32TOX_UAP(fd, int);
   2107 	NETBSD32TO64_UAP(ops);
   2108 	NETBSD32TO64_UAP(facs);
   2109 	NETBSD32TO64_UAP(pid);
   2110 	return (sys_fktrace(p, &ua, retval));
   2111 }
   2112 #endif /* KTRACE */
   2113 
   2114 int netbsd32___sigpending14(p, v, retval)
   2115 	struct proc *p;
   2116 	void   *v;
   2117 	register_t *retval;
   2118 {
   2119 	struct netbsd32___sigpending14_args /* {
   2120 		syscallarg(sigset_t *) set;
   2121 	} */ *uap = v;
   2122 	struct sys___sigpending14_args ua;
   2123 
   2124 	NETBSD32TOP_UAP(set, sigset_t);
   2125 	return (sys___sigpending14(p, &ua, retval));
   2126 }
   2127 
   2128 int netbsd32___sigprocmask14(p, v, retval)
   2129 	struct proc *p;
   2130 	void   *v;
   2131 	register_t *retval;
   2132 {
   2133 	struct netbsd32___sigprocmask14_args /* {
   2134 		syscallarg(int) how;
   2135 		syscallarg(const sigset_t *) set;
   2136 		syscallarg(sigset_t *) oset;
   2137 	} */ *uap = v;
   2138 	struct sys___sigprocmask14_args ua;
   2139 
   2140 	NETBSD32TO64_UAP(how);
   2141 	NETBSD32TOP_UAP(set, sigset_t);
   2142 	NETBSD32TOP_UAP(oset, sigset_t);
   2143 	return (sys___sigprocmask14(p, &ua, retval));
   2144 }
   2145 
   2146 int netbsd32___sigsuspend14(p, v, retval)
   2147 	struct proc *p;
   2148 	void   *v;
   2149 	register_t *retval;
   2150 {
   2151 	struct netbsd32___sigsuspend14_args /* {
   2152 		syscallarg(const sigset_t *) set;
   2153 	} */ *uap = v;
   2154 	struct sys___sigsuspend14_args ua;
   2155 
   2156 	NETBSD32TOP_UAP(set, sigset_t);
   2157 	return (sys___sigsuspend14(p, &ua, retval));
   2158 };
   2159 
   2160 int netbsd32_fchroot(p, v, retval)
   2161 	struct proc *p;
   2162 	void *v;
   2163 	register_t *retval;
   2164 {
   2165 	struct netbsd32_fchroot_args /* {
   2166 		syscallarg(int) fd;
   2167 	} */ *uap = v;
   2168 	struct sys_fchroot_args ua;
   2169 
   2170 	NETBSD32TO64_UAP(fd);
   2171 	return (sys_fchroot(p, &ua, retval));
   2172 }
   2173 
   2174 /*
   2175  * Open a file given a file handle.
   2176  *
   2177  * Check permissions, allocate an open file structure,
   2178  * and call the device open routine if any.
   2179  */
   2180 int
   2181 netbsd32_fhopen(p, v, retval)
   2182 	struct proc *p;
   2183 	void *v;
   2184 	register_t *retval;
   2185 {
   2186 	struct netbsd32_fhopen_args /* {
   2187 		syscallarg(const fhandle_t *) fhp;
   2188 		syscallarg(int) flags;
   2189 	} */ *uap = v;
   2190 	struct sys_fhopen_args ua;
   2191 
   2192 	NETBSD32TOP_UAP(fhp, fhandle_t);
   2193 	NETBSD32TO64_UAP(flags);
   2194 	return (sys_fhopen(p, &ua, retval));
   2195 }
   2196 
   2197 int netbsd32_fhstat(p, v, retval)
   2198 	struct proc *p;
   2199 	void *v;
   2200 	register_t *retval;
   2201 {
   2202 	struct netbsd32_fhstat_args /* {
   2203 		syscallarg(const netbsd32_fhandlep_t) fhp;
   2204 		syscallarg(struct stat *) sb;
   2205 	} */ *uap = v;
   2206 	struct sys_fhstat_args ua;
   2207 
   2208 	NETBSD32TOP_UAP(fhp, const fhandle_t);
   2209 	NETBSD32TOP_UAP(sb, struct stat);
   2210 	return (sys_fhstat(p, &ua, retval));
   2211 }
   2212 
   2213 int netbsd32_fhstatfs(p, v, retval)
   2214 	struct proc *p;
   2215 	void *v;
   2216 	register_t *retval;
   2217 {
   2218 	struct netbsd32_fhstatfs_args /* {
   2219 		syscallarg(const netbsd32_fhandlep_t) fhp;
   2220 		syscallarg(struct statfs *) buf;
   2221 	} */ *uap = v;
   2222 	struct sys_fhstatfs_args ua;
   2223 
   2224 	NETBSD32TOP_UAP(fhp, const fhandle_t);
   2225 	NETBSD32TOP_UAP(buf, struct statfs);
   2226 	return (sys_fhstatfs(p, &ua, retval));
   2227 }
   2228 
   2229 /* virtual memory syscalls */
   2230 int
   2231 netbsd32_ovadvise(p, v, retval)
   2232 	struct proc *p;
   2233 	void *v;
   2234 	register_t *retval;
   2235 {
   2236 	struct netbsd32_ovadvise_args /* {
   2237 		syscallarg(int) anom;
   2238 	} */ *uap = v;
   2239 	struct sys_ovadvise_args ua;
   2240 
   2241 	NETBSD32TO64_UAP(anom);
   2242 	return (sys_ovadvise(p, &ua, retval));
   2243 }
   2244 
   2245