xref: /netbsd-src/sys/compat/netbsd32/netbsd32_netbsd.c (revision c0179c282a5968435315a82f4128c61372c68fc3)
1 /*	$NetBSD: netbsd32_netbsd.c,v 1.115 2006/11/21 18:50:01 christos 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 #include <sys/cdefs.h>
32 __KERNEL_RCSID(0, "$NetBSD: netbsd32_netbsd.c,v 1.115 2006/11/21 18:50:01 christos Exp $");
33 
34 #if defined(_KERNEL_OPT)
35 #include "opt_ddb.h"
36 #include "opt_ktrace.h"
37 #include "opt_ntp.h"
38 #include "opt_compat_netbsd.h"
39 #include "opt_compat_43.h"
40 #include "opt_sysv.h"
41 #include "opt_nfsserver.h"
42 #include "opt_syscall_debug.h"
43 #include "opt_ptrace.h"
44 
45 #include "fs_lfs.h"
46 #include "fs_nfs.h"
47 #endif
48 
49 /*
50  * Though COMPAT_OLDSOCK is needed only for COMPAT_43, SunOS, Linux,
51  * HP-UX, FreeBSD, Ultrix, OSF1, we define it unconditionally so that
52  * this would be LKM-safe.
53  */
54 #define COMPAT_OLDSOCK /* used by <sys/socket.h> */
55 
56 #include <sys/param.h>
57 #include <sys/systm.h>
58 #include <sys/kernel.h>
59 //#define msg __msg /* Don't ask me! */
60 #include <sys/malloc.h>
61 #include <sys/mount.h>
62 #include <sys/socket.h>
63 #include <sys/sockio.h>
64 #include <sys/socketvar.h>
65 #include <sys/mbuf.h>
66 #include <sys/stat.h>
67 #include <sys/time.h>
68 #include <sys/signalvar.h>
69 #include <sys/ptrace.h>
70 #include <sys/ktrace.h>
71 #include <sys/trace.h>
72 #include <sys/resourcevar.h>
73 #include <sys/pool.h>
74 #include <sys/vnode.h>
75 #include <sys/file.h>
76 #include <sys/filedesc.h>
77 #include <sys/namei.h>
78 #include <sys/dirent.h>
79 #include <sys/kauth.h>
80 
81 #include <uvm/uvm_extern.h>
82 
83 #include <sys/sa.h>
84 #include <sys/savar.h>
85 #include <sys/syscallargs.h>
86 #include <sys/proc.h>
87 #include <sys/acct.h>
88 #include <sys/exec.h>
89 
90 #include <net/if.h>
91 
92 #include <compat/netbsd32/netbsd32.h>
93 #include <compat/netbsd32/netbsd32_exec.h>
94 #include <compat/netbsd32/netbsd32_syscall.h>
95 #include <compat/netbsd32/netbsd32_syscallargs.h>
96 #include <compat/netbsd32/netbsd32_conv.h>
97 #include <compat/netbsd32/netbsd32_sa.h>
98 
99 #include <machine/frame.h>
100 
101 #if defined(DDB)
102 #include <ddb/ddbvar.h>
103 #endif
104 
105 extern struct sysent netbsd32_sysent[];
106 #ifdef SYSCALL_DEBUG
107 extern const char * const netbsd32_syscallnames[];
108 #endif
109 #ifdef __HAVE_SYSCALL_INTERN
110 void netbsd32_syscall_intern __P((struct proc *));
111 #else
112 void syscall __P((void));
113 #endif
114 
115 #define LIMITCHECK(a, b) ((a) != RLIM_INFINITY && (a) > (b))
116 
117 #ifdef COMPAT_16
118 extern char netbsd32_sigcode[], netbsd32_esigcode[];
119 struct uvm_object *emul_netbsd32_object;
120 #endif
121 
122 extern struct sysctlnode netbsd32_sysctl_root;
123 
124 const struct sa_emul saemul_netbsd32 = {
125 	sizeof(ucontext32_t),
126 	sizeof(struct netbsd32_sa_t),
127 	sizeof(netbsd32_sa_tp),
128 	netbsd32_sacopyout,
129 	netbsd32_upcallconv,
130 	netbsd32_cpu_upcall,
131 	(void (*)(struct lwp *, void *))getucontext32,
132 	netbsd32_sa_ucsp
133 };
134 
135 const struct emul emul_netbsd32 = {
136 	"netbsd32",
137 	"/emul/netbsd32",
138 #ifndef __HAVE_MINIMAL_EMUL
139 	0,
140 	NULL,
141 	netbsd32_SYS_syscall,
142 	netbsd32_SYS_NSYSENT,
143 #endif
144 	netbsd32_sysent,
145 #ifdef SYSCALL_DEBUG
146 	netbsd32_syscallnames,
147 #else
148 	NULL,
149 #endif
150 	netbsd32_sendsig,
151 	trapsignal,
152 	NULL,
153 #ifdef COMPAT_16
154 	netbsd32_sigcode,
155 	netbsd32_esigcode,
156 	&emul_netbsd32_object,
157 #else
158 	NULL,
159 	NULL,
160 	NULL,
161 #endif
162 	netbsd32_setregs,
163 	NULL,
164 	NULL,
165 	NULL,
166 	NULL,
167 	NULL,
168 #ifdef __HAVE_SYSCALL_INTERN
169 	netbsd32_syscall_intern,
170 #else
171 	syscall,
172 #endif
173 	&netbsd32_sysctl_root,
174 	NULL,
175 
176 	netbsd32_vm_default_addr,
177 	NULL,
178 	&saemul_netbsd32,
179 };
180 
181 /*
182  * below are all the standard NetBSD system calls, in the 32bit
183  * environment, with the necessary conversions to 64bit before
184  * calling the real syscall.  anything that needs special
185  * attention is handled elsewhere.
186  */
187 
188 int
189 netbsd32_exit(l, v, retval)
190 	struct lwp *l;
191 	void *v;
192 	register_t *retval;
193 {
194 	struct netbsd32_exit_args /* {
195 		syscallarg(int) rval;
196 	} */ *uap = v;
197 	struct sys_exit_args ua;
198 
199 	NETBSD32TO64_UAP(rval);
200 	return sys_exit(l, &ua, retval);
201 }
202 
203 int
204 netbsd32_read(l, v, retval)
205 	struct lwp *l;
206 	void *v;
207 	register_t *retval;
208 {
209 	struct netbsd32_read_args /* {
210 		syscallarg(int) fd;
211 		syscallarg(netbsd32_voidp) buf;
212 		syscallarg(netbsd32_size_t) nbyte;
213 	} */ *uap = v;
214 	struct sys_read_args ua;
215 
216 	NETBSD32TO64_UAP(fd);
217 	NETBSD32TOP_UAP(buf, void *);
218 	NETBSD32TOX_UAP(nbyte, size_t);
219 	return sys_read(l, &ua, retval);
220 }
221 
222 int
223 netbsd32_write(l, v, retval)
224 	struct lwp *l;
225 	void *v;
226 	register_t *retval;
227 {
228 	struct netbsd32_write_args /* {
229 		syscallarg(int) fd;
230 		syscallarg(const netbsd32_voidp) buf;
231 		syscallarg(netbsd32_size_t) nbyte;
232 	} */ *uap = v;
233 	struct sys_write_args ua;
234 
235 	NETBSD32TO64_UAP(fd);
236 	NETBSD32TOP_UAP(buf, void *);
237 	NETBSD32TOX_UAP(nbyte, size_t);
238 	return sys_write(l, &ua, retval);
239 }
240 
241 int
242 netbsd32_close(l, v, retval)
243 	struct lwp *l;
244 	void *v;
245 	register_t *retval;
246 {
247 	struct netbsd32_close_args /* {
248 		syscallarg(int) fd;
249 	} */ *uap = v;
250 	struct sys_close_args ua;
251 
252 	NETBSD32TO64_UAP(fd);
253 	return sys_close(l, &ua, retval);
254 }
255 
256 int
257 netbsd32_open(l, v, retval)
258 	struct lwp *l;
259 	void *v;
260 	register_t *retval;
261 {
262 	struct netbsd32_open_args /* {
263 		syscallarg(const netbsd32_charp) path;
264 		syscallarg(int) flags;
265 		syscallarg(mode_t) mode;
266 	} */ *uap = v;
267 	struct sys_open_args ua;
268 	caddr_t sg;
269 
270 	NETBSD32TOP_UAP(path, const char);
271 	NETBSD32TO64_UAP(flags);
272 	NETBSD32TO64_UAP(mode);
273 	sg = stackgap_init(l->l_proc, 0);
274 	CHECK_ALT_EXIST(l, &sg, SCARG(&ua, path));
275 
276 	return (sys_open(l, &ua, retval));
277 }
278 
279 int
280 netbsd32_link(l, v, retval)
281 	struct lwp *l;
282 	void *v;
283 	register_t *retval;
284 {
285 	struct netbsd32_link_args /* {
286 		syscallarg(const netbsd32_charp) path;
287 		syscallarg(const netbsd32_charp) link;
288 	} */ *uap = v;
289 	struct sys_link_args ua;
290 
291 	NETBSD32TOP_UAP(path, const char);
292 	NETBSD32TOP_UAP(link, const char);
293 	return (sys_link(l, &ua, retval));
294 }
295 
296 int
297 netbsd32_unlink(l, v, retval)
298 	struct lwp *l;
299 	void *v;
300 	register_t *retval;
301 {
302 	struct netbsd32_unlink_args /* {
303 		syscallarg(const netbsd32_charp) path;
304 	} */ *uap = v;
305 	struct sys_unlink_args ua;
306 
307 	NETBSD32TOP_UAP(path, const char);
308 
309 	return (sys_unlink(l, &ua, retval));
310 }
311 
312 int
313 netbsd32_chdir(l, v, retval)
314 	struct lwp *l;
315 	void *v;
316 	register_t *retval;
317 {
318 	struct netbsd32_chdir_args /* {
319 		syscallarg(const netbsd32_charp) path;
320 	} */ *uap = v;
321 	struct sys_chdir_args ua;
322 
323 	NETBSD32TOP_UAP(path, const char);
324 
325 	return (sys_chdir(l, &ua, retval));
326 }
327 
328 int
329 netbsd32_fchdir(l, v, retval)
330 	struct lwp *l;
331 	void *v;
332 	register_t *retval;
333 {
334 	struct netbsd32_fchdir_args /* {
335 		syscallarg(int) fd;
336 	} */ *uap = v;
337 	struct sys_fchdir_args ua;
338 
339 	NETBSD32TO64_UAP(fd);
340 
341 	return (sys_fchdir(l, &ua, retval));
342 }
343 
344 int
345 netbsd32_mknod(l, v, retval)
346 	struct lwp *l;
347 	void *v;
348 	register_t *retval;
349 {
350 	struct netbsd32_mknod_args /* {
351 		syscallarg(const netbsd32_charp) path;
352 		syscallarg(mode_t) mode;
353 		syscallarg(dev_t) dev;
354 	} */ *uap = v;
355 	struct sys_mknod_args ua;
356 
357 	NETBSD32TOP_UAP(path, const char);
358 	NETBSD32TO64_UAP(dev);
359 	NETBSD32TO64_UAP(mode);
360 
361 	return (sys_mknod(l, &ua, retval));
362 }
363 
364 int
365 netbsd32_chmod(l, v, retval)
366 	struct lwp *l;
367 	void *v;
368 	register_t *retval;
369 {
370 	struct netbsd32_chmod_args /* {
371 		syscallarg(const netbsd32_charp) path;
372 		syscallarg(mode_t) mode;
373 	} */ *uap = v;
374 	struct sys_chmod_args ua;
375 
376 	NETBSD32TOP_UAP(path, const char);
377 	NETBSD32TO64_UAP(mode);
378 
379 	return (sys_chmod(l, &ua, retval));
380 }
381 
382 int
383 netbsd32_chown(l, v, retval)
384 	struct lwp *l;
385 	void *v;
386 	register_t *retval;
387 {
388 	struct netbsd32_chown_args /* {
389 		syscallarg(const netbsd32_charp) path;
390 		syscallarg(uid_t) uid;
391 		syscallarg(gid_t) gid;
392 	} */ *uap = v;
393 	struct sys_chown_args ua;
394 
395 	NETBSD32TOP_UAP(path, const char);
396 	NETBSD32TO64_UAP(uid);
397 	NETBSD32TO64_UAP(gid);
398 
399 	return (sys_chown(l, &ua, retval));
400 }
401 
402 int
403 netbsd32_break(l, v, retval)
404 	struct lwp *l;
405 	void *v;
406 	register_t *retval;
407 {
408 	struct netbsd32_break_args /* {
409 		syscallarg(netbsd32_charp) nsize;
410 	} */ *uap = v;
411 	struct sys_obreak_args ua;
412 
413 	SCARG(&ua, nsize) = (char *)NETBSD32PTR64(SCARG(uap, nsize));
414 	NETBSD32TOP_UAP(nsize, char);
415 	return (sys_obreak(l, &ua, retval));
416 }
417 
418 int
419 netbsd32_mount(l, v, retval)
420 	struct lwp *l;
421 	void *v;
422 	register_t *retval;
423 {
424 	struct netbsd32_mount_args /* {
425 		syscallarg(const netbsd32_charp) type;
426 		syscallarg(const netbsd32_charp) path;
427 		syscallarg(int) flags;
428 		syscallarg(netbsd32_voidp) data;
429 	} */ *uap = v;
430 	struct sys_mount_args ua;
431 
432 	NETBSD32TOP_UAP(type, const char);
433 	NETBSD32TOP_UAP(path, const char);
434 	NETBSD32TO64_UAP(flags);
435 	NETBSD32TOP_UAP(data, void);
436 	return (sys_mount(l, &ua, retval));
437 }
438 
439 int
440 netbsd32_unmount(l, v, retval)
441 	struct lwp *l;
442 	void *v;
443 	register_t *retval;
444 {
445 	struct netbsd32_unmount_args /* {
446 		syscallarg(const netbsd32_charp) path;
447 		syscallarg(int) flags;
448 	} */ *uap = v;
449 	struct sys_unmount_args ua;
450 
451 	NETBSD32TOP_UAP(path, const char);
452 	NETBSD32TO64_UAP(flags);
453 	return (sys_unmount(l, &ua, retval));
454 }
455 
456 int
457 netbsd32_setuid(l, v, retval)
458 	struct lwp *l;
459 	void *v;
460 	register_t *retval;
461 {
462 	struct netbsd32_setuid_args /* {
463 		syscallarg(uid_t) uid;
464 	} */ *uap = v;
465 	struct sys_setuid_args ua;
466 
467 	NETBSD32TO64_UAP(uid);
468 	return (sys_setuid(l, &ua, retval));
469 }
470 
471 int
472 netbsd32_ptrace(l, v, retval)
473 	struct lwp *l;
474 	void *v;
475 	register_t *retval;
476 {
477 #if defined(PTRACE) || defined(_LKM)
478 	struct netbsd32_ptrace_args /* {
479 		syscallarg(int) req;
480 		syscallarg(pid_t) pid;
481 		syscallarg(netbsd32_caddr_t) addr;
482 		syscallarg(int) data;
483 	} */ *uap = v;
484 	struct sys_ptrace_args ua;
485 
486 	NETBSD32TO64_UAP(req);
487 	NETBSD32TO64_UAP(pid);
488 	NETBSD32TOX64_UAP(addr, caddr_t);
489 	NETBSD32TO64_UAP(data);
490 #ifdef _LKM
491 	return (*sysent[SYS_ptrace].sy_call)(l, &ua, retval);
492 #else
493 	return sys_ptrace(l, &ua, retval);
494 #endif
495 #else
496 	return (ENOSYS);
497 #endif /* PTRACE || _LKM */
498 }
499 
500 int
501 netbsd32_accept(l, v, retval)
502 	struct lwp *l;
503 	void *v;
504 	register_t *retval;
505 {
506 	struct netbsd32_accept_args /* {
507 		syscallarg(int) s;
508 		syscallarg(netbsd32_sockaddrp_t) name;
509 		syscallarg(netbsd32_intp) anamelen;
510 	} */ *uap = v;
511 	struct sys_accept_args ua;
512 
513 	NETBSD32TO64_UAP(s);
514 	NETBSD32TOP_UAP(name, struct sockaddr);
515 	NETBSD32TOP_UAP(anamelen, socklen_t);
516 	return (sys_accept(l, &ua, retval));
517 }
518 
519 int
520 netbsd32_getpeername(l, v, retval)
521 	struct lwp *l;
522 	void *v;
523 	register_t *retval;
524 {
525 	struct netbsd32_getpeername_args /* {
526 		syscallarg(int) fdes;
527 		syscallarg(netbsd32_sockaddrp_t) asa;
528 		syscallarg(netbsd32_intp) alen;
529 	} */ *uap = v;
530 	struct sys_getpeername_args ua;
531 
532 	NETBSD32TO64_UAP(fdes);
533 	NETBSD32TOP_UAP(asa, struct sockaddr);
534 	NETBSD32TOP_UAP(alen, socklen_t);
535 /* NB: do the protocol specific sockaddrs need to be converted? */
536 	return (sys_getpeername(l, &ua, retval));
537 }
538 
539 int
540 netbsd32_getsockname(l, v, retval)
541 	struct lwp *l;
542 	void *v;
543 	register_t *retval;
544 {
545 	struct netbsd32_getsockname_args /* {
546 		syscallarg(int) fdes;
547 		syscallarg(netbsd32_sockaddrp_t) asa;
548 		syscallarg(netbsd32_intp) alen;
549 	} */ *uap = v;
550 	struct sys_getsockname_args ua;
551 
552 	NETBSD32TO64_UAP(fdes);
553 	NETBSD32TOP_UAP(asa, struct sockaddr);
554 	NETBSD32TOP_UAP(alen, socklen_t);
555 	return (sys_getsockname(l, &ua, retval));
556 }
557 
558 int
559 netbsd32_access(l, v, retval)
560 	struct lwp *l;
561 	void *v;
562 	register_t *retval;
563 {
564 	struct netbsd32_access_args /* {
565 		syscallarg(const netbsd32_charp) path;
566 		syscallarg(int) flags;
567 	} */ *uap = v;
568 	struct sys_access_args ua;
569 	caddr_t sg;
570 
571 	NETBSD32TOP_UAP(path, const char);
572 	NETBSD32TO64_UAP(flags);
573 	sg = stackgap_init(l->l_proc, 0);
574 	CHECK_ALT_EXIST(l, &sg, SCARG(&ua, path));
575 
576 	return (sys_access(l, &ua, retval));
577 }
578 
579 int
580 netbsd32_chflags(l, v, retval)
581 	struct lwp *l;
582 	void *v;
583 	register_t *retval;
584 {
585 	struct netbsd32_chflags_args /* {
586 		syscallarg(const netbsd32_charp) path;
587 		syscallarg(netbsd32_u_long) flags;
588 	} */ *uap = v;
589 	struct sys_chflags_args ua;
590 
591 	NETBSD32TOP_UAP(path, const char);
592 	NETBSD32TO64_UAP(flags);
593 
594 	return (sys_chflags(l, &ua, retval));
595 }
596 
597 int
598 netbsd32_fchflags(l, v, retval)
599 	struct lwp *l;
600 	void *v;
601 	register_t *retval;
602 {
603 	struct netbsd32_fchflags_args /* {
604 		syscallarg(int) fd;
605 		syscallarg(netbsd32_u_long) flags;
606 	} */ *uap = v;
607 	struct sys_fchflags_args ua;
608 
609 	NETBSD32TO64_UAP(fd);
610 	NETBSD32TO64_UAP(flags);
611 
612 	return (sys_fchflags(l, &ua, retval));
613 }
614 
615 int
616 netbsd32_lchflags(l, v, retval)
617 	struct lwp *l;
618 	void *v;
619 	register_t *retval;
620 {
621 	struct netbsd32_lchflags_args /* {
622 		syscallarg(const char *) path;
623 		syscallarg(netbsd32_u_long) flags;
624 	} */ *uap = v;
625 	struct sys_lchflags_args ua;
626 
627 	NETBSD32TOP_UAP(path, const char);
628 	NETBSD32TO64_UAP(flags);
629 
630 	return (sys_lchflags(l, &ua, retval));
631 }
632 
633 int
634 netbsd32_kill(l, v, retval)
635 	struct lwp *l;
636 	void *v;
637 	register_t *retval;
638 {
639 	struct netbsd32_kill_args /* {
640 		syscallarg(int) pid;
641 		syscallarg(int) signum;
642 	} */ *uap = v;
643 	struct sys_kill_args ua;
644 
645 	NETBSD32TO64_UAP(pid);
646 	NETBSD32TO64_UAP(signum);
647 
648 	return (sys_kill(l, &ua, retval));
649 }
650 
651 int
652 netbsd32_dup(l, v, retval)
653 	struct lwp *l;
654 	void *v;
655 	register_t *retval;
656 {
657 	struct netbsd32_dup_args /* {
658 		syscallarg(int) fd;
659 	} */ *uap = v;
660 	struct sys_dup_args ua;
661 
662 	NETBSD32TO64_UAP(fd);
663 
664 	return (sys_dup(l, &ua, retval));
665 }
666 
667 int
668 netbsd32_profil(l, v, retval)
669 	struct lwp *l;
670 	void *v;
671 	register_t *retval;
672 {
673 	struct netbsd32_profil_args /* {
674 		syscallarg(netbsd32_caddr_t) samples;
675 		syscallarg(netbsd32_size_t) size;
676 		syscallarg(netbsd32_u_long) offset;
677 		syscallarg(u_int) scale;
678 	} */ *uap = v;
679 	struct sys_profil_args ua;
680 
681 	NETBSD32TOX64_UAP(samples, caddr_t);
682 	NETBSD32TOX_UAP(size, size_t);
683 	NETBSD32TOX_UAP(offset, u_long);
684 	NETBSD32TO64_UAP(scale);
685 	return (sys_profil(l, &ua, retval));
686 }
687 
688 #ifdef KTRACE
689 int
690 netbsd32_ktrace(l, v, retval)
691 	struct lwp *l;
692 	void *v;
693 	register_t *retval;
694 {
695 	struct netbsd32_ktrace_args /* {
696 		syscallarg(const netbsd32_charp) fname;
697 		syscallarg(int) ops;
698 		syscallarg(int) facs;
699 		syscallarg(int) pid;
700 	} */ *uap = v;
701 	struct sys_ktrace_args ua;
702 
703 	NETBSD32TOP_UAP(fname, const char);
704 	NETBSD32TO64_UAP(ops);
705 	NETBSD32TO64_UAP(facs);
706 	NETBSD32TO64_UAP(pid);
707 	return (sys_ktrace(l, &ua, retval));
708 }
709 #endif /* KTRACE */
710 
711 int
712 netbsd32_utrace(l, v, retval)
713 	struct lwp *l;
714 	void *v;
715 	register_t *retval;
716 {
717 	struct netbsd32_utrace_args /* {
718 		syscallarg(const netbsd32_charp) label;
719 		syscallarg(netbsd32_voidp) addr;
720 		syscallarg(netbsd32_size_t) len;
721 	} */ *uap = v;
722 	struct sys_utrace_args ua;
723 
724 	NETBSD32TOP_UAP(label, const char);
725 	NETBSD32TOP_UAP(addr, void);
726 	NETBSD32TO64_UAP(len);
727 	return (sys_utrace(l, &ua, retval));
728 }
729 
730 int
731 netbsd32___getlogin(l, v, retval)
732 	struct lwp *l;
733 	void *v;
734 	register_t *retval;
735 {
736 	struct netbsd32___getlogin_args /* {
737 		syscallarg(netbsd32_charp) namebuf;
738 		syscallarg(u_int) namelen;
739 	} */ *uap = v;
740 	struct sys___getlogin_args ua;
741 
742 	NETBSD32TOP_UAP(namebuf, char);
743 	NETBSD32TO64_UAP(namelen);
744 	return (sys___getlogin(l, &ua, retval));
745 }
746 
747 int
748 netbsd32_setlogin(l, v, retval)
749 	struct lwp *l;
750 	void *v;
751 	register_t *retval;
752 {
753 	struct netbsd32_setlogin_args /* {
754 		syscallarg(const netbsd32_charp) namebuf;
755 	} */ *uap = v;
756 	struct sys___setlogin_args ua;
757 
758 	NETBSD32TOP_UAP(namebuf, char);
759 	return (sys___setlogin(l, &ua, retval));
760 }
761 
762 int
763 netbsd32_acct(l, v, retval)
764 	struct lwp *l;
765 	void *v;
766 	register_t *retval;
767 {
768 	struct netbsd32_acct_args /* {
769 		syscallarg(const netbsd32_charp) path;
770 	} */ *uap = v;
771 	struct sys_acct_args ua;
772 
773 	NETBSD32TOP_UAP(path, const char);
774 	return (sys_acct(l, &ua, retval));
775 }
776 
777 int
778 netbsd32_revoke(l, v, retval)
779 	struct lwp *l;
780 	void *v;
781 	register_t *retval;
782 {
783 	struct netbsd32_revoke_args /* {
784 		syscallarg(const netbsd32_charp) path;
785 	} */ *uap = v;
786 	struct sys_revoke_args ua;
787 	caddr_t sg;
788 
789 	NETBSD32TOP_UAP(path, const char);
790 	sg = stackgap_init(l->l_proc, 0);
791 	CHECK_ALT_EXIST(l, &sg, SCARG(&ua, path));
792 
793 	return (sys_revoke(l, &ua, retval));
794 }
795 
796 int
797 netbsd32_symlink(l, v, retval)
798 	struct lwp *l;
799 	void *v;
800 	register_t *retval;
801 {
802 	struct netbsd32_symlink_args /* {
803 		syscallarg(const netbsd32_charp) path;
804 		syscallarg(const netbsd32_charp) link;
805 	} */ *uap = v;
806 	struct sys_symlink_args ua;
807 
808 	NETBSD32TOP_UAP(path, const char);
809 	NETBSD32TOP_UAP(link, const char);
810 
811 	return (sys_symlink(l, &ua, retval));
812 }
813 
814 int
815 netbsd32_readlink(l, v, retval)
816 	struct lwp *l;
817 	void *v;
818 	register_t *retval;
819 {
820 	struct netbsd32_readlink_args /* {
821 		syscallarg(const netbsd32_charp) path;
822 		syscallarg(netbsd32_charp) buf;
823 		syscallarg(netbsd32_size_t) count;
824 	} */ *uap = v;
825 	struct sys_readlink_args ua;
826 	caddr_t sg;
827 
828 	NETBSD32TOP_UAP(path, const char);
829 	NETBSD32TOP_UAP(buf, char);
830 	NETBSD32TOX_UAP(count, size_t);
831 	sg = stackgap_init(l->l_proc, 0);
832 	CHECK_ALT_SYMLINK(l, &sg, SCARG(&ua, path));
833 
834 	return (sys_readlink(l, &ua, retval));
835 }
836 
837 int
838 netbsd32_umask(l, v, retval)
839 	struct lwp *l;
840 	void *v;
841 	register_t *retval;
842 {
843 	struct netbsd32_umask_args /* {
844 		syscallarg(mode_t) newmask;
845 	} */ *uap = v;
846 	struct sys_umask_args ua;
847 
848 	NETBSD32TO64_UAP(newmask);
849 	return (sys_umask(l, &ua, retval));
850 }
851 
852 int
853 netbsd32_chroot(l, v, retval)
854 	struct lwp *l;
855 	void *v;
856 	register_t *retval;
857 {
858 	struct netbsd32_chroot_args /* {
859 		syscallarg(const netbsd32_charp) path;
860 	} */ *uap = v;
861 	struct sys_chroot_args ua;
862 
863 	NETBSD32TOP_UAP(path, const char);
864 	return (sys_chroot(l, &ua, retval));
865 }
866 
867 int
868 netbsd32_sbrk(l, v, retval)
869 	struct lwp *l;
870 	void *v;
871 	register_t *retval;
872 {
873 	struct netbsd32_sbrk_args /* {
874 		syscallarg(int) incr;
875 	} */ *uap = v;
876 	struct sys_sbrk_args ua;
877 
878 	NETBSD32TO64_UAP(incr);
879 	return (sys_sbrk(l, &ua, retval));
880 }
881 
882 int
883 netbsd32_sstk(l, v, retval)
884 	struct lwp *l;
885 	void *v;
886 	register_t *retval;
887 {
888 	struct netbsd32_sstk_args /* {
889 		syscallarg(int) incr;
890 	} */ *uap = v;
891 	struct sys_sstk_args ua;
892 
893 	NETBSD32TO64_UAP(incr);
894 	return (sys_sstk(l, &ua, retval));
895 }
896 
897 int
898 netbsd32_munmap(l, v, retval)
899 	struct lwp *l;
900 	void *v;
901 	register_t *retval;
902 {
903 	struct netbsd32_munmap_args /* {
904 		syscallarg(netbsd32_voidp) addr;
905 		syscallarg(netbsd32_size_t) len;
906 	} */ *uap = v;
907 	struct sys_munmap_args ua;
908 
909 	NETBSD32TOP_UAP(addr, void);
910 	NETBSD32TOX_UAP(len, size_t);
911 	return (sys_munmap(l, &ua, retval));
912 }
913 
914 int
915 netbsd32_mprotect(l, v, retval)
916 	struct lwp *l;
917 	void *v;
918 	register_t *retval;
919 {
920 	struct netbsd32_mprotect_args /* {
921 		syscallarg(netbsd32_voidp) addr;
922 		syscallarg(netbsd32_size_t) len;
923 		syscallarg(int) prot;
924 	} */ *uap = v;
925 	struct sys_mprotect_args ua;
926 
927 	NETBSD32TOP_UAP(addr, void);
928 	NETBSD32TOX_UAP(len, size_t);
929 	NETBSD32TO64_UAP(prot);
930 	return (sys_mprotect(l, &ua, retval));
931 }
932 
933 int
934 netbsd32_madvise(l, v, retval)
935 	struct lwp *l;
936 	void *v;
937 	register_t *retval;
938 {
939 	struct netbsd32_madvise_args /* {
940 		syscallarg(netbsd32_voidp) addr;
941 		syscallarg(netbsd32_size_t) len;
942 		syscallarg(int) behav;
943 	} */ *uap = v;
944 	struct sys_madvise_args ua;
945 
946 	NETBSD32TOP_UAP(addr, void);
947 	NETBSD32TOX_UAP(len, size_t);
948 	NETBSD32TO64_UAP(behav);
949 	return (sys_madvise(l, &ua, retval));
950 }
951 
952 int
953 netbsd32_mincore(l, v, retval)
954 	struct lwp *l;
955 	void *v;
956 	register_t *retval;
957 {
958 	struct netbsd32_mincore_args /* {
959 		syscallarg(netbsd32_caddr_t) addr;
960 		syscallarg(netbsd32_size_t) len;
961 		syscallarg(netbsd32_charp) vec;
962 	} */ *uap = v;
963 	struct sys_mincore_args ua;
964 
965 	NETBSD32TOX64_UAP(addr, caddr_t);
966 	NETBSD32TOX_UAP(len, size_t);
967 	NETBSD32TOP_UAP(vec, char);
968 	return (sys_mincore(l, &ua, retval));
969 }
970 
971 /* XXX MOVE ME XXX ? */
972 int
973 netbsd32_getgroups(l, v, retval)
974 	struct lwp *l;
975 	void *v;
976 	register_t *retval;
977 {
978 	struct netbsd32_getgroups_args /* {
979 		syscallarg(int) gidsetsize;
980 		syscallarg(netbsd32_gid_tp) gidset;
981 	} */ *uap = v;
982 	kauth_cred_t pc = l->l_cred;
983 	int ngrp;
984 	int error;
985 	gid_t *grbuf;
986 
987 	ngrp = SCARG(uap, gidsetsize);
988 	if (ngrp == 0) {
989 		*retval = kauth_cred_ngroups(pc);
990 		return (0);
991 	}
992 	if (ngrp < kauth_cred_ngroups(pc))
993 		return (EINVAL);
994 	ngrp = kauth_cred_ngroups(pc);
995 	/* Should convert gid_t to netbsd32_gid_t, but they're the same */
996 	grbuf = malloc(ngrp * sizeof(*grbuf), M_TEMP, M_WAITOK);
997 	kauth_cred_getgroups(pc, grbuf, ngrp);
998 	error = copyout(grbuf, (caddr_t)NETBSD32PTR64(SCARG(uap, gidset)),
999 			ngrp * sizeof(*grbuf));
1000 	free(grbuf, M_TEMP);
1001 	if (error)
1002 		return (error);
1003 	*retval = ngrp;
1004 	return (0);
1005 }
1006 
1007 int
1008 netbsd32_setgroups(l, v, retval)
1009 	struct lwp *l;
1010 	void *v;
1011 	register_t *retval;
1012 {
1013 	struct netbsd32_setgroups_args /* {
1014 		syscallarg(int) gidsetsize;
1015 		syscallarg(const netbsd32_gid_tp) gidset;
1016 	} */ *uap = v;
1017 	struct sys_setgroups_args ua;
1018 
1019 	NETBSD32TO64_UAP(gidsetsize);
1020 	NETBSD32TOP_UAP(gidset, gid_t);
1021 	return (sys_setgroups(l, &ua, retval));
1022 }
1023 
1024 int
1025 netbsd32_setpgid(l, v, retval)
1026 	struct lwp *l;
1027 	void *v;
1028 	register_t *retval;
1029 {
1030 	struct netbsd32_setpgid_args /* {
1031 		syscallarg(int) pid;
1032 		syscallarg(int) pgid;
1033 	} */ *uap = v;
1034 	struct sys_setpgid_args ua;
1035 
1036 	NETBSD32TO64_UAP(pid);
1037 	NETBSD32TO64_UAP(pgid);
1038 	return (sys_setpgid(l, &ua, retval));
1039 }
1040 
1041 int
1042 netbsd32_fcntl(l, v, retval)
1043 	struct lwp *l;
1044 	void *v;
1045 	register_t *retval;
1046 {
1047 	struct netbsd32_fcntl_args /* {
1048 		syscallarg(int) fd;
1049 		syscallarg(int) cmd;
1050 		syscallarg(netbsd32_voidp) arg;
1051 	} */ *uap = v;
1052 	struct sys_fcntl_args ua;
1053 
1054 	NETBSD32TO64_UAP(fd);
1055 	NETBSD32TO64_UAP(cmd);
1056 	NETBSD32TOP_UAP(arg, void);
1057 	/* we can do this because `struct flock' doesn't change */
1058 	return (sys_fcntl(l, &ua, retval));
1059 }
1060 
1061 int
1062 netbsd32_dup2(l, v, retval)
1063 	struct lwp *l;
1064 	void *v;
1065 	register_t *retval;
1066 {
1067 	struct netbsd32_dup2_args /* {
1068 		syscallarg(int) from;
1069 		syscallarg(int) to;
1070 	} */ *uap = v;
1071 	struct sys_dup2_args ua;
1072 
1073 	NETBSD32TO64_UAP(from);
1074 	NETBSD32TO64_UAP(to);
1075 	return (sys_dup2(l, &ua, retval));
1076 }
1077 
1078 int
1079 netbsd32_fsync(l, v, retval)
1080 	struct lwp *l;
1081 	void *v;
1082 	register_t *retval;
1083 {
1084 	struct netbsd32_fsync_args /* {
1085 		syscallarg(int) fd;
1086 	} */ *uap = v;
1087 	struct sys_fsync_args ua;
1088 
1089 	NETBSD32TO64_UAP(fd);
1090 	return (sys_fsync(l, &ua, retval));
1091 }
1092 
1093 int
1094 netbsd32_setpriority(l, v, retval)
1095 	struct lwp *l;
1096 	void *v;
1097 	register_t *retval;
1098 {
1099 	struct netbsd32_setpriority_args /* {
1100 		syscallarg(int) which;
1101 		syscallarg(int) who;
1102 		syscallarg(int) prio;
1103 	} */ *uap = v;
1104 	struct sys_setpriority_args ua;
1105 
1106 	NETBSD32TO64_UAP(which);
1107 	NETBSD32TO64_UAP(who);
1108 	NETBSD32TO64_UAP(prio);
1109 	return (sys_setpriority(l, &ua, retval));
1110 }
1111 
1112 int
1113 netbsd32_sys___socket30(l, v, retval)
1114 	struct lwp *l;
1115 	void *v;
1116 	register_t *retval;
1117 {
1118 	struct netbsd32_sys___socket30_args /* {
1119 		syscallarg(int) domain;
1120 		syscallarg(int) type;
1121 		syscallarg(int) protocol;
1122 	} */ *uap = v;
1123 	struct sys___socket30_args ua;
1124 
1125 	NETBSD32TO64_UAP(domain);
1126 	NETBSD32TO64_UAP(type);
1127 	NETBSD32TO64_UAP(protocol);
1128 	return (sys___socket30(l, &ua, retval));
1129 }
1130 
1131 int
1132 netbsd32_connect(l, v, retval)
1133 	struct lwp *l;
1134 	void *v;
1135 	register_t *retval;
1136 {
1137 	struct netbsd32_connect_args /* {
1138 		syscallarg(int) s;
1139 		syscallarg(const netbsd32_sockaddrp_t) name;
1140 		syscallarg(int) namelen;
1141 	} */ *uap = v;
1142 	struct sys_connect_args ua;
1143 
1144 	NETBSD32TO64_UAP(s);
1145 	NETBSD32TOP_UAP(name, struct sockaddr);
1146 	NETBSD32TO64_UAP(namelen);
1147 	return (sys_connect(l, &ua, retval));
1148 }
1149 
1150 int
1151 netbsd32_getpriority(l, v, retval)
1152 	struct lwp *l;
1153 	void *v;
1154 	register_t *retval;
1155 {
1156 	struct netbsd32_getpriority_args /* {
1157 		syscallarg(int) which;
1158 		syscallarg(int) who;
1159 	} */ *uap = v;
1160 	struct sys_getpriority_args ua;
1161 
1162 	NETBSD32TO64_UAP(which);
1163 	NETBSD32TO64_UAP(who);
1164 	return (sys_getpriority(l, &ua, retval));
1165 }
1166 
1167 int
1168 netbsd32_bind(l, v, retval)
1169 	struct lwp *l;
1170 	void *v;
1171 	register_t *retval;
1172 {
1173 	struct netbsd32_bind_args /* {
1174 		syscallarg(int) s;
1175 		syscallarg(const netbsd32_sockaddrp_t) name;
1176 		syscallarg(int) namelen;
1177 	} */ *uap = v;
1178 	struct sys_bind_args ua;
1179 
1180 	NETBSD32TO64_UAP(s);
1181 	NETBSD32TOP_UAP(name, struct sockaddr);
1182 	NETBSD32TO64_UAP(namelen);
1183 	return (sys_bind(l, &ua, retval));
1184 }
1185 
1186 int
1187 netbsd32_setsockopt(l, v, retval)
1188 	struct lwp *l;
1189 	void *v;
1190 	register_t *retval;
1191 {
1192 	struct netbsd32_setsockopt_args /* {
1193 		syscallarg(int) s;
1194 		syscallarg(int) level;
1195 		syscallarg(int) name;
1196 		syscallarg(const netbsd32_voidp) val;
1197 		syscallarg(int) valsize;
1198 	} */ *uap = v;
1199 	struct sys_setsockopt_args ua;
1200 
1201 	NETBSD32TO64_UAP(s);
1202 	NETBSD32TO64_UAP(level);
1203 	NETBSD32TO64_UAP(name);
1204 	NETBSD32TOP_UAP(val, void);
1205 	NETBSD32TO64_UAP(valsize);
1206 	/* may be more efficient to do this inline. */
1207 	return (sys_setsockopt(l, &ua, retval));
1208 }
1209 
1210 int
1211 netbsd32_listen(l, v, retval)
1212 	struct lwp *l;
1213 	void *v;
1214 	register_t *retval;
1215 {
1216 	struct netbsd32_listen_args /* {
1217 		syscallarg(int) s;
1218 		syscallarg(int) backlog;
1219 	} */ *uap = v;
1220 	struct sys_listen_args ua;
1221 
1222 	NETBSD32TO64_UAP(s);
1223 	NETBSD32TO64_UAP(backlog);
1224 	return (sys_listen(l, &ua, retval));
1225 }
1226 
1227 int
1228 netbsd32_fchown(l, v, retval)
1229 	struct lwp *l;
1230 	void *v;
1231 	register_t *retval;
1232 {
1233 	struct netbsd32_fchown_args /* {
1234 		syscallarg(int) fd;
1235 		syscallarg(uid_t) uid;
1236 		syscallarg(gid_t) gid;
1237 	} */ *uap = v;
1238 	struct sys_fchown_args ua;
1239 
1240 	NETBSD32TO64_UAP(fd);
1241 	NETBSD32TO64_UAP(uid);
1242 	NETBSD32TO64_UAP(gid);
1243 	return (sys_fchown(l, &ua, retval));
1244 }
1245 
1246 int
1247 netbsd32_fchmod(l, v, retval)
1248 	struct lwp *l;
1249 	void *v;
1250 	register_t *retval;
1251 {
1252 	struct netbsd32_fchmod_args /* {
1253 		syscallarg(int) fd;
1254 		syscallarg(mode_t) mode;
1255 	} */ *uap = v;
1256 	struct sys_fchmod_args ua;
1257 
1258 	NETBSD32TO64_UAP(fd);
1259 	NETBSD32TO64_UAP(mode);
1260 	return (sys_fchmod(l, &ua, retval));
1261 }
1262 
1263 int
1264 netbsd32_setreuid(l, v, retval)
1265 	struct lwp *l;
1266 	void *v;
1267 	register_t *retval;
1268 {
1269 	struct netbsd32_setreuid_args /* {
1270 		syscallarg(uid_t) ruid;
1271 		syscallarg(uid_t) euid;
1272 	} */ *uap = v;
1273 	struct sys_setreuid_args ua;
1274 
1275 	NETBSD32TO64_UAP(ruid);
1276 	NETBSD32TO64_UAP(euid);
1277 	return (sys_setreuid(l, &ua, retval));
1278 }
1279 
1280 int
1281 netbsd32_setregid(l, v, retval)
1282 	struct lwp *l;
1283 	void *v;
1284 	register_t *retval;
1285 {
1286 	struct netbsd32_setregid_args /* {
1287 		syscallarg(gid_t) rgid;
1288 		syscallarg(gid_t) egid;
1289 	} */ *uap = v;
1290 	struct sys_setregid_args ua;
1291 
1292 	NETBSD32TO64_UAP(rgid);
1293 	NETBSD32TO64_UAP(egid);
1294 	return (sys_setregid(l, &ua, retval));
1295 }
1296 
1297 int
1298 netbsd32_getsockopt(l, v, retval)
1299 	struct lwp *l;
1300 	void *v;
1301 	register_t *retval;
1302 {
1303 	struct netbsd32_getsockopt_args /* {
1304 		syscallarg(int) s;
1305 		syscallarg(int) level;
1306 		syscallarg(int) name;
1307 		syscallarg(netbsd32_voidp) val;
1308 		syscallarg(netbsd32_intp) avalsize;
1309 	} */ *uap = v;
1310 	struct sys_getsockopt_args ua;
1311 
1312 	NETBSD32TO64_UAP(s);
1313 	NETBSD32TO64_UAP(level);
1314 	NETBSD32TO64_UAP(name);
1315 	NETBSD32TOP_UAP(val, void);
1316 	NETBSD32TOP_UAP(avalsize, socklen_t);
1317 	return (sys_getsockopt(l, &ua, retval));
1318 }
1319 
1320 int
1321 netbsd32_rename(l, v, retval)
1322 	struct lwp *l;
1323 	void *v;
1324 	register_t *retval;
1325 {
1326 	struct netbsd32_rename_args /* {
1327 		syscallarg(const netbsd32_charp) from;
1328 		syscallarg(const netbsd32_charp) to;
1329 	} */ *uap = v;
1330 	struct sys_rename_args ua;
1331 
1332 	NETBSD32TOP_UAP(from, const char);
1333 	NETBSD32TOP_UAP(to, const char)
1334 
1335 	return (sys_rename(l, &ua, retval));
1336 }
1337 
1338 int
1339 netbsd32_flock(l, v, retval)
1340 	struct lwp *l;
1341 	void *v;
1342 	register_t *retval;
1343 {
1344 	struct netbsd32_flock_args /* {
1345 		syscallarg(int) fd;
1346 		syscallarg(int) how;
1347 	} */ *uap = v;
1348 	struct sys_flock_args ua;
1349 
1350 	NETBSD32TO64_UAP(fd);
1351 	NETBSD32TO64_UAP(how)
1352 
1353 	return (sys_flock(l, &ua, retval));
1354 }
1355 
1356 int
1357 netbsd32_mkfifo(l, v, retval)
1358 	struct lwp *l;
1359 	void *v;
1360 	register_t *retval;
1361 {
1362 	struct netbsd32_mkfifo_args /* {
1363 		syscallarg(const netbsd32_charp) path;
1364 		syscallarg(mode_t) mode;
1365 	} */ *uap = v;
1366 	struct sys_mkfifo_args ua;
1367 
1368 	NETBSD32TOP_UAP(path, const char)
1369 	NETBSD32TO64_UAP(mode);
1370 	return (sys_mkfifo(l, &ua, retval));
1371 }
1372 
1373 int
1374 netbsd32_shutdown(l, v, retval)
1375 	struct lwp *l;
1376 	void *v;
1377 	register_t *retval;
1378 {
1379 	struct netbsd32_shutdown_args /* {
1380 		syscallarg(int) s;
1381 		syscallarg(int) how;
1382 	} */ *uap = v;
1383 	struct sys_shutdown_args ua;
1384 
1385 	NETBSD32TO64_UAP(s)
1386 	NETBSD32TO64_UAP(how);
1387 	return (sys_shutdown(l, &ua, retval));
1388 }
1389 
1390 int
1391 netbsd32_socketpair(l, v, retval)
1392 	struct lwp *l;
1393 	void *v;
1394 	register_t *retval;
1395 {
1396 	struct netbsd32_socketpair_args /* {
1397 		syscallarg(int) domain;
1398 		syscallarg(int) type;
1399 		syscallarg(int) protocol;
1400 		syscallarg(netbsd32_intp) rsv;
1401 	} */ *uap = v;
1402 	struct sys_socketpair_args ua;
1403 
1404 	NETBSD32TO64_UAP(domain);
1405 	NETBSD32TO64_UAP(type);
1406 	NETBSD32TO64_UAP(protocol);
1407 	NETBSD32TOP_UAP(rsv, int);
1408 	/* Since we're just copying out two `int's we can do this */
1409 	return (sys_socketpair(l, &ua, retval));
1410 }
1411 
1412 int
1413 netbsd32_mkdir(l, v, retval)
1414 	struct lwp *l;
1415 	void *v;
1416 	register_t *retval;
1417 {
1418 	struct netbsd32_mkdir_args /* {
1419 		syscallarg(const netbsd32_charp) path;
1420 		syscallarg(mode_t) mode;
1421 	} */ *uap = v;
1422 	struct sys_mkdir_args ua;
1423 
1424 	NETBSD32TOP_UAP(path, const char)
1425 	NETBSD32TO64_UAP(mode);
1426 	return (sys_mkdir(l, &ua, retval));
1427 }
1428 
1429 int
1430 netbsd32_rmdir(l, v, retval)
1431 	struct lwp *l;
1432 	void *v;
1433 	register_t *retval;
1434 {
1435 	struct netbsd32_rmdir_args /* {
1436 		syscallarg(const netbsd32_charp) path;
1437 	} */ *uap = v;
1438 	struct sys_rmdir_args ua;
1439 
1440 	NETBSD32TOP_UAP(path, const char);
1441 	return (sys_rmdir(l, &ua, retval));
1442 }
1443 
1444 int
1445 netbsd32_quotactl(l, v, retval)
1446 	struct lwp *l;
1447 	void *v;
1448 	register_t *retval;
1449 {
1450 	struct netbsd32_quotactl_args /* {
1451 		syscallarg(const netbsd32_charp) path;
1452 		syscallarg(int) cmd;
1453 		syscallarg(int) uid;
1454 		syscallarg(netbsd32_caddr_t) arg;
1455 	} */ *uap = v;
1456 	struct sys_quotactl_args ua;
1457 
1458 	NETBSD32TOP_UAP(path, const char);
1459 	NETBSD32TO64_UAP(cmd);
1460 	NETBSD32TO64_UAP(uid);
1461 	NETBSD32TOX64_UAP(arg, caddr_t);
1462 	return (sys_quotactl(l, &ua, retval));
1463 }
1464 
1465 #if defined(NFS) || defined(NFSSERVER)
1466 int
1467 netbsd32_nfssvc(l, v, retval)
1468 	struct lwp *l;
1469 	void *v;
1470 	register_t *retval;
1471 {
1472 #if 0
1473 	struct netbsd32_nfssvc_args /* {
1474 		syscallarg(int) flag;
1475 		syscallarg(netbsd32_voidp) argp;
1476 	} */ *uap = v;
1477 	struct sys_nfssvc_args ua;
1478 
1479 	NETBSD32TO64_UAP(flag);
1480 	NETBSD32TOP_UAP(argp, void);
1481 	return (sys_nfssvc(l, &ua, retval));
1482 #else
1483 	/* Why would we want to support a 32-bit nfsd? */
1484 	return (ENOSYS);
1485 #endif
1486 }
1487 #endif
1488 
1489 int
1490 netbsd32___getfh30(l, v, retval)
1491 	struct lwp *l;
1492 	void *v;
1493 	register_t *retval;
1494 {
1495 	struct netbsd32___getfh30_args /* {
1496 		syscallarg(const netbsd32_charp) fname;
1497 		syscallarg(netbsd32_fhandlep_t) fhp;
1498 		syscallarg(netbsd32_size_tp) fh_size;
1499 	} */ *uap = v;
1500 	struct vnode *vp;
1501 	fhandle_t *fh;
1502 	int error;
1503 	struct nameidata nd;
1504 	netbsd32_size_t sz32;
1505 	size_t sz;
1506 
1507 	/*
1508 	 * Must be super user
1509 	 */
1510 	error = kauth_authorize_system(l->l_cred, KAUTH_SYSTEM_FILEHANDLE,
1511 	    0, NULL, NULL, NULL);
1512 	if (error)
1513 		return (error);
1514 	fh = NULL;
1515 	NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF, UIO_USERSPACE,
1516 	    (char *)NETBSD32PTR64(SCARG(uap, fname)), l);
1517 	error = namei(&nd);
1518 	if (error)
1519 		return (error);
1520 	vp = nd.ni_vp;
1521 	error = copyin(NETBSD32PTR64(SCARG(uap, fh_size)), &sz32,
1522 	    sizeof(netbsd32_size_t));
1523 	if (!error) {
1524 		fh = malloc(sz32, M_TEMP, M_WAITOK);
1525 		if (fh == NULL)
1526 			return EINVAL;
1527 		sz = sz32;
1528 		error = vfs_composefh(vp, fh, &sz);
1529 		sz32 = sz;
1530 	}
1531 	vput(vp);
1532 	if (error == E2BIG)
1533 		copyout(&sz, NETBSD32PTR64(SCARG(uap, fh_size)), sizeof(size_t));
1534 	if (error == 0) {
1535 		error = copyout(&sz32, NETBSD32PTR64(SCARG(uap, fh_size)),
1536 		    sizeof(netbsd32_size_t));
1537 		if (!error)
1538 			error = copyout(fh, NETBSD32PTR64(SCARG(uap, fhp)), sz);
1539 	}
1540 	free(fh, M_TEMP);
1541 	return (error);
1542 }
1543 
1544 int
1545 netbsd32_pread(l, v, retval)
1546 	struct lwp *l;
1547 	void *v;
1548 	register_t *retval;
1549 {
1550 	struct netbsd32_pread_args /* {
1551 		syscallarg(int) fd;
1552 		syscallarg(netbsd32_voidp) buf;
1553 		syscallarg(netbsd32_size_t) nbyte;
1554 		syscallarg(int) pad;
1555 		syscallarg(off_t) offset;
1556 	} */ *uap = v;
1557 	struct sys_pread_args ua;
1558 	ssize_t rt;
1559 	int error;
1560 
1561 	NETBSD32TO64_UAP(fd);
1562 	NETBSD32TOP_UAP(buf, void);
1563 	NETBSD32TOX_UAP(nbyte, size_t);
1564 	NETBSD32TO64_UAP(pad);
1565 	NETBSD32TO64_UAP(offset);
1566 	error = sys_pread(l, &ua, (register_t *)&rt);
1567 	*retval = rt;
1568 	return (error);
1569 }
1570 
1571 int
1572 netbsd32_pwrite(l, v, retval)
1573 	struct lwp *l;
1574 	void *v;
1575 	register_t *retval;
1576 {
1577 	struct netbsd32_pwrite_args /* {
1578 		syscallarg(int) fd;
1579 		syscallarg(const netbsd32_voidp) buf;
1580 		syscallarg(netbsd32_size_t) nbyte;
1581 		syscallarg(int) pad;
1582 		syscallarg(off_t) offset;
1583 	} */ *uap = v;
1584 	struct sys_pwrite_args ua;
1585 	ssize_t rt;
1586 	int error;
1587 
1588 	NETBSD32TO64_UAP(fd);
1589 	NETBSD32TOP_UAP(buf, void);
1590 	NETBSD32TOX_UAP(nbyte, size_t);
1591 	NETBSD32TO64_UAP(pad);
1592 	NETBSD32TO64_UAP(offset);
1593 	error = sys_pwrite(l, &ua, (register_t *)&rt);
1594 	*retval = rt;
1595 	return (error);
1596 }
1597 
1598 int
1599 netbsd32_setgid(l, v, retval)
1600 	struct lwp *l;
1601 	void *v;
1602 	register_t *retval;
1603 {
1604 	struct netbsd32_setgid_args /* {
1605 		syscallarg(gid_t) gid;
1606 	} */ *uap = v;
1607 	struct sys_setgid_args ua;
1608 
1609 	NETBSD32TO64_UAP(gid);
1610 	return (sys_setgid(l, v, retval));
1611 }
1612 
1613 int
1614 netbsd32_setegid(l, v, retval)
1615 	struct lwp *l;
1616 	void *v;
1617 	register_t *retval;
1618 {
1619 	struct netbsd32_setegid_args /* {
1620 		syscallarg(gid_t) egid;
1621 	} */ *uap = v;
1622 	struct sys_setegid_args ua;
1623 
1624 	NETBSD32TO64_UAP(egid);
1625 	return (sys_setegid(l, v, retval));
1626 }
1627 
1628 int
1629 netbsd32_seteuid(l, v, retval)
1630 	struct lwp *l;
1631 	void *v;
1632 	register_t *retval;
1633 {
1634 	struct netbsd32_seteuid_args /* {
1635 		syscallarg(gid_t) euid;
1636 	} */ *uap = v;
1637 	struct sys_seteuid_args ua;
1638 
1639 	NETBSD32TO64_UAP(euid);
1640 	return (sys_seteuid(l, v, retval));
1641 }
1642 
1643 #ifdef LFS
1644 int
1645 netbsd32_sys_lfs_bmapv(l, v, retval)
1646 	struct lwp *l;
1647 	void *v;
1648 	register_t *retval;
1649 {
1650 
1651 	return (ENOSYS);	/* XXX */
1652 }
1653 
1654 int
1655 netbsd32_sys_lfs_markv(l, v, retval)
1656 	struct lwp *l;
1657 	void *v;
1658 	register_t *retval;
1659 {
1660 
1661 	return (ENOSYS);	/* XXX */
1662 }
1663 
1664 int
1665 netbsd32_sys_lfs_segclean(l, v, retval)
1666 	struct lwp *l;
1667 	void *v;
1668 	register_t *retval;
1669 {
1670 
1671 	return (ENOSYS);	/* XXX */
1672 }
1673 
1674 int
1675 netbsd32_sys_lfs_segwait(l, v, retval)
1676 	struct lwp *l;
1677 	void *v;
1678 	register_t *retval;
1679 {
1680 
1681 	return (ENOSYS);	/* XXX */
1682 }
1683 #endif
1684 
1685 int
1686 netbsd32_pathconf(l, v, retval)
1687 	struct lwp *l;
1688 	void *v;
1689 	register_t *retval;
1690 {
1691 	struct netbsd32_pathconf_args /* {
1692 		syscallarg(int) fd;
1693 		syscallarg(int) name;
1694 	} */ *uap = v;
1695 	struct sys_pathconf_args ua;
1696 	long rt;
1697 	int error;
1698 
1699 	NETBSD32TOP_UAP(path, const char);
1700 	NETBSD32TO64_UAP(name);
1701 	error = sys_pathconf(l, &ua, (register_t *)&rt);
1702 	*retval = rt;
1703 	return (error);
1704 }
1705 
1706 int
1707 netbsd32_fpathconf(l, v, retval)
1708 	struct lwp *l;
1709 	void *v;
1710 	register_t *retval;
1711 {
1712 	struct netbsd32_fpathconf_args /* {
1713 		syscallarg(int) fd;
1714 		syscallarg(int) name;
1715 	} */ *uap = v;
1716 	struct sys_fpathconf_args ua;
1717 	long rt;
1718 	int error;
1719 
1720 	NETBSD32TO64_UAP(fd);
1721 	NETBSD32TO64_UAP(name);
1722 	error = sys_fpathconf(l, &ua, (register_t *)&rt);
1723 	*retval = rt;
1724 	return (error);
1725 }
1726 
1727 int
1728 netbsd32_getrlimit(l, v, retval)
1729 	struct lwp *l;
1730 	void *v;
1731 	register_t *retval;
1732 {
1733 	struct netbsd32_getrlimit_args /* {
1734 		syscallarg(int) which;
1735 		syscallarg(netbsd32_rlimitp_t) rlp;
1736 	} */ *uap = v;
1737 	int which = SCARG(uap, which);
1738 
1739 	if ((u_int)which >= RLIM_NLIMITS)
1740 		return (EINVAL);
1741 	return (copyout(&l->l_proc->p_rlimit[which],
1742 	    (caddr_t)NETBSD32PTR64(SCARG(uap, rlp)), sizeof(struct rlimit)));
1743 }
1744 
1745 int
1746 netbsd32_setrlimit(l, v, retval)
1747 	struct lwp *l;
1748 	void *v;
1749 	register_t *retval;
1750 {
1751 	struct netbsd32_setrlimit_args /* {
1752 		syscallarg(int) which;
1753 		syscallarg(const netbsd32_rlimitp_t) rlp;
1754 	} */ *uap = v;
1755 		int which = SCARG(uap, which);
1756 	struct rlimit alim;
1757 	int error;
1758 
1759 	error = copyin((caddr_t)NETBSD32PTR64(SCARG(uap, rlp)), &alim,
1760 	    sizeof(struct rlimit));
1761 	if (error)
1762 		return (error);
1763 
1764 	switch (which) {
1765 	case RLIMIT_DATA:
1766 		if (LIMITCHECK(alim.rlim_cur, MAXDSIZ32))
1767 			alim.rlim_cur = MAXDSIZ32;
1768 		if (LIMITCHECK(alim.rlim_max, MAXDSIZ32))
1769 			alim.rlim_max = MAXDSIZ32;
1770 		break;
1771 
1772 	case RLIMIT_STACK:
1773 		if (LIMITCHECK(alim.rlim_cur, MAXSSIZ32))
1774 			alim.rlim_cur = MAXSSIZ32;
1775 		if (LIMITCHECK(alim.rlim_max, MAXSSIZ32))
1776 			alim.rlim_max = MAXSSIZ32;
1777 	default:
1778 		break;
1779 	}
1780 
1781 	return (dosetrlimit(l, l->l_proc, which, &alim));
1782 }
1783 
1784 int
1785 netbsd32_mmap(l, v, retval)
1786 	struct lwp *l;
1787 	void *v;
1788 	register_t *retval;
1789 {
1790 	struct netbsd32_mmap_args /* {
1791 		syscallarg(netbsd32_voidp) addr;
1792 		syscallarg(netbsd32_size_t) len;
1793 		syscallarg(int) prot;
1794 		syscallarg(int) flags;
1795 		syscallarg(int) fd;
1796 		syscallarg(netbsd32_long) pad;
1797 		syscallarg(off_t) pos;
1798 	} */ *uap = v;
1799 	struct sys_mmap_args ua;
1800 	int error;
1801 
1802 	NETBSD32TOP_UAP(addr, void);
1803 	NETBSD32TOX_UAP(len, size_t);
1804 	NETBSD32TO64_UAP(prot);
1805 	NETBSD32TO64_UAP(flags);
1806 	NETBSD32TO64_UAP(fd);
1807 	NETBSD32TOX_UAP(pad, long);
1808 	NETBSD32TOX_UAP(pos, off_t);
1809 	error = sys_mmap(l, &ua, retval);
1810 	if ((u_long)*retval > (u_long)UINT_MAX) {
1811 		printf("netbsd32_mmap: retval out of range: 0x%lx",
1812 		    (u_long)*retval);
1813 		/* Should try to recover and return an error here. */
1814 	}
1815 	return (error);
1816 }
1817 
1818 int
1819 netbsd32_lseek(l, v, retval)
1820 	struct lwp *l;
1821 	void *v;
1822 	register_t *retval;
1823 {
1824 	struct netbsd32_lseek_args /* {
1825 		syscallarg(int) fd;
1826 		syscallarg(int) pad;
1827 		syscallarg(off_t) offset;
1828 		syscallarg(int) whence;
1829 	} */ *uap = v;
1830 	struct sys_lseek_args ua;
1831 	int rv;
1832 
1833 	NETBSD32TO64_UAP(fd);
1834 	NETBSD32TO64_UAP(pad);
1835 	NETBSD32TO64_UAP(offset);
1836 	NETBSD32TO64_UAP(whence);
1837 	rv = sys_lseek(l, &ua, retval);
1838 #ifdef NETBSD32_OFF_T_RETURN
1839 	if (rv == 0)
1840 		NETBSD32_OFF_T_RETURN(retval);
1841 #endif
1842 	return rv;
1843 }
1844 
1845 int
1846 netbsd32_truncate(l, v, retval)
1847 	struct lwp *l;
1848 	void *v;
1849 	register_t *retval;
1850 {
1851 	struct netbsd32_truncate_args /* {
1852 		syscallarg(const netbsd32_charp) path;
1853 		syscallarg(int) pad;
1854 		syscallarg(off_t) length;
1855 	} */ *uap = v;
1856 	struct sys_truncate_args ua;
1857 
1858 	NETBSD32TOP_UAP(path, const char);
1859 	NETBSD32TO64_UAP(pad);
1860 	NETBSD32TO64_UAP(length);
1861 	return (sys_truncate(l, &ua, retval));
1862 }
1863 
1864 int
1865 netbsd32_ftruncate(l, v, retval)
1866 	struct lwp *l;
1867 	void *v;
1868 	register_t *retval;
1869 {
1870 	struct netbsd32_ftruncate_args /* {
1871 		syscallarg(int) fd;
1872 		syscallarg(int) pad;
1873 		syscallarg(off_t) length;
1874 	} */ *uap = v;
1875 	struct sys_ftruncate_args ua;
1876 
1877 	NETBSD32TO64_UAP(fd);
1878 	NETBSD32TO64_UAP(pad);
1879 	NETBSD32TO64_UAP(length);
1880 	return (sys_ftruncate(l, &ua, retval));
1881 }
1882 
1883 int
1884 netbsd32_mlock(l, v, retval)
1885 	struct lwp *l;
1886 	void *v;
1887 	register_t *retval;
1888 {
1889 	struct netbsd32_mlock_args /* {
1890 		syscallarg(const netbsd32_voidp) addr;
1891 		syscallarg(netbsd32_size_t) len;
1892 	} */ *uap = v;
1893 	struct sys_mlock_args ua;
1894 
1895 	NETBSD32TOP_UAP(addr, const void);
1896 	NETBSD32TO64_UAP(len);
1897 	return (sys_mlock(l, &ua, retval));
1898 }
1899 
1900 int
1901 netbsd32_munlock(l, v, retval)
1902 	struct lwp *l;
1903 	void *v;
1904 	register_t *retval;
1905 {
1906 	struct netbsd32_munlock_args /* {
1907 		syscallarg(const netbsd32_voidp) addr;
1908 		syscallarg(netbsd32_size_t) len;
1909 	} */ *uap = v;
1910 	struct sys_munlock_args ua;
1911 
1912 	NETBSD32TOP_UAP(addr, const void);
1913 	NETBSD32TO64_UAP(len);
1914 	return (sys_munlock(l, &ua, retval));
1915 }
1916 
1917 int
1918 netbsd32_undelete(l, v, retval)
1919 	struct lwp *l;
1920 	void *v;
1921 	register_t *retval;
1922 {
1923 	struct netbsd32_undelete_args /* {
1924 		syscallarg(const netbsd32_charp) path;
1925 	} */ *uap = v;
1926 	struct sys_undelete_args ua;
1927 
1928 	NETBSD32TOP_UAP(path, const char);
1929 	return (sys_undelete(l, &ua, retval));
1930 }
1931 
1932 int
1933 netbsd32_getpgid(l, v, retval)
1934 	struct lwp *l;
1935 	void *v;
1936 	register_t *retval;
1937 {
1938 	struct netbsd32_getpgid_args /* {
1939 		syscallarg(pid_t) pid;
1940 	} */ *uap = v;
1941 	struct sys_getpgid_args ua;
1942 
1943 	NETBSD32TO64_UAP(pid);
1944 	return (sys_getpgid(l, &ua, retval));
1945 }
1946 
1947 int
1948 netbsd32_reboot(l, v, retval)
1949 	struct lwp *l;
1950 	void *v;
1951 	register_t *retval;
1952 {
1953 	struct netbsd32_reboot_args /* {
1954 		syscallarg(int) opt;
1955 		syscallarg(netbsd32_charp) bootstr;
1956 	} */ *uap = v;
1957 	struct sys_reboot_args ua;
1958 
1959 	NETBSD32TO64_UAP(opt);
1960 	NETBSD32TOP_UAP(bootstr, char);
1961 	return (sys_reboot(l, &ua, retval));
1962 }
1963 
1964 #include <sys/poll.h>
1965 int
1966 netbsd32_poll(l, v, retval)
1967 	struct lwp *l;
1968 	void *v;
1969 	register_t *retval;
1970 {
1971 	struct netbsd32_poll_args /* {
1972 		syscallarg(netbsd32_pollfdp_t) fds;
1973 		syscallarg(u_int) nfds;
1974 		syscallarg(int) timeout;
1975 	} */ *uap = v;
1976 	struct sys_poll_args ua;
1977 
1978 	NETBSD32TOP_UAP(fds, struct pollfd);
1979 	NETBSD32TO64_UAP(nfds);
1980 	NETBSD32TO64_UAP(timeout);
1981 
1982 	return (sys_poll(l, &ua, retval));
1983 }
1984 
1985 int
1986 netbsd32_fdatasync(l, v, retval)
1987 	struct lwp *l;
1988 	void *v;
1989 	register_t *retval;
1990 {
1991 	struct netbsd32_fdatasync_args /* {
1992 		syscallarg(int) fd;
1993 	} */ *uap = v;
1994 	struct sys_fdatasync_args ua;
1995 
1996 	NETBSD32TO64_UAP(fd);
1997 	return (sys_fdatasync(l, &ua, retval));
1998 }
1999 
2000 int
2001 netbsd32___posix_rename(l, v, retval)
2002 	struct lwp *l;
2003 	void *v;
2004 	register_t *retval;
2005 {
2006 	struct netbsd32___posix_rename_args /* {
2007 		syscallarg(const netbsd32_charp) from;
2008 		syscallarg(const netbsd32_charp) to;
2009 	} */ *uap = v;
2010 	struct sys___posix_rename_args ua;
2011 
2012 	NETBSD32TOP_UAP(from, const char);
2013 	NETBSD32TOP_UAP(to, const char);
2014 	return (sys___posix_rename(l, &ua, retval));
2015 }
2016 
2017 int
2018 netbsd32_swapctl(l, v, retval)
2019 	struct lwp *l;
2020 	void *v;
2021 	register_t *retval;
2022 {
2023 	struct netbsd32_swapctl_args /* {
2024 		syscallarg(int) cmd;
2025 		syscallarg(const netbsd32_voidp) arg;
2026 		syscallarg(int) misc;
2027 	} */ *uap = v;
2028 	struct sys_swapctl_args ua;
2029 
2030 	NETBSD32TO64_UAP(cmd);
2031 	NETBSD32TOP_UAP(arg, void);
2032 	NETBSD32TO64_UAP(misc);
2033 	return (sys_swapctl(l, &ua, retval));
2034 }
2035 
2036 int
2037 netbsd32_minherit(l, v, retval)
2038 	struct lwp *l;
2039 	void *v;
2040 	register_t *retval;
2041 {
2042 	struct netbsd32_minherit_args /* {
2043 		syscallarg(netbsd32_voidp) addr;
2044 		syscallarg(netbsd32_size_t) len;
2045 		syscallarg(int) inherit;
2046 	} */ *uap = v;
2047 	struct sys_minherit_args ua;
2048 
2049 	NETBSD32TOP_UAP(addr, void);
2050 	NETBSD32TOX_UAP(len, size_t);
2051 	NETBSD32TO64_UAP(inherit);
2052 	return (sys_minherit(l, &ua, retval));
2053 }
2054 
2055 int
2056 netbsd32_lchmod(l, v, retval)
2057 	struct lwp *l;
2058 	void *v;
2059 	register_t *retval;
2060 {
2061 	struct netbsd32_lchmod_args /* {
2062 		syscallarg(const netbsd32_charp) path;
2063 		syscallarg(mode_t) mode;
2064 	} */ *uap = v;
2065 	struct sys_lchmod_args ua;
2066 
2067 	NETBSD32TOP_UAP(path, const char);
2068 	NETBSD32TO64_UAP(mode);
2069 	return (sys_lchmod(l, &ua, retval));
2070 }
2071 
2072 int
2073 netbsd32_lchown(l, v, retval)
2074 	struct lwp *l;
2075 	void *v;
2076 	register_t *retval;
2077 {
2078 	struct netbsd32_lchown_args /* {
2079 		syscallarg(const netbsd32_charp) path;
2080 		syscallarg(uid_t) uid;
2081 		syscallarg(gid_t) gid;
2082 	} */ *uap = v;
2083 	struct sys_lchown_args ua;
2084 
2085 	NETBSD32TOP_UAP(path, const char);
2086 	NETBSD32TO64_UAP(uid);
2087 	NETBSD32TO64_UAP(gid);
2088 	return (sys_lchown(l, &ua, retval));
2089 }
2090 
2091 int
2092 netbsd32___msync13(l, v, retval)
2093 	struct lwp *l;
2094 	void *v;
2095 	register_t *retval;
2096 {
2097 	struct netbsd32___msync13_args /* {
2098 		syscallarg(netbsd32_voidp) addr;
2099 		syscallarg(netbsd32_size_t) len;
2100 		syscallarg(int) flags;
2101 	} */ *uap = v;
2102 	struct sys___msync13_args ua;
2103 
2104 	NETBSD32TOP_UAP(addr, void);
2105 	NETBSD32TOX_UAP(len, size_t);
2106 	NETBSD32TO64_UAP(flags);
2107 	return (sys___msync13(l, &ua, retval));
2108 }
2109 
2110 int
2111 netbsd32___posix_chown(l, v, retval)
2112 	struct lwp *l;
2113 	void *v;
2114 	register_t *retval;
2115 {
2116 	struct netbsd32___posix_chown_args /* {
2117 		syscallarg(const netbsd32_charp) path;
2118 		syscallarg(uid_t) uid;
2119 		syscallarg(gid_t) gid;
2120 	} */ *uap = v;
2121 	struct sys___posix_chown_args ua;
2122 
2123 	NETBSD32TOP_UAP(path, const char);
2124 	NETBSD32TO64_UAP(uid);
2125 	NETBSD32TO64_UAP(gid);
2126 	return (sys___posix_chown(l, &ua, retval));
2127 }
2128 
2129 int
2130 netbsd32___posix_fchown(l, v, retval)
2131 	struct lwp *l;
2132 	void *v;
2133 	register_t *retval;
2134 {
2135 	struct netbsd32___posix_fchown_args /* {
2136 		syscallarg(int) fd;
2137 		syscallarg(uid_t) uid;
2138 		syscallarg(gid_t) gid;
2139 	} */ *uap = v;
2140 	struct sys___posix_fchown_args ua;
2141 
2142 	NETBSD32TO64_UAP(fd);
2143 	NETBSD32TO64_UAP(uid);
2144 	NETBSD32TO64_UAP(gid);
2145 	return (sys___posix_fchown(l, &ua, retval));
2146 }
2147 
2148 int
2149 netbsd32___posix_lchown(l, v, retval)
2150 	struct lwp *l;
2151 	void *v;
2152 	register_t *retval;
2153 {
2154 	struct netbsd32___posix_lchown_args /* {
2155 		syscallarg(const netbsd32_charp) path;
2156 		syscallarg(uid_t) uid;
2157 		syscallarg(gid_t) gid;
2158 	} */ *uap = v;
2159 	struct sys___posix_lchown_args ua;
2160 
2161 	NETBSD32TOP_UAP(path, const char);
2162 	NETBSD32TO64_UAP(uid);
2163 	NETBSD32TO64_UAP(gid);
2164 	return (sys___posix_lchown(l, &ua, retval));
2165 }
2166 
2167 int
2168 netbsd32_getsid(l, v, retval)
2169 	struct lwp *l;
2170 	void *v;
2171 	register_t *retval;
2172 {
2173 	struct netbsd32_getsid_args /* {
2174 		syscallarg(pid_t) pid;
2175 	} */ *uap = v;
2176 	struct sys_getsid_args ua;
2177 
2178 	NETBSD32TO64_UAP(pid);
2179 	return (sys_getsid(l, &ua, retval));
2180 }
2181 
2182 #ifdef KTRACE
2183 int
2184 netbsd32_fktrace(l, v, retval)
2185 	struct lwp *l;
2186 	void *v;
2187 	register_t *retval;
2188 {
2189 	struct netbsd32_fktrace_args /* {
2190 		syscallarg(const int) fd;
2191 		syscallarg(int) ops;
2192 		syscallarg(int) facs;
2193 		syscallarg(int) pid;
2194 	} */ *uap = v;
2195 #if 0
2196 	struct sys_fktrace_args ua;
2197 #else
2198 	/* XXXX */
2199 	struct sys_fktrace_noconst_args {
2200 		syscallarg(int) fd;
2201 		syscallarg(int) ops;
2202 		syscallarg(int) facs;
2203 		syscallarg(int) pid;
2204 	} ua;
2205 #endif
2206 
2207 	NETBSD32TOX_UAP(fd, int);
2208 	NETBSD32TO64_UAP(ops);
2209 	NETBSD32TO64_UAP(facs);
2210 	NETBSD32TO64_UAP(pid);
2211 	return (sys_fktrace(l, &ua, retval));
2212 }
2213 #endif /* KTRACE */
2214 
2215 int netbsd32___sigpending14(l, v, retval)
2216 	struct lwp *l;
2217 	void   *v;
2218 	register_t *retval;
2219 {
2220 	struct netbsd32___sigpending14_args /* {
2221 		syscallarg(sigset_t *) set;
2222 	} */ *uap = v;
2223 	struct sys___sigpending14_args ua;
2224 
2225 	NETBSD32TOP_UAP(set, sigset_t);
2226 	return (sys___sigpending14(l, &ua, retval));
2227 }
2228 
2229 int netbsd32___sigprocmask14(l, v, retval)
2230 	struct lwp *l;
2231 	void   *v;
2232 	register_t *retval;
2233 {
2234 	struct netbsd32___sigprocmask14_args /* {
2235 		syscallarg(int) how;
2236 		syscallarg(const sigset_t *) set;
2237 		syscallarg(sigset_t *) oset;
2238 	} */ *uap = v;
2239 	struct sys___sigprocmask14_args ua;
2240 
2241 	NETBSD32TO64_UAP(how);
2242 	NETBSD32TOP_UAP(set, sigset_t);
2243 	NETBSD32TOP_UAP(oset, sigset_t);
2244 	return (sys___sigprocmask14(l, &ua, retval));
2245 }
2246 
2247 int netbsd32___sigsuspend14(l, v, retval)
2248 	struct lwp *l;
2249 	void   *v;
2250 	register_t *retval;
2251 {
2252 	struct netbsd32___sigsuspend14_args /* {
2253 		syscallarg(const sigset_t *) set;
2254 	} */ *uap = v;
2255 	struct sys___sigsuspend14_args ua;
2256 
2257 	NETBSD32TOP_UAP(set, sigset_t);
2258 	return (sys___sigsuspend14(l, &ua, retval));
2259 };
2260 
2261 int netbsd32_fchroot(l, v, retval)
2262 	struct lwp *l;
2263 	void *v;
2264 	register_t *retval;
2265 {
2266 	struct netbsd32_fchroot_args /* {
2267 		syscallarg(int) fd;
2268 	} */ *uap = v;
2269 	struct sys_fchroot_args ua;
2270 
2271 	NETBSD32TO64_UAP(fd);
2272 	return (sys_fchroot(l, &ua, retval));
2273 }
2274 
2275 /*
2276  * Open a file given a file handle.
2277  *
2278  * Check permissions, allocate an open file structure,
2279  * and call the device open routine if any.
2280  */
2281 int
2282 netbsd32___fhopen40(l, v, retval)
2283 	struct lwp *l;
2284 	void *v;
2285 	register_t *retval;
2286 {
2287 	struct netbsd32___fhopen40_args /* {
2288 		syscallarg(const netbsd32_pointer_t *) fhp;
2289 		syscallarg(netbsd32_size_t) fh_size;
2290 		syscallarg(int) flags;
2291 	} */ *uap = v;
2292 	struct sys___fhopen40_args ua;
2293 
2294 	NETBSD32TOP_UAP(fhp, fhandle_t);
2295 	NETBSD32TO64_UAP(fh_size);
2296 	NETBSD32TO64_UAP(flags);
2297 	return (sys___fhopen40(l, &ua, retval));
2298 }
2299 
2300 /* virtual memory syscalls */
2301 int
2302 netbsd32_ovadvise(l, v, retval)
2303 	struct lwp *l;
2304 	void *v;
2305 	register_t *retval;
2306 {
2307 	struct netbsd32_ovadvise_args /* {
2308 		syscallarg(int) anom;
2309 	} */ *uap = v;
2310 	struct sys_ovadvise_args ua;
2311 
2312 	NETBSD32TO64_UAP(anom);
2313 	return (sys_ovadvise(l, &ua, retval));
2314 }
2315 
2316 void
2317 netbsd32_adjust_limits(struct proc *p)
2318 {
2319 	static const struct {
2320 		int id;
2321 		rlim_t lim;
2322 	} lm[] = {
2323 		{ RLIMIT_DATA,	MAXDSIZ32 },
2324 		{ RLIMIT_STACK, MAXSSIZ32 },
2325 	};
2326 	struct rlimit val[__arraycount(lm)];
2327 	size_t i;
2328 	int needcopy = 0;
2329 
2330 	for (i = 0; i < __arraycount(val); i++) {
2331 		val[i] = p->p_rlimit[lm[i].id];
2332 		if (LIMITCHECK(val[i].rlim_cur, lm[i].lim)) {
2333 			val[i].rlim_cur = lm[i].lim;
2334 			needcopy++;
2335 		}
2336 		if (LIMITCHECK(val[i].rlim_max, lm[i].lim)) {
2337 			val[i].rlim_max = lm[i].lim;
2338 			needcopy++;
2339 		}
2340 	}
2341 
2342 	if (needcopy == 0)
2343 		return;
2344 
2345 	if (p->p_limit->p_refcnt > 1 &&
2346 	    (p->p_limit->p_lflags & PL_SHAREMOD) == 0) {
2347 		struct plimit *oldplim;
2348 		p->p_limit = limcopy(oldplim = p->p_limit);
2349 		limfree(oldplim);
2350 	}
2351 
2352 	for (i = 0; i < __arraycount(val); i++)
2353 		p->p_rlimit[lm[i].id] = val[i];
2354 
2355 }
2356 
2357 int
2358 netbsd32_uuidgen(struct lwp *l, void *v, register_t *retval)
2359 {
2360 	struct netbsd32_uuidgen_args /* {
2361 		syscallarg(netbsd32_uuidp_t) store;
2362 		syscallarg(int) count;
2363 	} */ *uap = v;
2364 	struct sys_uuidgen_args ua;
2365 
2366 	NETBSD32TOP_UAP(store, struct uuid);
2367 	NETBSD32TO64_UAP(count);
2368 	return (sys_uuidgen(l, &ua, retval));
2369 }
2370 
2371 int
2372 netbsd32_extattrctl(struct lwp *l, void *v, register_t *retval)
2373 {
2374 	struct netbsd32_extattrctl_args /* {
2375 		syscallarg(const netbsd32_charp) path;
2376 		syscallarg(int) cmd;
2377 		syscallarg(const netbsd32_charp) filename;
2378 		syscallarg(int) attrnamespace;
2379 		syscallarg(const netbsd32_charp) attrname;
2380 	} */ *uap = v;
2381 	struct sys_extattrctl_args ua;
2382 
2383 	NETBSD32TOP_UAP(path, const char);
2384 	NETBSD32TO64_UAP(cmd);
2385 	NETBSD32TOP_UAP(filename, const char);
2386 	NETBSD32TO64_UAP(attrnamespace);
2387 	NETBSD32TOP_UAP(attrname, const char);
2388 	return sys_extattrctl(l, &ua, retval);
2389 }
2390 
2391 int
2392 netbsd32_extattr_set_fd(struct lwp *l, void *v, register_t *retval)
2393 {
2394 	struct netbsd32_extattr_set_fd_args /* {
2395 		syscallarg(int) fd;
2396 		syscallarg(int) attrnamespace;
2397 		syscallarg(const netbsd32_charp) attrname;
2398 		syscallarg(const netbsd32_voidp) data;
2399 		syscallarg(netbsd32_size_t) nbytes;
2400 	} */ *uap = v;
2401 	struct sys_extattr_set_fd_args ua;
2402 
2403 	NETBSD32TO64_UAP(fd);
2404 	NETBSD32TO64_UAP(attrnamespace);
2405 	NETBSD32TOP_UAP(attrname, const char);
2406 	NETBSD32TOP_UAP(data, const void);
2407 	NETBSD32TOX_UAP(nbytes, size_t);
2408 	return sys_extattr_set_fd(l, &ua, retval);
2409 }
2410 
2411 int
2412 netbsd32_extattr_set_file(struct lwp *l, void *v, register_t *retval)
2413 {
2414 	struct netbsd32_extattr_set_file_args /* {
2415 		syscallarg(const netbsd32_charp) path;
2416 		syscallarg(int) attrnamespace;
2417 		syscallarg(const netbsd32_charp) attrname;
2418 		syscallarg(const netbsd32_voidp) data;
2419 		syscallarg(netbsd32_size_t) nbytes;
2420 	} */ *uap = v;
2421 	struct sys_extattr_set_file_args ua;
2422 
2423 	NETBSD32TOP_UAP(path, const char);
2424 	NETBSD32TO64_UAP(attrnamespace);
2425 	NETBSD32TOP_UAP(attrname, const char);
2426 	NETBSD32TOP_UAP(data, const void);
2427 	NETBSD32TOX_UAP(nbytes, size_t);
2428 	return sys_extattr_set_file(l, &ua, retval);
2429 }
2430 
2431 int
2432 netbsd32_extattr_set_link(struct lwp *l, void *v, register_t *retval)
2433 {
2434 	struct netbsd32_extattr_set_link_args /* {
2435 		syscallarg(const netbsd32_charp) path;
2436 		syscallarg(int) attrnamespace;
2437 		syscallarg(const netbsd32_charp) attrname;
2438 		syscallarg(const netbsd32_voidp) data;
2439 		syscallarg(netbsd32_size_t) nbytes;
2440 	} */ *uap = v;
2441 	struct sys_extattr_set_link_args ua;
2442 
2443 	NETBSD32TOP_UAP(path, const char);
2444 	NETBSD32TO64_UAP(attrnamespace);
2445 	NETBSD32TOP_UAP(attrname, const char);
2446 	NETBSD32TOP_UAP(data, const void);
2447 	NETBSD32TOX_UAP(nbytes, size_t);
2448 	return sys_extattr_set_link(l, &ua, retval);
2449 }
2450 
2451 int
2452 netbsd32_extattr_get_fd(struct lwp *l, void *v, register_t *retval)
2453 {
2454 	struct netbsd32_extattr_get_fd_args /* {
2455 		syscallarg(int) fd;
2456 		syscallarg(int) attrnamespace;
2457 		syscallarg(const netbsd32_charp) attrname;
2458 		syscallarg(netbsd32_voidp) data;
2459 		syscallarg(netbsd32_size_t) nbytes;
2460 	} */ *uap = v;
2461 	struct sys_extattr_get_fd_args ua;
2462 
2463 	NETBSD32TO64_UAP(fd);
2464 	NETBSD32TO64_UAP(attrnamespace);
2465 	NETBSD32TOP_UAP(attrname, const char);
2466 	NETBSD32TOP_UAP(data, void);
2467 	NETBSD32TOX_UAP(nbytes, size_t);
2468 	return sys_extattr_get_fd(l, &ua, retval);
2469 }
2470 
2471 int
2472 netbsd32_extattr_get_file(struct lwp *l, void *v, register_t *retval)
2473 {
2474 	struct netbsd32_extattr_get_file_args /* {
2475 		syscallarg(const netbsd32_charp) path;
2476 		syscallarg(int) attrnamespace;
2477 		syscallarg(const netbsd32_charp) attrname;
2478 		syscallarg(netbsd32_voidp) data;
2479 		syscallarg(netbsd32_size_t) nbytes;
2480 	} */ *uap = v;
2481 	struct sys_extattr_get_file_args ua;
2482 
2483 	NETBSD32TOP_UAP(path, const char);
2484 	NETBSD32TO64_UAP(attrnamespace);
2485 	NETBSD32TOP_UAP(attrname, const char);
2486 	NETBSD32TOP_UAP(data, void);
2487 	NETBSD32TOX_UAP(nbytes, size_t);
2488 	return sys_extattr_get_file(l, &ua, retval);
2489 }
2490 
2491 int
2492 netbsd32_extattr_get_link(struct lwp *l, void *v, register_t *retval)
2493 {
2494 	struct netbsd32_extattr_get_link_args /* {
2495 		syscallarg(const netbsd32_charp) path;
2496 		syscallarg(int) attrnamespace;
2497 		syscallarg(const netbsd32_charp) attrname;
2498 		syscallarg(netbsd32_voidp) data;
2499 		syscallarg(netbsd32_size_t) nbytes;
2500 	} */ *uap = v;
2501 	struct sys_extattr_get_link_args ua;
2502 
2503 	NETBSD32TOP_UAP(path, const char);
2504 	NETBSD32TO64_UAP(attrnamespace);
2505 	NETBSD32TOP_UAP(attrname, const char);
2506 	NETBSD32TOP_UAP(data, void);
2507 	NETBSD32TOX_UAP(nbytes, size_t);
2508 	return sys_extattr_get_link(l, &ua, retval);
2509 }
2510 
2511 int
2512 netbsd32_extattr_delete_fd(struct lwp *l, void *v, register_t *retval)
2513 {
2514 	struct netbsd32_extattr_delete_fd_args /* {
2515 		syscallarg(int) fd;
2516 		syscallarg(int) attrnamespace;
2517 		syscallarg(const netbsd32_charp) attrname;
2518 	} */ *uap = v;
2519 	struct sys_extattr_delete_fd_args ua;
2520 
2521 	NETBSD32TO64_UAP(fd);
2522 	NETBSD32TO64_UAP(attrnamespace);
2523 	NETBSD32TOP_UAP(attrname, const char);
2524 	return sys_extattr_delete_fd(l, &ua, retval);
2525 }
2526 
2527 int
2528 netbsd32_extattr_delete_file(struct lwp *l, void *v, register_t *retval)
2529 {
2530 	struct netbsd32_extattr_delete_file_args /* {
2531 		syscallarg(const netbsd32_charp) path;
2532 		syscallarg(int) attrnamespace;
2533 		syscallarg(const netbsd32_charp) attrname;
2534 	} */ *uap = v;
2535 	struct sys_extattr_delete_file_args ua;
2536 
2537 	NETBSD32TOP_UAP(path, const char);
2538 	NETBSD32TO64_UAP(attrnamespace);
2539 	NETBSD32TOP_UAP(attrname, const char);
2540 	return sys_extattr_delete_file(l, &ua, retval);
2541 }
2542 
2543 int
2544 netbsd32_extattr_delete_link(struct lwp *l, void *v, register_t *retval)
2545 {
2546 	struct netbsd32_extattr_delete_link_args /* {
2547 		syscallarg(const netbsd32_charp) path;
2548 		syscallarg(int) attrnamespace;
2549 		syscallarg(const netbsd32_charp) attrname;
2550 	} */ *uap = v;
2551 	struct sys_extattr_delete_link_args ua;
2552 
2553 	NETBSD32TOP_UAP(path, const char);
2554 	NETBSD32TO64_UAP(attrnamespace);
2555 	NETBSD32TOP_UAP(attrname, const char);
2556 	return sys_extattr_delete_link(l, &ua, retval);
2557 }
2558 
2559 int
2560 netbsd32_extattr_list_fd(struct lwp *l, void *v, register_t *retval)
2561 {
2562 	struct netbsd32_extattr_list_fd_args /* {
2563 		syscallarg(int) fd;
2564 		syscallarg(int) attrnamespace;
2565 		syscallarg(netbsd32_voidp) data;
2566 		syscallarg(netbsd32_size_t) nbytes;
2567 	} */ *uap = v;
2568 	struct sys_extattr_list_fd_args ua;
2569 
2570 	NETBSD32TO64_UAP(fd);
2571 	NETBSD32TO64_UAP(attrnamespace);
2572 	NETBSD32TOP_UAP(data, void);
2573 	NETBSD32TOX_UAP(nbytes, size_t);
2574 	return sys_extattr_list_fd(l, &ua, retval);
2575 }
2576 
2577 int
2578 netbsd32_extattr_list_file(struct lwp *l, void *v, register_t *retval)
2579 {
2580 	struct netbsd32_extattr_list_file_args /* {
2581 		syscallarg(const netbsd32_charp) path;
2582 		syscallarg(int) attrnamespace;
2583 		syscallarg(netbsd32_voidp) data;
2584 		syscallarg(netbsd32_size_t) nbytes;
2585 	} */ *uap = v;
2586 	struct sys_extattr_list_file_args ua;
2587 
2588 	NETBSD32TOP_UAP(path, const char);
2589 	NETBSD32TO64_UAP(attrnamespace);
2590 	NETBSD32TOP_UAP(data, void);
2591 	NETBSD32TOX_UAP(nbytes, size_t);
2592 	return sys_extattr_list_file(l, &ua, retval);
2593 }
2594 
2595 int
2596 netbsd32_extattr_list_link(struct lwp *l, void *v, register_t *retval)
2597 {
2598 	struct netbsd32_extattr_list_link_args /* {
2599 		syscallarg(const netbsd32_charp) path;
2600 		syscallarg(int) attrnamespace;
2601 		syscallarg(netbsd32_voidp) data;
2602 		syscallarg(netbsd32_size_t) nbytes;
2603 	} */ *uap = v;
2604 	struct sys_extattr_list_link_args ua;
2605 
2606 	NETBSD32TOP_UAP(path, const char);
2607 	NETBSD32TO64_UAP(attrnamespace);
2608 	NETBSD32TOP_UAP(data, void);
2609 	NETBSD32TOX_UAP(nbytes, size_t);
2610 	return sys_extattr_list_link(l, &ua, retval);
2611 }
2612 
2613 int
2614 netbsd32_mlockall(l, v, retval)
2615 	struct lwp *l;
2616 	void *v;
2617 	register_t *retval;
2618 {
2619 	struct netbsd32_mlockall_args /* {
2620 		syscallarg(int) flags;
2621 	} */ *uap = v;
2622 	struct sys_mlockall_args ua;
2623 
2624 	NETBSD32TO64_UAP(flags);
2625 	return (sys_mlockall(l, &ua, retval));
2626 }
2627 
2628 int
2629 netbsd32___clone(struct lwp *l, void *v, register_t *retval)
2630 {
2631 	struct netbsd32___clone_args /*  {
2632 		syscallarg(int) flags;
2633 		syscallarg(netbsd32_voidp) stack;
2634 	} */ *uap = v;
2635 	struct sys___clone_args ua;
2636 
2637 	NETBSD32TO64_UAP(flags);
2638 	NETBSD32TOP_UAP(stack, void);
2639 	return sys___clone(l, &ua, retval);
2640 }
2641 
2642 int
2643 netbsd32_fsync_range(struct lwp *l, void *v, register_t *retval)
2644 {
2645 	struct netbsd32_fsync_range_args /* {
2646 		syscallarg(int) fd;
2647 		syscallarg(int) flags;
2648 		syscallarg(off_t) start;
2649 		syscallarg(off_t) length;
2650 	} */ *uap = v;
2651 	struct sys_fsync_range_args ua;
2652 
2653 	NETBSD32TO64_UAP(fd);
2654 	NETBSD32TO64_UAP(flags);
2655 	NETBSD32TO64_UAP(start);
2656 	NETBSD32TO64_UAP(length);
2657 	return (sys_fsync_range(l, &ua, retval));
2658 }
2659 
2660 int
2661 netbsd32_rasctl(struct lwp *l, void *v, register_t *retval)
2662 {
2663 	struct netbsd32_rasctl_args /* {
2664 		syscallarg(netbsd32_caddr_t) addr;
2665 		syscallarg(netbsd32_size_t) len;
2666 		syscallarg(int) op;
2667 	} */ *uap = v;
2668 	struct sys_rasctl_args ua;
2669 
2670 	NETBSD32TOX64_UAP(addr, caddr_t);
2671 	NETBSD32TOX_UAP(len, size_t);
2672 	NETBSD32TO64_UAP(op);
2673 	return sys_rasctl(l, &ua, retval);
2674 }
2675 
2676 int
2677 netbsd32_setxattr(struct lwp *l, void *v, register_t *retval)
2678 {
2679 	struct netbsd32_setxattr_args /* {
2680 		syscallarg(const netbsd32_charp) path;
2681 		syscallarg(const netbsd32_charp) name;
2682 		syscallarg(netbsd32_voidp) value;
2683 		syscallarg(netbsd32_size_t) size;
2684 		syscallarg(int) flags;
2685 	} */ *uap = v;
2686 	struct sys_setxattr_args ua;
2687 	NETBSD32TOP_UAP(path, const char);
2688 	NETBSD32TOP_UAP(name, const char);
2689 	NETBSD32TOP_UAP(value, void);
2690 	NETBSD32TOX_UAP(size, size_t);
2691 	NETBSD32TO64_UAP(flags);
2692 	return sys_setxattr(l, &ua, retval);
2693 }
2694 
2695 int
2696 netbsd32_lsetxattr(struct lwp *l, void *v, register_t *retval)
2697 {
2698 	struct netbsd32_lsetxattr_args /* {
2699 		syscallarg(const netbsd32_charp) path;
2700 		syscallarg(const netbsd32_charp) name;
2701 		syscallarg(netbsd32_voidp) value;
2702 		syscallarg(netbsd32_size_t) size;
2703 		syscallarg(int) flags;
2704 	} */ *uap = v;
2705 	struct sys_lsetxattr_args ua;
2706 	NETBSD32TOP_UAP(path, const char);
2707 	NETBSD32TOP_UAP(name, const char);
2708 	NETBSD32TOP_UAP(value, void);
2709 	NETBSD32TOX_UAP(size, size_t);
2710 	NETBSD32TO64_UAP(flags);
2711 	return sys_lsetxattr(l, &ua, retval);
2712 }
2713 
2714 int
2715 netbsd32_fsetxattr(struct lwp *l, void *v, register_t *retval)
2716 {
2717 	struct netbsd32_fsetxattr_args /* {
2718 		syscallarg(int) fd;
2719 		syscallarg(const netbsd32_charp) name;
2720 		syscallarg(netbsd32_voidp) value;
2721 		syscallarg(netbsd32_size_t) size;
2722 		syscallarg(int) flags;
2723 	} */ *uap = v;
2724 	struct sys_fsetxattr_args ua;
2725 	NETBSD32TO64_UAP(fd);
2726 	NETBSD32TOP_UAP(name, const char);
2727 	NETBSD32TOP_UAP(value, void);
2728 	NETBSD32TOX_UAP(size, size_t);
2729 	NETBSD32TO64_UAP(flags);
2730 	return sys_fsetxattr(l, &ua, retval);
2731 }
2732 
2733 int
2734 netbsd32_getxattr(struct lwp *l, void *v, register_t *retval)
2735 {
2736 	struct netbsd32_getxattr_args /* {
2737 		syscallarg(const netbsd32_charp) path;
2738 		syscallarg(const netbsd32_charp) name;
2739 		syscallarg(netbsd32_voidp) value;
2740 		syscallarg(netbsd32_size_t) size;
2741 	} */ *uap = v;
2742 	struct sys_getxattr_args ua;
2743 	NETBSD32TOP_UAP(path, const char);
2744 	NETBSD32TOP_UAP(name, const char);
2745 	NETBSD32TOP_UAP(value, void);
2746 	NETBSD32TOX_UAP(size, size_t);
2747 	return sys_getxattr(l, &ua, retval);
2748 }
2749 
2750 int
2751 netbsd32_lgetxattr(struct lwp *l, void *v, register_t *retval)
2752 {
2753 	struct netbsd32_lgetxattr_args /* {
2754 		syscallarg(const netbsd32_charp) path;
2755 		syscallarg(const netbsd32_charp) name;
2756 		syscallarg(netbsd32_voidp) value;
2757 		syscallarg(netbsd32_size_t) size;
2758 	} */ *uap = v;
2759 	struct sys_lgetxattr_args ua;
2760 	NETBSD32TOP_UAP(path, const char);
2761 	NETBSD32TOP_UAP(name, const char);
2762 	NETBSD32TOP_UAP(value, void);
2763 	NETBSD32TOX_UAP(size, size_t);
2764 	return sys_lgetxattr(l, &ua, retval);
2765 }
2766 
2767 int
2768 netbsd32_fgetxattr(struct lwp *l, void *v, register_t *retval)
2769 {
2770 	struct netbsd32_fgetxattr_args /* {
2771 		syscallarg(int) fd;
2772 		syscallarg(const netbsd32_charp) name;
2773 		syscallarg(netbsd32_voidp) value;
2774 		syscallarg(netbsd32_size_t) size;
2775 	} */ *uap = v;
2776 	struct sys_fgetxattr_args ua;
2777 	NETBSD32TO64_UAP(fd);
2778 	NETBSD32TOP_UAP(name, const char);
2779 	NETBSD32TOP_UAP(value, void);
2780 	NETBSD32TOX_UAP(size, size_t);
2781 	return sys_fgetxattr(l, &ua, retval);
2782 }
2783 
2784 int
2785 netbsd32_listxattr(struct lwp *l, void *v, register_t *retval)
2786 {
2787 	struct netbsd32_listxattr_args /* {
2788 		syscallarg(const netbsd32_charp) path;
2789 		syscallarg(netbsd32_charp) list;
2790 		syscallarg(netbsd32_size_t) size;
2791 	} */ *uap = v;
2792 	struct sys_listxattr_args ua;
2793 	NETBSD32TOP_UAP(path, const char);
2794 	NETBSD32TOP_UAP(list, char);
2795 	NETBSD32TOX_UAP(size, size_t);
2796 	return sys_listxattr(l, &ua, retval);
2797 }
2798 
2799 int
2800 netbsd32_llistxattr(struct lwp *l, void *v, register_t *retval)
2801 {
2802 	struct netbsd32_llistxattr_args /* {
2803 		syscallarg(const netbsd32_charp) path;
2804 		syscallarg(netbsd32_charp) list;
2805 		syscallarg(netbsd32_size_t) size;
2806 	} */ *uap = v;
2807 	struct sys_llistxattr_args ua;
2808 	NETBSD32TOP_UAP(path, const char);
2809 	NETBSD32TOP_UAP(list, char);
2810 	NETBSD32TOX_UAP(size, size_t);
2811 	return sys_llistxattr(l, &ua, retval);
2812 }
2813 
2814 int
2815 netbsd32_flistxattr(struct lwp *l, void *v, register_t *retval)
2816 {
2817 	struct netbsd32_flistxattr_args /* {
2818 		syscallarg(int) fd;
2819 		syscallarg(netbsd32_charp) list;
2820 		syscallarg(netbsd32_size_t) size;
2821 	} */ *uap = v;
2822 	struct sys_flistxattr_args ua;
2823 	NETBSD32TO64_UAP(fd);
2824 	NETBSD32TOP_UAP(list, char);
2825 	NETBSD32TOX_UAP(size, size_t);
2826 	return sys_flistxattr(l, &ua, retval);
2827 }
2828 
2829 int
2830 netbsd32_removexattr(struct lwp *l, void *v, register_t *retval)
2831 {
2832 	struct netbsd32_removexattr_args /* {
2833 		syscallarg(const netbsd32_charp) path;
2834 		syscallarg(const netbsd32_charp) name;
2835 	} */ *uap = v;
2836 	struct sys_removexattr_args ua;
2837 	NETBSD32TOP_UAP(path, const char);
2838 	NETBSD32TOP_UAP(name, const char);
2839 	return sys_removexattr(l, &ua, retval);
2840 }
2841 
2842 int
2843 netbsd32_lremovexattr(struct lwp *l, void *v, register_t *retval)
2844 {
2845 	struct netbsd32_lremovexattr_args /* {
2846 		syscallarg(const netbsd32_charp) path;
2847 		syscallarg(const netbsd32_charp) name;
2848 	} */ *uap = v;
2849 	struct sys_lremovexattr_args ua;
2850 	NETBSD32TOP_UAP(path, const char);
2851 	NETBSD32TOP_UAP(name, const char);
2852 	return sys_lremovexattr(l, &ua, retval);
2853 }
2854 
2855 int
2856 netbsd32_fremovexattr(struct lwp *l, void *v, register_t *retval)
2857 {
2858 	struct netbsd32_fremovexattr_args /* {
2859 		syscallarg(int) fd;
2860 		syscallarg(const netbsd32_charp) name;
2861 	} */ *uap = v;
2862 	struct sys_fremovexattr_args ua;
2863 	NETBSD32TO64_UAP(fd);
2864 	NETBSD32TOP_UAP(name, const char);
2865 	return sys_fremovexattr(l, &ua, retval);
2866 }
2867