Sat Mar 7 00:56:41 2020 UTC ()
Properly mark netbsd32_compat_43 syscalls that are directly implemented
by calling their compat_43 equivalents.  With these changes, and with
built-in versions of COMPAT_NETBSD32, COMPAT_NOMID, and COMPAT_09, I can
now run a netbsd-0.9 statically linked i386 (32-bit) version of /bin/ls
on a 9.99.x amd64 host!

Addresses PR kern/55047 but more changes coming to handle non-built-in
modules.

XXX pullup-9


(pgoyette)
diff -r1.59 -r1.60 src/sys/compat/netbsd32/netbsd32_compat_43.c
diff -r1.131 -r1.132 src/sys/compat/netbsd32/syscalls.master

cvs diff -r1.59 -r1.60 src/sys/compat/netbsd32/netbsd32_compat_43.c (expand / switch to unified diff)

--- src/sys/compat/netbsd32/netbsd32_compat_43.c 2020/01/01 09:17:45 1.59
+++ src/sys/compat/netbsd32/netbsd32_compat_43.c 2020/03/07 00:56:41 1.60
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: netbsd32_compat_43.c,v 1.59 2020/01/01 09:17:45 maxv Exp $ */ 1/* $NetBSD: netbsd32_compat_43.c,v 1.60 2020/03/07 00:56:41 pgoyette Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 1998, 2001 Matthew R. Green 4 * Copyright (c) 1998, 2001 Matthew R. Green
5 * All rights reserved. 5 * All rights reserved.
6 * 6 *
7 * Redistribution and use in source and binary forms, with or without 7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions 8 * modification, are permitted provided that the following conditions
9 * are met: 9 * are met:
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer. 11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright 12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the 13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution. 14 * documentation and/or other materials provided with the distribution.
@@ -17,27 +17,27 @@ @@ -17,27 +17,27 @@
17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE. 26 * SUCH DAMAGE.
27 */ 27 */
28 28
29#include <sys/cdefs.h> 29#include <sys/cdefs.h>
30__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_43.c,v 1.59 2020/01/01 09:17:45 maxv Exp $"); 30__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_43.c,v 1.60 2020/03/07 00:56:41 pgoyette Exp $");
31 31
32#if defined(_KERNEL_OPT) 32#if defined(_KERNEL_OPT)
33#include "opt_compat_43.h" 33#include "opt_compat_43.h"
34#endif 34#endif
35 35
36#include <sys/param.h> 36#include <sys/param.h>
37#include <sys/systm.h> 37#include <sys/systm.h>
38#include <sys/module.h> 38#include <sys/module.h>
39#include <sys/fcntl.h> 39#include <sys/fcntl.h>
40#include <sys/filedesc.h> 40#include <sys/filedesc.h>
41#include <sys/mbuf.h> 41#include <sys/mbuf.h>
42#include <sys/mount.h> 42#include <sys/mount.h>
43#include <sys/namei.h> 43#include <sys/namei.h>
@@ -759,26 +759,46 @@ static struct syscall_package compat_net @@ -759,26 +759,46 @@ static struct syscall_package compat_net
759 (sy_call_t *)compat_43_netbsd32_orecvfrom }, 759 (sy_call_t *)compat_43_netbsd32_orecvfrom },
760 { NETBSD32_SYS_compat_43_netbsd32_ogetsockname, 0, 760 { NETBSD32_SYS_compat_43_netbsd32_ogetsockname, 0,
761 (sy_call_t *)compat_43_netbsd32_ogetsockname }, 761 (sy_call_t *)compat_43_netbsd32_ogetsockname },
762 { NETBSD32_SYS_compat_43_netbsd32_ogetpeername, 0, 762 { NETBSD32_SYS_compat_43_netbsd32_ogetpeername, 0,
763 (sy_call_t *)compat_43_netbsd32_ogetpeername }, 763 (sy_call_t *)compat_43_netbsd32_ogetpeername },
764 { NETBSD32_SYS_compat_43_netbsd32_osigvec, 0, 764 { NETBSD32_SYS_compat_43_netbsd32_osigvec, 0,
765 (sy_call_t *)compat_43_netbsd32_osigvec }, 765 (sy_call_t *)compat_43_netbsd32_osigvec },
766 { NETBSD32_SYS_compat_43_netbsd32_sigblock, 0, 766 { NETBSD32_SYS_compat_43_netbsd32_sigblock, 0,
767 (sy_call_t *)compat_43_netbsd32_sigblock }, 767 (sy_call_t *)compat_43_netbsd32_sigblock },
768 { NETBSD32_SYS_compat_43_netbsd32_sigsetmask, 0, 768 { NETBSD32_SYS_compat_43_netbsd32_sigsetmask, 0,
769 (sy_call_t *)compat_43_netbsd32_sigsetmask }, 769 (sy_call_t *)compat_43_netbsd32_sigsetmask },
770 { NETBSD32_SYS_compat_43_netbsd32_osigstack, 0, 770 { NETBSD32_SYS_compat_43_netbsd32_osigstack, 0,
771 (sy_call_t *)compat_43_netbsd32_osigstack }, 771 (sy_call_t *)compat_43_netbsd32_osigstack },
 772/*
 773 * These syscalls are provided by emul_netbsd compat_43 code, but their
 774 * entry points must still be loaded in the emul_netbsd32 disatch table
 775 */
 776 { NETBSD32_SYS_compat_43_ogetpagesize, 0,
 777 (sy_call_t *)compat_43_sys_getpagesize },
 778 { NETBSD32_SYS_compat_43_ogetdtablesize, 0,
 779 (sy_call_t *)compat_43_sys_getdtablesize},
 780 { NETBSD32_SYS_compat_43_ogethostid, 0,
 781 (sy_call_t *)compat_43_sys_gethostid },
 782 { NETBSD32_SYS_compat_43_owait, 0,
 783 (sy_call_t *)compat_43_sys_wait },
 784/*
 785 * Skip oquota since it isn't part of compat_43
 786 * { NETBSD32_SYS_compat_43_oquota, 0,
 787 * (sy_call_t *)compat_43_sys_quota },
 788 */
 789
 790/* End of compat_43 syscalls */
 791
772 { 0, 0, NULL } 792 { 0, 0, NULL }
773};  793};
774 794
775MODULE(MODULE_CLASS_EXEC, compat_netbsd32_43, "compat_netbsd32,compat_43"); 795MODULE(MODULE_CLASS_EXEC, compat_netbsd32_43, "compat_netbsd32,compat_43");
776 796
777static int 797static int
778compat_netbsd32_43_modcmd(modcmd_t cmd, void *arg) 798compat_netbsd32_43_modcmd(modcmd_t cmd, void *arg)
779{ 799{
780 800
781 switch (cmd) { 801 switch (cmd) {
782 case MODULE_CMD_INIT: 802 case MODULE_CMD_INIT:
783 return syscall_establish(&emul_netbsd32, 803 return syscall_establish(&emul_netbsd32,
784 compat_netbsd32_43_syscalls); 804 compat_netbsd32_43_syscalls);

cvs diff -r1.131 -r1.132 src/sys/compat/netbsd32/syscalls.master (expand / switch to unified diff)

--- src/sys/compat/netbsd32/syscalls.master 2020/01/18 07:33:24 1.131
+++ src/sys/compat/netbsd32/syscalls.master 2020/03/07 00:56:41 1.132
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1 $NetBSD: syscalls.master,v 1.131 2020/01/18 07:33:24 kamil Exp $ 1 $NetBSD: syscalls.master,v 1.132 2020/03/07 00:56:41 pgoyette Exp $
2 2
3; from: NetBSD: syscalls.master,v 1.81 1998/07/05 08:49:50 jonathan Exp 3; from: NetBSD: syscalls.master,v 1.81 1998/07/05 08:49:50 jonathan Exp
4; @(#)syscalls.master 8.2 (Berkeley) 1/13/94 4; @(#)syscalls.master 8.2 (Berkeley) 1/13/94
5 5
6; NetBSD system call name/number "master" file. 6; NetBSD system call name/number "master" file.
7; (See syscalls.conf to see what it is processed into.) 7; (See syscalls.conf to see what it is processed into.)
8; 8;
9; Fields: number type [type-dependent ...] 9; Fields: number type [type-dependent ...]
10; number system call number, must be in order 10; number system call number, must be in order
11; type one of STD, OBSOL, UNIMPL, IGNORED, NODEF, NOARGS, or one of 11; type one of STD, OBSOL, UNIMPL, IGNORED, NODEF, NOARGS, or one of
12; the compatibility options defined in syscalls.conf. 12; the compatibility options defined in syscalls.conf.
13; 13;
14; types: 14; types:
@@ -173,27 +173,27 @@ @@ -173,27 +173,27 @@
173 netbsd32_charp link); } 173 netbsd32_charp link); }
17458 STD { int|netbsd32||readlink(netbsd32_charp path, \ 17458 STD { int|netbsd32||readlink(netbsd32_charp path, \
175 netbsd32_charp buf, netbsd32_size_t count); } 175 netbsd32_charp buf, netbsd32_size_t count); }
17659 STD { int|netbsd32||execve(netbsd32_charp path, \ 17659 STD { int|netbsd32||execve(netbsd32_charp path, \
177 netbsd32_charpp argp, netbsd32_charpp envp); } 177 netbsd32_charpp argp, netbsd32_charpp envp); }
17860 STD { mode_t|netbsd32||umask(mode_t newmask); } 17860 STD { mode_t|netbsd32||umask(mode_t newmask); }
17961 STD { int|netbsd32||chroot(netbsd32_charp path); } 17961 STD { int|netbsd32||chroot(netbsd32_charp path); }
18062 COMPAT_43 MODULAR compat_netbsd32_43 \ 18062 COMPAT_43 MODULAR compat_netbsd32_43 \
181 { int|netbsd32||fstat43(int fd, netbsd32_stat43p_t sb); } 181 { int|netbsd32||fstat43(int fd, netbsd32_stat43p_t sb); }
18263 COMPAT_43 MODULAR compat_netbsd32_43 \ 18263 COMPAT_43 MODULAR compat_netbsd32_43 \
183 { int|netbsd32||ogetkerninfo(int op, \ 183 { int|netbsd32||ogetkerninfo(int op, \
184 netbsd32_charp where, netbsd32_intp size, \ 184 netbsd32_charp where, netbsd32_intp size, \
185 int arg); } 185 int arg); }
18664 COMPAT_43 MODULAR compat_netbsd32_43 \ 18664 COMPAT_43 MODULAR compat_43 \
187 { int|sys||getpagesize(void); } ogetpagesize 187 { int|sys||getpagesize(void); } ogetpagesize
18865 COMPAT_12 MODULAR compat_netbsd32_12 \ 18865 COMPAT_12 MODULAR compat_netbsd32_12 \
189 { int|netbsd32||msync(netbsd32_voidp addr, \ 189 { int|netbsd32||msync(netbsd32_voidp addr, \
190 netbsd32_size_t len); } 190 netbsd32_size_t len); }
191; XXX COMPAT_??? for 4.4BSD-compatible vfork(2)? 191; XXX COMPAT_??? for 4.4BSD-compatible vfork(2)?
19266 NOARGS { int|sys||vfork(void); } 19266 NOARGS { int|sys||vfork(void); }
19367 OBSOL vread 19367 OBSOL vread
19468 OBSOL vwrite 19468 OBSOL vwrite
19569 OBSOL sbrk 19569 OBSOL sbrk
19670 OBSOL sstk 19670 OBSOL sstk
19771 COMPAT_43 MODULAR compat_netbsd32_43 \ 19771 COMPAT_43 MODULAR compat_netbsd32_43 \
198 { int|netbsd32||ommap(netbsd32_voidp addr, \ 198 { int|netbsd32||ommap(netbsd32_voidp addr, \
199 netbsd32_size_t len, int prot, int flags, int fd, \ 199 netbsd32_size_t len, int prot, int flags, int fd, \
@@ -209,40 +209,40 @@ @@ -209,40 +209,40 @@
20977 OBSOL vlimit 20977 OBSOL vlimit
21078 STD { int|netbsd32||mincore(netbsd32_voidp addr, \ 21078 STD { int|netbsd32||mincore(netbsd32_voidp addr, \
211 netbsd32_size_t len, netbsd32_charp vec); } 211 netbsd32_size_t len, netbsd32_charp vec); }
21279 STD { int|netbsd32||getgroups(int gidsetsize, \ 21279 STD { int|netbsd32||getgroups(int gidsetsize, \
213 netbsd32_gid_tp gidset); } 213 netbsd32_gid_tp gidset); }
21480 STD { int|netbsd32||setgroups(int gidsetsize, \ 21480 STD { int|netbsd32||setgroups(int gidsetsize, \
215 netbsd32_gid_tp gidset); } 215 netbsd32_gid_tp gidset); }
21681 NOARGS { int|sys||getpgrp(void); } 21681 NOARGS { int|sys||getpgrp(void); }
21782 STD { int|netbsd32||setpgid(int pid, int pgid); } 21782 STD { int|netbsd32||setpgid(int pid, int pgid); }
21883 COMPAT_50 MODULAR compat_netbsd32_50 \ 21883 COMPAT_50 MODULAR compat_netbsd32_50 \
219 { int|netbsd32||setitimer(int which, \ 219 { int|netbsd32||setitimer(int which, \
220 netbsd32_itimerval50p_t itv, \ 220 netbsd32_itimerval50p_t itv, \
221 netbsd32_itimerval50p_t oitv); } 221 netbsd32_itimerval50p_t oitv); }
22284 COMPAT_43 MODULAR compat_netbsd32_43 \ 22284 COMPAT_43 MODULAR compat_43 \
223 { int|sys||wait(void); } owait 223 { int|sys||wait(void); } owait
22485 COMPAT_12 MODULAR compat_netbsd32_12 \ 22485 COMPAT_12 MODULAR compat_netbsd32_12 \
225 { int|netbsd32||oswapon(netbsd32_charp name); } 225 { int|netbsd32||oswapon(netbsd32_charp name); }
22686 COMPAT_50 MODULAR compat_netbsd32_50 \ 22686 COMPAT_50 MODULAR compat_netbsd32_50 \
227 { int|netbsd32||getitimer(int which, \ 227 { int|netbsd32||getitimer(int which, \
228 netbsd32_itimerval50p_t itv); } 228 netbsd32_itimerval50p_t itv); }
22987 COMPAT_43 MODULAR compat_netbsd32_43 \ 22987 COMPAT_43 MODULAR compat_netbsd32_43 \
230 { int|netbsd32||ogethostname(netbsd32_charp hostname, \ 230 { int|netbsd32||ogethostname(netbsd32_charp hostname, \
231 u_int len); } 231 u_int len); }
23288 COMPAT_43 MODULAR compat_netbsd32_43 \ 23288 COMPAT_43 MODULAR compat_netbsd32_43 \
233 { int|netbsd32||osethostname(netbsd32_charp hostname, \ 233 { int|netbsd32||osethostname(netbsd32_charp hostname, \
234 u_int len); } 234 u_int len); }
23589 COMPAT_43 MODULAR compat_netbsd32_43 \ 23589 COMPAT_43 MODULAR compat_43 \
236 { int|sys||getdtablesize(void); } ogetdtablesize 236 { int|sys||getdtablesize(void); } ogetdtablesize
23790 STD { int|netbsd32||dup2(int from, int to); } 23790 STD { int|netbsd32||dup2(int from, int to); }
23891 UNIMPL getdopt 23891 UNIMPL getdopt
23992 STD { int|netbsd32||fcntl(int fd, int cmd, \ 23992 STD { int|netbsd32||fcntl(int fd, int cmd, \
240 ... netbsd32_voidp arg); } 240 ... netbsd32_voidp arg); }
24193 COMPAT_50 MODULAR compat_netbsd32_50 \ 24193 COMPAT_50 MODULAR compat_netbsd32_50 \
242 { int|netbsd32||select(int nd, netbsd32_fd_setp_t in, \ 242 { int|netbsd32||select(int nd, netbsd32_fd_setp_t in, \
243 netbsd32_fd_setp_t ou, netbsd32_fd_setp_t ex, \ 243 netbsd32_fd_setp_t ou, netbsd32_fd_setp_t ex, \
244 netbsd32_timeval50p_t tv); } 244 netbsd32_timeval50p_t tv); }
24594 UNIMPL setdopt 24594 UNIMPL setdopt
24695 STD { int|netbsd32||fsync(int fd); } 24695 STD { int|netbsd32||fsync(int fd); }
24796 STD { int|netbsd32||setpriority(int which, int who, \ 24796 STD { int|netbsd32||setpriority(int which, int who, \
248 int prio); } 248 int prio); }
@@ -333,49 +333,47 @@ @@ -333,49 +333,47 @@
333136 STD { int|netbsd32||mkdir(netbsd32_charp path, \ 333136 STD { int|netbsd32||mkdir(netbsd32_charp path, \
334 mode_t mode); } 334 mode_t mode); }
335137 STD { int|netbsd32||rmdir(netbsd32_charp path); } 335137 STD { int|netbsd32||rmdir(netbsd32_charp path); }
336138 COMPAT_50 MODULAR compat_netbsd32_50 \ 336138 COMPAT_50 MODULAR compat_netbsd32_50 \
337 { int|netbsd32||utimes(netbsd32_charp path, \ 337 { int|netbsd32||utimes(netbsd32_charp path, \
338 netbsd32_timeval50p_t tptr); } 338 netbsd32_timeval50p_t tptr); }
339139 OBSOL 4.2 sigreturn 339139 OBSOL 4.2 sigreturn
340140 COMPAT_50 MODULAR compat_netbsd32_50 \ 340140 COMPAT_50 MODULAR compat_netbsd32_50 \
341 { int|netbsd32||adjtime(netbsd32_timeval50p_t delta, \ 341 { int|netbsd32||adjtime(netbsd32_timeval50p_t delta, \
342 netbsd32_timeval50p_t olddelta); } 342 netbsd32_timeval50p_t olddelta); }
343141 COMPAT_43 MODULAR compat_netbsd32_43 \ 343141 COMPAT_43 MODULAR compat_netbsd32_43 \
344 { int|netbsd32||ogetpeername(int fdes, \ 344 { int|netbsd32||ogetpeername(int fdes, \
345 netbsd32_voidp asa, netbsd32_intp alen); } 345 netbsd32_voidp asa, netbsd32_intp alen); }
346142 COMPAT_43 MODULAR compat_netbsd32_43 \ 346142 COMPAT_43 MODULAR compat_43 \
347 { int32_t|sys||gethostid(void); } ogethostid 347 { int32_t|sys||gethostid(void); } ogethostid
348143 COMPAT_43 MODULAR compat_netbsd32_43 \ 348143 COMPAT_43 MODULAR compat_netbsd32_43 \
349 { int|netbsd32||sethostid(int32_t hostid); } 349 { int|netbsd32||sethostid(int32_t hostid); }
350144 COMPAT_43 MODULAR compat_netbsd32_43 \ 350144 COMPAT_43 MODULAR compat_netbsd32_43 \
351 { int|netbsd32||ogetrlimit(int which, \ 351 { int|netbsd32||ogetrlimit(int which, \
352 netbsd32_orlimitp_t rlp); } 352 netbsd32_orlimitp_t rlp); }
353145 COMPAT_43 MODULAR compat_netbsd32_43 \ 353145 COMPAT_43 MODULAR compat_netbsd32_43 \
354 { int|netbsd32||osetrlimit(int which, \ 354 { int|netbsd32||osetrlimit(int which, \
355 netbsd32_orlimitp_t rlp); } 355 netbsd32_orlimitp_t rlp); }
356146 COMPAT_43 MODULAR compat_netbsd32_43 \ 356146 COMPAT_43 MODULAR compat_netbsd32_43 \
357 { int|netbsd32||killpg(int pgid, int signum); } 357 { int|netbsd32||killpg(int pgid, int signum); }
358147 NOARGS { int|sys||setsid(void); } 358147 NOARGS { int|sys||setsid(void); }
359#if defined(QUOTA) || !defined(_KERNEL_OPT) 359#if defined(QUOTA) || !defined(_KERNEL_OPT)
360148 COMPAT_50 MODULAR compat_netbsd32_50 \ 360148 COMPAT_50 MODULAR compat_netbsd32_50 \
361 { int|netbsd32||quotactl(netbsd32_charp path, int cmd, \ 361 { int|netbsd32||quotactl(netbsd32_charp path, int cmd, \
362 int uid, netbsd32_voidp arg); } 362 int uid, netbsd32_voidp arg); }
363149 COMPAT_43 MODULAR compat_netbsd32_43 \ 
364 { int|sys||quota(void); } oquota 
365#else 363#else
366148 EXCL compat_netbsd32_quotactl 364148 EXCL compat_netbsd32_quotactl
367149 EXCL compat_netbsd32_quota 
368#endif 365#endif
 366149 EXCL compat_netbsd32_quota
369150 COMPAT_43 MODULAR compat_netbsd32_43 \ 367150 COMPAT_43 MODULAR compat_netbsd32_43 \
370 { int|netbsd32||ogetsockname(int fdec, \ 368 { int|netbsd32||ogetsockname(int fdec, \
371 netbsd32_voidp asa, netbsd32_intp alen); } 369 netbsd32_voidp asa, netbsd32_intp alen); }
372 370
373; Syscalls 151-180 inclusive are reserved for vendor-specific 371; Syscalls 151-180 inclusive are reserved for vendor-specific
374; system calls. (This includes various calls added for compatibity 372; system calls. (This includes various calls added for compatibity
375; with other Unix variants.) 373; with other Unix variants.)
376; Some of these calls are now supported by BSD... 374; Some of these calls are now supported by BSD...
377151 UNIMPL 375151 UNIMPL
378152 UNIMPL 376152 UNIMPL
379153 UNIMPL 377153 UNIMPL
380154 UNIMPL 378154 UNIMPL
381155 STD MODULAR compat_netbsd32_nfssrv \ 379155 STD MODULAR compat_netbsd32_nfssrv \