Module Name:    src
Committed By:   pgoyette
Date:           Mon Sep 10 22:50:52 UTC 2018

Modified Files:
        src/sys/compat/netbsd32 [pgoyette-compat]: netbsd32_compat_20.c
            netbsd32_compat_50.c netbsd32_compat_60.c netbsd32_mod.c
            netbsd32_module.c syscalls.master
        src/sys/modules/compat_netbsd32 [pgoyette-compat]: Makefile
        src/sys/sys [pgoyette-compat]: module.h
Added Files:
        src/sys/compat/netbsd32 [pgoyette-compat]: netbsd32_compat_80.c
        src/sys/modules/compat_netbsd32_50 [pgoyette-compat]: Makefile
        src/sys/modules/compat_netbsd32_60 [pgoyette-compat]: Makefile
        src/sys/modules/compat_netbsd32_80 [pgoyette-compat]: Makefile

Log Message:
More work on splitting the compat_netbsd32 module


To generate a diff of this commit:
cvs rdiff -u -r1.36.10.2 -r1.36.10.3 \
    src/sys/compat/netbsd32/netbsd32_compat_20.c
cvs rdiff -u -r1.32 -r1.32.16.1 src/sys/compat/netbsd32/netbsd32_compat_50.c
cvs rdiff -u -r1.3 -r1.3.2.1 src/sys/compat/netbsd32/netbsd32_compat_60.c
cvs rdiff -u -r0 -r1.1.2.1 src/sys/compat/netbsd32/netbsd32_compat_80.c
cvs rdiff -u -r1.13.16.3 -r1.13.16.4 src/sys/compat/netbsd32/netbsd32_mod.c
cvs rdiff -u -r1.6.2.3 -r1.6.2.4 src/sys/compat/netbsd32/netbsd32_module.c
cvs rdiff -u -r1.120.2.5 -r1.120.2.6 src/sys/compat/netbsd32/syscalls.master
cvs rdiff -u -r1.20.12.3 -r1.20.12.4 src/sys/modules/compat_netbsd32/Makefile
cvs rdiff -u -r0 -r1.1.2.1 src/sys/modules/compat_netbsd32_50/Makefile
cvs rdiff -u -r0 -r1.1.2.1 src/sys/modules/compat_netbsd32_60/Makefile
cvs rdiff -u -r0 -r1.1.2.1 src/sys/modules/compat_netbsd32_80/Makefile
cvs rdiff -u -r1.41.14.11 -r1.41.14.12 src/sys/sys/module.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/compat/netbsd32/netbsd32_compat_20.c
diff -u src/sys/compat/netbsd32/netbsd32_compat_20.c:1.36.10.2 src/sys/compat/netbsd32/netbsd32_compat_20.c:1.36.10.3
--- src/sys/compat/netbsd32/netbsd32_compat_20.c:1.36.10.2	Mon Sep 10 10:49:09 2018
+++ src/sys/compat/netbsd32/netbsd32_compat_20.c	Mon Sep 10 22:50:51 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_compat_20.c,v 1.36.10.2 2018/09/10 10:49:09 pgoyette Exp $	*/
+/*	$NetBSD: netbsd32_compat_20.c,v 1.36.10.3 2018/09/10 22:50:51 pgoyette Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_20.c,v 1.36.10.2 2018/09/10 10:49:09 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_20.c,v 1.36.10.3 2018/09/10 22:50:51 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -220,6 +220,12 @@ compat_20_netbsd32_fhstatfs(struct lwp *
 }
 
 static struct syscall_package compat_netbsd32_20_syscalls[] = {
+	{ NETBSD32_SYS_statfs, 0,
+	    (sy_call_t *)compat_20_netbsd32_statfs },
+	{ NETBSD32_SYS_fstatfs, 0,
+	    (sy_call_t *)compat_20_netbsd32_fstatfs },
+	{ NETBSD32_SYS_fhstatfs, 0,
+	    (sy_call_t *)compat_20_netbsd32_fhstatfs },
 	{ NETBSD32_SYS_getfsstat, 0,
 	    (sy_call_t *)compat_20_netbsd32_getfsstat },
 	{ 0, 0, NULL }

Index: src/sys/compat/netbsd32/netbsd32_compat_50.c
diff -u src/sys/compat/netbsd32/netbsd32_compat_50.c:1.32 src/sys/compat/netbsd32/netbsd32_compat_50.c:1.32.16.1
--- src/sys/compat/netbsd32/netbsd32_compat_50.c:1.32	Thu Dec  3 10:38:21 2015
+++ src/sys/compat/netbsd32/netbsd32_compat_50.c	Mon Sep 10 22:50:51 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_compat_50.c,v 1.32 2015/12/03 10:38:21 pgoyette Exp $	*/
+/*	$NetBSD: netbsd32_compat_50.c,v 1.32.16.1 2018/09/10 22:50:51 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_50.c,v 1.32 2015/12/03 10:38:21 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_50.c,v 1.32.16.1 2018/09/10 22:50:51 pgoyette Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -44,6 +44,7 @@ __KERNEL_RCSID(0, "$NetBSD: netbsd32_com
 
 #include <sys/param.h>
 #include <sys/systm.h>
+#include <sys/module.h>
 #include <sys/mount.h>
 #include <sys/socket.h>
 #include <sys/socketvar.h>
@@ -65,6 +66,7 @@ __KERNEL_RCSID(0, "$NetBSD: netbsd32_com
 #include <sys/vfs_syscalls.h>
 
 #include <compat/netbsd32/netbsd32.h>
+#include <compat/netbsd32/netbsd32_syscallvar.h>
 #include <compat/netbsd32/netbsd32_syscallargs.h>
 #include <compat/netbsd32/netbsd32_conv.h>
 #include <compat/sys/mount.h>
@@ -924,4 +926,79 @@ compat_50_netbsd32_quotactl(struct lwp *
 	return (compat_50_sys_quotactl(l, &ua, retval));
 }
 
+static struct syscall_package compat_netbsd32_50_syscalls[] = {
+	{ NETBSD32_SYS_mknod, 0,
+	    (sy_call_t *)compat_50_netbsd32_mknod }, 
+	{ NETBSD32_SYS_select, 0,
+	    (sy_call_t *)compat_50_netbsd32_select }, 
+	{ NETBSD32_SYS_gettimeofday, 0,
+	    (sy_call_t *)compat_50_netbsd32_gettimeofday }, 
+	{ NETBSD32_SYS_settimeofday, 0,
+	    (sy_call_t *)compat_50_netbsd32_settimeofday }, 
+	{ NETBSD32_SYS_utimes, 0,
+	    (sy_call_t *)compat_50_netbsd32_utimes }, 
+	{ NETBSD32_SYS_futimes, 0,
+	    (sy_call_t *)compat_50_netbsd32_futimes }, 
+	{ NETBSD32_SYS_adjtime, 0,
+	    (sy_call_t *)compat_50_netbsd32_adjtime }, 
+	{ NETBSD32_SYS_clock_gettime, 0,
+	    (sy_call_t *)compat_50_netbsd32_clock_gettime }, 
+	{ NETBSD32_SYS_clock_settime, 0,
+	    (sy_call_t *)compat_50_netbsd32_clock_settime }, 
+	{ NETBSD32_SYS_clock_getres, 0,
+	    (sy_call_t *)compat_50_netbsd32_clock_getres }, 
+	{ NETBSD32_SYS_timer_settime, 0,
+	    (sy_call_t *)compat_50_netbsd32_timer_settime }, 
+	{ NETBSD32_SYS_timer_gettime, 0,
+	    (sy_call_t *)compat_50_netbsd32_timer_gettime }, 
+	{ NETBSD32_SYS_nanosleep, 0,
+	    (sy_call_t *)compat_50_netbsd32_nanosleep }, 
+	{ NETBSD32_SYS_sigtimedwait, 0,
+	    (sy_call_t *)compat_50_netbsd32___sigtimedwait }, 
+	{ NETBSD32_SYS_lutimes, 0,
+	    (sy_call_t *)compat_50_netbsd32_lutimes }, 
+	{ NETBSD32_SYS__lwp_park, 0,
+	    (sy_call_t *)compat_50_netbsd32__lwp_park }, 
+	{ NETBSD32_SYS_kevent, 0,
+	    (sy_call_t *)compat_50_netbsd32_kevent }, 
+	{ NETBSD32_SYS_pselect, 0,
+	    (sy_call_t *)compat_50_netbsd32_pselect }, 
+	{ NETBSD32_SYS_pollts, 0,
+	    (sy_call_t *)compat_50_netbsd32_pollts }, 
+	{ NETBSD32_SYS___stat30, 0,
+	    (sy_call_t *)compat_50_netbsd32___stat30 }, 
+	{ NETBSD32_SYS___lstat30, 0,
+	    (sy_call_t *)compat_50_netbsd32___lstat30 }, 
+	{ NETBSD32_SYS___fstat30, 0,
+	    (sy_call_t *)compat_50_netbsd32___fstat30 }, 
+	{ NETBSD32_SYS___fhstat40, 0,
+	    (sy_call_t *)compat_50_netbsd32___fhstat40 }, 
+	{ NETBSD32_SYS_wait4, 0,
+	    (sy_call_t *)compat_50_netbsd32_wait4 }, 
+	{ NETBSD32_SYS_getrusage, 0,
+	    (sy_call_t *)compat_50_netbsd32_getrusage }, 
+	{ NETBSD32_SYS_setitimer, 0,
+	    (sy_call_t *)compat_50_netbsd32_setitimer }, 
+	{ NETBSD32_SYS_quotactl, 0,
+	    (sy_call_t *)compat_50_netbsd32_quotactl }, 
+	{ 0, 0, NULL }
+}; 
+
+MODULE(MODULE_CLASS_EXEC, compat_netbsd32_50, "compat_netbsd32,compat_50");
+
+static int
+compat_netbsd32_50_modcmd(modcmd_t cmd, void *arg)
+{
+
+	switch (cmd) {
+	MODULE_CMD_INIT:
+                return syscall_establish(NULL, compat_netbsd32_50_syscalls);
+
+	MODULE_CMD_FINI:
+                return syscall_disestablish(NULL, compat_netbsd32_50_syscalls);
+
+	default:
+		return ENOTTY;
+	}
+}
 #endif /* COMPAT_50 */

Index: src/sys/compat/netbsd32/netbsd32_compat_60.c
diff -u src/sys/compat/netbsd32/netbsd32_compat_60.c:1.3 src/sys/compat/netbsd32/netbsd32_compat_60.c:1.3.2.1
--- src/sys/compat/netbsd32/netbsd32_compat_60.c:1.3	Wed Dec  6 04:12:25 2017
+++ src/sys/compat/netbsd32/netbsd32_compat_60.c	Mon Sep 10 22:50:51 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_compat_60.c,v 1.3 2017/12/06 04:12:25 christos Exp $	*/
+/*	$NetBSD: netbsd32_compat_60.c,v 1.3.2.1 2018/09/10 22:50:51 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -36,21 +36,22 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_60.c,v 1.3 2017/12/06 04:12:25 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_60.c,v 1.3.2.1 2018/09/10 22:50:51 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
+#include <sys/module.h>
 #include <sys/time.h>
 #include <sys/dirent.h>
 #include <sys/lwp.h>
 #include <sys/syscallargs.h>
 
 #include <compat/netbsd32/netbsd32.h>
+#include <compat/netbsd32/netbsd32_syscallvar.h>
 #include <compat/netbsd32/netbsd32_syscallargs.h>
 #include <compat/netbsd32/netbsd32_conv.h>
 
 
-
 int
 compat_60_netbsd32__lwp_park(struct lwp *l,
     const struct compat_60_netbsd32__lwp_park_args *uap, register_t *retval)
@@ -85,3 +86,28 @@ compat_60_netbsd32__lwp_park(struct lwp 
 	return lwp_park(CLOCK_REALTIME, TIMER_ABSTIME, tsp,
 	    SCARG_P32(uap, hint));
 }
+
+static struct syscall_package compat_netbsd32_60_syscalls[] = {
+	{ NETBSD32_SYS__lwp_park, 0,
+	    (sy_call_t *)compat_60_netbsd32__lwp_park },
+	{ 0, 0, NULL }
+}; 
+
+
+MODULE(MODULE_CLASS_EXEC, compat_netbsd32_60, "compat_netbsd,compat_60");
+
+static int
+compat_netbsd32_60_modcmd(modcmd_t CMD, void *arg)
+{
+
+	switch (cmd) {
+	case MODULE_CMD_INIT:
+		return syscall_establish(NULL, compat_netbsd32_60_syscalls);
+
+	case MODULE_CMD_FINI:
+		return syscall_disestablish(NULL, compat_netbsd32_60_syscalls);
+
+	default:
+		return ENOTTY;
+	}
+}

Index: src/sys/compat/netbsd32/netbsd32_mod.c
diff -u src/sys/compat/netbsd32/netbsd32_mod.c:1.13.16.3 src/sys/compat/netbsd32/netbsd32_mod.c:1.13.16.4
--- src/sys/compat/netbsd32/netbsd32_mod.c:1.13.16.3	Sun Sep  9 11:51:48 2018
+++ src/sys/compat/netbsd32/netbsd32_mod.c	Mon Sep 10 22:50:51 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_mod.c,v 1.13.16.3 2018/09/09 11:51:48 pgoyette Exp $	*/
+/*	$NetBSD: netbsd32_mod.c,v 1.13.16.4 2018/09/10 22:50:51 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_mod.c,v 1.13.16.3 2018/09/09 11:51:48 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_mod.c,v 1.13.16.4 2018/09/10 22:50:51 pgoyette Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_execfmt.h"
@@ -109,14 +109,17 @@ compat_netbsd32_modcmd(modcmd_t cmd, voi
 		error = exec_add(netbsd32_execsw,
 		    __arraycount(netbsd32_execsw));
 		vec_compat32_50_rnd_ioctl = compat32_50_rnd_ioctl;
+		vec_compat32_80_modctl = compat32_80_modctl_compat_stub;
 		if (error != 0) {
 			vec_compat32_50_rnd_ioctl = (void *)enosys;
+			vec_compat32_80_modctl = (void *)enosys;
 			netbsd32_sysctl_fini();
 		}
 		return error;
 
 	case MODULE_CMD_FINI:
 		vec_compat32_50_rnd_ioctl = (void *)enosys;
+		vec_compat32_80_modctl = (void *)enosys;
 		error = exec_remove(netbsd32_execsw,
 		    __arraycount(netbsd32_execsw));
 		if (error == 0)

Index: src/sys/compat/netbsd32/netbsd32_module.c
diff -u src/sys/compat/netbsd32/netbsd32_module.c:1.6.2.3 src/sys/compat/netbsd32/netbsd32_module.c:1.6.2.4
--- src/sys/compat/netbsd32/netbsd32_module.c:1.6.2.3	Fri Sep  7 23:32:30 2018
+++ src/sys/compat/netbsd32/netbsd32_module.c	Mon Sep 10 22:50:51 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_module.c,v 1.6.2.3 2018/09/07 23:32:30 pgoyette Exp $	*/
+/*	$NetBSD: netbsd32_module.c,v 1.6.2.4 2018/09/10 22:50:51 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_module.c,v 1.6.2.3 2018/09/07 23:32:30 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_module.c,v 1.6.2.4 2018/09/10 22:50:51 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/dirent.h>
@@ -42,104 +42,6 @@ __KERNEL_RCSID(0, "$NetBSD: netbsd32_mod
 #include <compat/netbsd32/netbsd32_syscallargs.h>
 #include <compat/netbsd32/netbsd32_conv.h>
 
-#ifdef COMPAT_80
-static int
-modctl32_handle_ostat(int cmd, struct netbsd32_iovec *iov, void *arg)
-{
-	omodstat_t *oms, *omso;
-	modinfo_t *mi;
-	module_t *mod;
-	vaddr_t addr;
-	size_t size;
-	size_t omslen;
-	size_t used;
-	int error;
-	int omscnt;
-	bool stataddr;
-	const char *suffix = "...";
-
-	if (cmd != MODCTL_OSTAT)
-		return EINVAL;
-
-	/* If not privileged, don't expose kernel addresses. */
-	error = kauth_authorize_system(kauth_cred_get(), KAUTH_SYSTEM_MODULE,
-	    0, (void *)(uintptr_t)MODCTL_STAT, NULL, NULL);
-	stataddr = (error == 0);
-
-	kernconfig_lock();
-	omscnt = 0;
-	TAILQ_FOREACH(mod, &module_list, mod_chain) {
-		omscnt++;
-		mi = mod->mod_info;
-	}
-	TAILQ_FOREACH(mod, &module_builtins, mod_chain) {
-		omscnt++;
-		mi = mod->mod_info;
-	}
-	omslen = omscnt * sizeof(omodstat_t);
-	omso = kmem_zalloc(omslen, KM_SLEEP);
-	oms = omso;
-	TAILQ_FOREACH(mod, &module_list, mod_chain) {
-		mi = mod->mod_info;
-		strlcpy(oms->oms_name, mi->mi_name, sizeof(oms->oms_name));
-		if (mi->mi_required != NULL) {
-			used = strlcpy(oms->oms_required, mi->mi_required,
-			    sizeof(oms->oms_required));
-			if (used >= sizeof(oms->oms_required)) { 
-				oms->oms_required[sizeof(oms->oms_required) -
-				    strlen(suffix) - 1] = '\0';
-				strlcat(oms->oms_required, suffix,
-				    sizeof(oms->oms_required));
-                        }
-		}
-		if (mod->mod_kobj != NULL && stataddr) {
-			kobj_stat(mod->mod_kobj, &addr, &size);
-			oms->oms_addr = addr;
-			oms->oms_size = size;
-		}
-		oms->oms_class = mi->mi_class;
-		oms->oms_refcnt = mod->mod_refcnt;
-		oms->oms_source = mod->mod_source;
-		oms->oms_flags = mod->mod_flags;
-		oms++;
-	}
-	TAILQ_FOREACH(mod, &module_builtins, mod_chain) {
-		mi = mod->mod_info;
-		strlcpy(oms->oms_name, mi->mi_name, sizeof(oms->oms_name));
-		if (mi->mi_required != NULL) {
-			used = strlcpy(oms->oms_required, mi->mi_required,
-			    sizeof(oms->oms_required));
-			if (used >= sizeof(oms->oms_required)) { 
-				oms->oms_required[sizeof(oms->oms_required) -
-				    strlen(suffix) - 1] = '\0';
-				strlcat(oms->oms_required, suffix,
-				    sizeof(oms->oms_required));
-                        }
-		}
-		if (mod->mod_kobj != NULL && stataddr) {
-			kobj_stat(mod->mod_kobj, &addr, &size);
-			oms->oms_addr = addr;
-			oms->oms_size = size;
-		}
-		oms->oms_class = mi->mi_class;
-		oms->oms_refcnt = -1;
-		KASSERT(mod->mod_source == MODULE_SOURCE_KERNEL);
-		oms->oms_source = mod->mod_source;
-		oms++;
-	}
-	kernconfig_unlock();
-	error = copyout(omso, NETBSD32PTR64(iov->iov_base),
-	    uimin(omslen - sizeof(modstat_t), iov->iov_len));
-	kmem_free(omso, omslen);
-	if (error == 0) {
-		iov->iov_len = omslen - sizeof(modstat_t);
-		error = copyout(iov, arg, sizeof(*iov));
-	}
-
-	return error;
-}
-#endif	/* COMPAT_80 */
-
 static int
 modctl32_handle_stat(struct netbsd32_iovec *iov, void *arg)
 {
@@ -290,6 +192,13 @@ modctl32_handle_stat(struct netbsd32_iov
 	return error;
 }
 
+int
+compat32_80_modctl_compat_stub(struct lwp *lwp,
+    const struct netbsd32_modctl_args *uap, register_t *result)
+{
+
+	return EPASSTHROUGH;
+}
 
 int
 netbsd32_modctl(struct lwp *lwp, const struct netbsd32_modctl_args *uap,
@@ -310,6 +219,10 @@ netbsd32_modctl(struct lwp *lwp, const s
 
 	arg = SCARG_P32(uap, arg);
 
+	error = (*vec_netbsd32_modctl_compat)(lwp, uap, result);
+	if (error != EPASSTHROUGH)
+		return error;
+
 	switch (SCARG(uap, cmd)) {
 	case MODCTL_LOAD:
 		error = copyin(arg, &ml, sizeof(ml));
@@ -326,16 +239,6 @@ netbsd32_modctl(struct lwp *lwp, const s
 		}
 		break;
 
-#ifdef COMPAT_80
-	case MODCTL_OSTAT:
-		error = copyin(arg, &iov, sizeof(iov));
-		if (error != 0) {
-			break;
-		}
-		error = modctl32_handle_ostat(SCARG(uap, cmd), &iov, arg);
-		break;
-#endif
-
 	case MODCTL_STAT:
 		error = copyin(arg, &iov, sizeof(iov));
 		if (error != 0) {

Index: src/sys/compat/netbsd32/syscalls.master
diff -u src/sys/compat/netbsd32/syscalls.master:1.120.2.5 src/sys/compat/netbsd32/syscalls.master:1.120.2.6
--- src/sys/compat/netbsd32/syscalls.master:1.120.2.5	Mon Sep 10 10:49:09 2018
+++ src/sys/compat/netbsd32/syscalls.master	Mon Sep 10 22:50:51 2018
@@ -1,4 +1,4 @@
-	$NetBSD: syscalls.master,v 1.120.2.5 2018/09/10 10:49:09 pgoyette Exp $
+	$NetBSD: syscalls.master,v 1.120.2.6 2018/09/10 22:50:51 pgoyette Exp $
 
 ;	from: NetBSD: syscalls.master,v 1.81 1998/07/05 08:49:50 jonathan Exp
 ;	@(#)syscalls.master	8.2 (Berkeley) 1/13/94
@@ -70,7 +70,8 @@
 5	STD		{ int|netbsd32||open(netbsd32_charp path, int flags, \
 			    ... mode_t mode); }
 6	STD		{ int|netbsd32||close(int fd); }
-7	COMPAT_50	{ int|netbsd32||wait4(int pid, netbsd32_intp status, \
+7	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||wait4(int pid, netbsd32_intp status, \
 			    int options, netbsd32_rusage50p_t rusage); }
 8	COMPAT_43	{ int|netbsd32||ocreat(netbsd32_charp path, \
 			    mode_t mode); }
@@ -80,13 +81,14 @@
 11	OBSOL		execv
 12	STD		{ int|netbsd32||chdir(netbsd32_charp path); }
 13	STD		{ int|netbsd32||fchdir(int fd); }
-14	COMPAT_50	{ int|netbsd32||mknod(netbsd32_charp path, mode_t mode, \
+14	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||mknod(netbsd32_charp path, mode_t mode, \
 			    uint32_t dev); }
 15	STD		{ int|netbsd32||chmod(netbsd32_charp path, mode_t mode); }
 16	STD		{ int|netbsd32||chown(netbsd32_charp path, uid_t uid, \
 			    gid_t gid); }
 17	STD		{ int|netbsd32||break(netbsd32_charp nsize); }
-18	COMPAT_20 MODULAR compat_netbsd32_20	\
+18	STD MODULAR compat_netbsd32_20	\
 			{ int|netbsd32||getfsstat(netbsd32_statfsp_t buf, \
 			    netbsd32_long bufsize, int flags); }
 19	COMPAT_43	{ netbsd32_long|netbsd32||olseek(int fd, \
@@ -142,7 +144,7 @@
 			    netbsd32_sigactionp_t nsa, \
 			    netbsd32_sigactionp_t osa); }
 47	NOARGS 		{ gid_t|sys||getgid(void); }
-48	COMPAT_13 MODULAR compat_netbsd32_13	\
+48	STD MODULAR compat_netbsd32_13	\
 			{ int|netbsd32||sigprocmask(int how, \
 			    int mask); } sigprocmask13
 49	STD		{ int|netbsd32||__getlogin(netbsd32_charp namebuf, \
@@ -150,13 +152,13 @@
 50	STD		{ int|netbsd32||setlogin(netbsd32_charp namebuf); }
 51	STD		{ int|netbsd32||acct(netbsd32_charp path); }
 52	COMPAT_13 	{ int|sys||sigpending(void); } sigpending13
-53	COMPAT_13 MODULAR compat_netbsd32_13	\
+53	STD MODULAR compat_netbsd32_13	\
 			{ int|netbsd32||sigaltstack13( \
 			    netbsd32_sigaltstack13p_t nss, \
 			    netbsd32_sigaltstack13p_t oss); }
 54	STD		{ int|netbsd32||ioctl(int fd, netbsd32_u_long com, \
 			    ... netbsd32_voidp data); }
-55	COMPAT_12 MODULAR compat_netbsd32_12	\
+55	STD MODULAR compat_netbsd32_12	\
 			{ int|netbsd32||reboot(int opt); }
 56	STD		{ int|netbsd32||revoke(netbsd32_charp path); }
 57	STD		{ int|netbsd32||symlink(netbsd32_charp path, \
@@ -172,7 +174,7 @@
 			    netbsd32_charp where, netbsd32_intp size, \
 			    int arg); }
 64	COMPAT_43	{ int|sys||getpagesize(void); } ogetpagesize
-65	COMPAT_12 MODULAR compat_netbsd32_12	\
+65	STD MODULAR compat_netbsd32_12	\
 			{ int|netbsd32||msync(netbsd32_voidp addr, \
 			    netbsd32_size_t len); }
 ; XXX COMPAT_??? for 4.4BSD-compatible vfork(2)?
@@ -201,13 +203,15 @@
 			    netbsd32_gid_tp gidset); }
 81	NOARGS 		{ int|sys||getpgrp(void); }
 82	STD		{ int|netbsd32||setpgid(int pid, int pgid); }
-83	COMPAT_50	{ int|netbsd32||setitimer(int which, \
+83	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||setitimer(int which, \
 			    netbsd32_itimerval50p_t itv, \
 			    netbsd32_itimerval50p_t oitv); }
 84	COMPAT_43	{ int|sys||wait(void); } owait
-85	COMPAT_12 MODULAR compat_netbsd32_12	\
+85	STD MODULAR compat_netbsd32_12	\
 			{ int|netbsd32||oswapon(netbsd32_charp name); }
-86	COMPAT_50	{ int|netbsd32||getitimer(int which, \
+86	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||getitimer(int which, \
 			    netbsd32_itimerval50p_t itv); }
 87	COMPAT_43	{ int|netbsd32||ogethostname(netbsd32_charp hostname, \
 			    u_int len); }
@@ -218,14 +222,15 @@
 91	UNIMPL		getdopt
 92	STD		{ int|netbsd32||fcntl(int fd, int cmd, \
 			    ... netbsd32_voidp arg); }
-93	COMPAT_50	{ int|netbsd32||select(int nd, netbsd32_fd_setp_t in, \
+93	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||select(int nd, netbsd32_fd_setp_t in, \
 			    netbsd32_fd_setp_t ou, netbsd32_fd_setp_t ex, \
 			    netbsd32_timeval50p_t tv); }
 94	UNIMPL		setdopt
 95	STD		{ int|netbsd32||fsync(int fd); }
 96	STD		{ int|netbsd32||setpriority(int which, int who, \
 			    int prio); }
-97	COMPAT_30 MODULAR compat_netbsd32_30	\
+97	STD MODULAR compat_netbsd32_30	\
 			{ int|netbsd32||socket(int domain, int type, \
 			    int protocol); }
 98	STD		{ int|netbsd32||connect(int s, \
@@ -249,7 +254,7 @@
 			    netbsd32_sigvecp_t nsv, netbsd32_sigvecp_t osv); }
 109	COMPAT_43	{ int|netbsd32||sigblock(int mask); }
 110	COMPAT_43	{ int|netbsd32||sigsetmask(int mask); }
-111	COMPAT_13 MODULAR compat_netbsd32_13	\
+111	STD MODULAR compat_netbsd32_13	\
 			{ int|netbsd32||sigsuspend(int mask); } sigsuspend13
 112	COMPAT_43	{ int|netbsd32||osigstack(netbsd32_sigstackp_t nss, \
 			    netbsd32_sigstackp_t oss); }
@@ -258,9 +263,11 @@
 114	COMPAT_43	{ int|netbsd32||osendmsg(int s, netbsd32_voidp msg, \
 			    int flags); }
 115	OBSOL		vtrace
-116	COMPAT_50	{ int|netbsd32||gettimeofday(netbsd32_timeval50p_t tp, \
+116	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||gettimeofday(netbsd32_timeval50p_t tp, \
 			    netbsd32_timezonep_t tzp); }
-117	COMPAT_50	{ int|netbsd32||getrusage(int who, \
+117	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||getrusage(int who, \
 			    netbsd32_rusage50p_t rusage); }
 118	STD		{ int|netbsd32||getsockopt(int s, int level, int name, \
 			    netbsd32_voidp val, netbsd32_intp avalsize); }
@@ -269,7 +276,8 @@
 			    netbsd32_iovecp_t iovp, int iovcnt); }
 121	STD		{ netbsd32_ssize_t|netbsd32||writev(int fd, \
 			    netbsd32_iovecp_t iovp, int iovcnt); }
-122	COMPAT_50	{ int|netbsd32||settimeofday(netbsd32_timeval50p_t tv, \
+122	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||settimeofday(netbsd32_timeval50p_t tv, \
 			    netbsd32_timezonep_t tzp); }
 123	STD		{ int|netbsd32||fchown(int fd, uid_t uid, gid_t gid); }
 124	STD		{ int|netbsd32||fchmod(int fd, mode_t mode); }
@@ -296,10 +304,12 @@
 136	STD		{ int|netbsd32||mkdir(netbsd32_charp path, \
 			    mode_t mode); }
 137	STD		{ int|netbsd32||rmdir(netbsd32_charp path); }
-138	COMPAT_50	{ int|netbsd32||utimes(netbsd32_charp path, \
+138	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||utimes(netbsd32_charp path, \
 			    netbsd32_timeval50p_t tptr); }
 139	OBSOL		4.2 sigreturn
-140	COMPAT_50	{ int|netbsd32||adjtime(netbsd32_timeval50p_t delta, \
+140	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||adjtime(netbsd32_timeval50p_t delta, \
 			    netbsd32_timeval50p_t olddelta); }
 141	COMPAT_43	{ int|netbsd32||ogetpeername(int fdes, \
 			    netbsd32_voidp asa, netbsd32_intp alen); }
@@ -311,7 +321,8 @@
 			    netbsd32_orlimitp_t rlp); }
 146	COMPAT_43	{ int|netbsd32||killpg(int pgid, int signum); }
 147	NOARGS		{ int|sys||setsid(void); }
-148	COMPAT_50	{ int|netbsd32||quotactl(netbsd32_charp path, int cmd, \
+148	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||quotactl(netbsd32_charp path, int cmd, \
 			    int uid, netbsd32_voidp arg); }
 149	COMPAT_43	{ int|sys||quota(void); } oquota
 150	COMPAT_43	{ int|netbsd32||ogetsockname(int fdec, \
@@ -330,34 +341,36 @@
 156	COMPAT_43	{ int|netbsd32||ogetdirentries(int fd, \
 			    netbsd32_charp buf, u_int count, \
 			    netbsd32_longp basep); }
-157	COMPAT_20	{ int|netbsd32||statfs(netbsd32_charp path, \
+157	STD MODULAR compat_netbsd32_20	\
+			{ int|netbsd32||statfs(netbsd32_charp path, \
 			    netbsd32_statfsp_t buf); }
-158	COMPAT_20	{ int|netbsd32||fstatfs(int fd, \
+158	STD MODULAR compat_netbsd32_20	\
+			{ int|netbsd32||fstatfs(int fd, \
 			    netbsd32_statfsp_t buf); }
 159	UNIMPL
 160	UNIMPL
-161	COMPAT_30 MODULAR compat_netbsd32_30	\
+161	STD MODULAR compat_netbsd32_30	\
 			{ int|netbsd32||getfh(netbsd32_charp fname, \
 			    netbsd32_compat_30_fhandlep_t fhp); }
-162	COMPAT_09 modular compat_netbsd32_09	\
+162	STD MODULAR compat_netbsd32_09	\
 			{ int|netbsd32||ogetdomainname( \
 			    netbsd32_charp domainname, int len); }
-163	COMPAT_09 modular compat_netbsd32_09	\
+163	STD MODULAR compat_netbsd32_09	\
 			{ int|netbsd32||osetdomainname( \
 			    netbsd32_charp domainname, int len); }
-164	COMPAT_09 modular compat_netbsd32_09	\
+164	STD MODULAR compat_netbsd32_09	\
 			{ int|netbsd32||uname(netbsd32_outsnamep_t name); }
 165	STD		{ int|netbsd32||sysarch(int op, netbsd32_voidp parms); }
 166	UNIMPL
 167	UNIMPL
 168	UNIMPL
-169	COMPAT_10 MODULAR compat_netbsd32_sysvipc	\
+169	STD MODULAR compat_netbsd32_sysvipc	\
 			{ int|netbsd32||semsys(int which, int a2, int a3, \
 			    int a4, int a5); } osemsys
-170	COMPAT_10 MODULAR compat_netbsd32_sysvipc	\
+170	STD MODULAR compat_netbsd32_sysvipc	\
 			{ int|netbsd32||msgsys(int which, int a2, int a3, \
 			    int a4, int a5, int a6); } omsgsys
-171	COMPAT_10 MODULAR compat_netbsd32_sysvipc	\
+171	STD MODULAR compat_netbsd32_sysvipc	\
 			{ int|netbsd32||shmsys(int which, int a2, int a3, \
 			    int a4); } oshmsys
 172	UNIMPL
@@ -388,12 +401,12 @@
 185	EXCL		netbsd32_lfs_markv
 186	EXCL		netbsd32_lfs_segclean
 187	EXCL		netbsd32_lfs_segwait
-188	COMPAT_12 MODULAR compat_netbsd32_12	\
+188	STD MODULAR compat_netbsd32_12	\
 			{ int|netbsd32||stat12(netbsd32_charp path, \
 			    netbsd32_stat12p_t ub); }
-189	COMPAT_12 MODULAR compat_netbsd32_12	\
+189	STD MODULAR compat_netbsd32_12	\
 			{ int|netbsd32||fstat12(int fd, netbsd32_stat12p_t sb); }
-190	COMPAT_12 MODULAR compat_netbsd32_12	\
+190	STD MODULAR compat_netbsd32_12	\
 			{ int|netbsd32||lstat12(netbsd32_charp path, \
 			    netbsd32_stat12p_t ub); }
 191	STD		{ netbsd32_long|netbsd32||pathconf(netbsd32_charp path, \
@@ -428,7 +441,8 @@
 204	STD		{ int|netbsd32||munlock(netbsd32_voidp addr, \
 			    netbsd32_size_t len); }
 205	STD		{ int|netbsd32||undelete(netbsd32_charp path); }
-206	COMPAT_50	{ int|netbsd32||futimes(int fd, \
+206	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||futimes(int fd, \
 			    netbsd32_timeval50p_t tptr); }
 207	STD		{ int|netbsd32||getpgid(pid_t pid); }
 208	STD		{ int|netbsd32||reboot(int opt, \
@@ -447,7 +461,7 @@
 218	UNIMPL
 219	UNIMPL
 ; System calls 220-300 are reserved for use by NetBSD
-220	COMPAT_14 MODULAR compat_netbsd32_sysvipc	\
+220	STD MODULAR compat_netbsd32_sysvipc	\
 			{ int|netbsd32||__semctl(int semid, int semnum, \
 			    int cmd, netbsd32_semunu_t arg); }
 221	STD MODULAR compat_netbsd32_sysvipc	\
@@ -458,7 +472,7 @@
 			    netbsd32_sembufp_t sops, netbsd32_size_t nsops); }
 223	STD MODULAR compat_netbsd32_sysvipc	\
 			{ int|netbsd32||semconfig(int flag); }
-224	COMPAT_14 MODULAR compat_netbsd32_sysvipc	\
+224	STD MODULAR compat_netbsd32_sysvipc	\
 			{ int|netbsd32||msgctl(int msqid, int cmd, \
 			    netbsd32_msqid_ds14p_t buf); }
 225	STD MODULAR compat_netbsd32_sysvipc	\
@@ -473,7 +487,7 @@
 228	STD MODULAR compat_netbsd32_sysvipc	\
 			{ netbsd32_voidp|netbsd32||shmat(int shmid, \
 			    netbsd32_voidp shmaddr, int shmflg); }
-229	COMPAT_14 MODULAR compat_netbsd32_sysvipc	\
+229	STD MODULAR compat_netbsd32_sysvipc	\
 			{ int|netbsd32||shmctl(int shmid, int cmd, \
 			    netbsd32_shmid_dsp_t buf); }
 230	STD MODULAR compat_netbsd32_sysvipc	\
@@ -481,13 +495,16 @@
 231	STD MODULAR compat_netbsd32_sysvipc	\
 			{ int|netbsd32||shmget(netbsd32_key_t key, \
 			    netbsd32_size_t size, int shmflg); }
-232	COMPAT_50	{ int|netbsd32||clock_gettime( \
+232	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||clock_gettime( \
 			    netbsd32_clockid_t clock_id, \
 			    netbsd32_timespec50p_t tp); }
-233	COMPAT_50	{ int|netbsd32||clock_settime( \
+233	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||clock_settime( \
 			    netbsd32_clockid_t clock_id, \
 			    netbsd32_timespec50p_t tp); }
-234	COMPAT_50	{ int|netbsd32||clock_getres( \
+234	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||clock_getres( \
 			    netbsd32_clockid_t clock_id, \
 			    netbsd32_timespec50p_t tp); }
 235	STD		{ int|netbsd32||timer_create( \
@@ -495,23 +512,27 @@
 			    netbsd32_sigeventp_t evp, \
 			    netbsd32_timerp_t timerid); }
 236	STD		{ int|netbsd32||timer_delete(netbsd32_timer_t timerid); }
-237	COMPAT_50	{ int|netbsd32||timer_settime(netbsd32_timer_t timerid, \
+237	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||timer_settime(netbsd32_timer_t timerid, \
 			    int flags, \
 			    netbsd32_itimerspec50p_t value, \
 			    netbsd32_itimerspec50p_t ovalue); }
-238	COMPAT_50	{ int|netbsd32||timer_gettime(netbsd32_timer_t timerid, \
+238	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||timer_gettime(netbsd32_timer_t timerid, \
 			    netbsd32_itimerspec50p_t value); }
 239	STD		{ int|netbsd32||timer_getoverrun( \
 			    netbsd32_timer_t timerid); }
 ;
 ; Syscalls 240-269 are reserved for other IEEE Std1003.1b syscalls
 ;
-240	COMPAT_50	{ int|netbsd32||nanosleep(netbsd32_timespec50p_t rqtp, \
+240	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||nanosleep(netbsd32_timespec50p_t rqtp, \
 			    netbsd32_timespec50p_t rmtp); }
 241	STD		{ int|netbsd32||fdatasync(int fd); }
 242	STD		{ int|netbsd32||mlockall(int flags); }
 243	NOARGS		{ int|sys||munlockall(void); }
-244	COMPAT_50	{ int|netbsd32||__sigtimedwait(netbsd32_sigsetp_t set, \
+244	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||__sigtimedwait(netbsd32_sigsetp_t set, \
 			    netbsd32_siginfop_t info, \
 			    netbsd32_timespec50p_t timeout); }
 245	STD		{ int|netbsd32||sigqueueinfo(pid_t pid, \
@@ -558,13 +579,13 @@
 			{ netbsd32_ssize_t|netbsd32||mq_receive(mqd_t mqdes, \
 			    netbsd32_charp msg_ptr, \
 			    netbsd32_size_t msg_len, netbsd32_uintp msg_prio); }
-265	COMPAT_50 MODULAR compat_netbsd32_mqueue	\
+265	STD MODULAR compat_netbsd32_mqueue	\
 			{ int|netbsd32||mq_timedsend(mqd_t mqdes, \
 			    const netbsd32_charp msg_ptr, \
 			    netbsd32_size_t msg_len, \
 			    unsigned msg_prio, \
 			    const netbsd32_timespec50p_t abs_timeout); }
-266	COMPAT_50 MODULAR compat_netbsd32_mqueue	\
+266	STD MODULAR compat_netbsd32_mqueue	\
 			{ netbsd32_ssize_t|netbsd32||mq_timedreceive( \
 			    mqd_t mqdes, \
 			    netbsd32_charp msg_ptr, netbsd32_size_t msg_len, \
@@ -577,7 +598,7 @@
 			    netbsd32_charp to); }
 271	STD		{ int|netbsd32||swapctl(int cmd, netbsd32_voidp arg, \
 			    int misc); }
-272	COMPAT_30 MODULAR compat_netbsd32_30	\
+272	STD MODULAR compat_netbsd32_30	\
 			{ int|netbsd32||getdents(int fd, netbsd32_charp buf, \
 			    netbsd32_size_t count); }
 273	STD		{ int|netbsd32||minherit(netbsd32_voidp addr, \
@@ -586,17 +607,18 @@
 			    mode_t mode); }
 275	STD		{ int|netbsd32||lchown(netbsd32_charp path, uid_t uid, \
 			    gid_t gid); }
-276	COMPAT_50	{ int|netbsd32||lutimes(netbsd32_charp path, \
+276	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||lutimes(netbsd32_charp path, \
 			    netbsd32_timeval50p_t tptr); }
 277	STD		{ int|netbsd32|13|msync(netbsd32_voidp addr, \
 			    netbsd32_size_t len, int flags); }
-278	COMPAT_30 MODULAR compat_netbsd32_30	\
+278	STD MODULAR compat_netbsd32_30	\
 			{ int|netbsd32|13|stat(netbsd32_charp path, \
 			    netbsd32_stat13p_t ub); }
-279	COMPAT_30 MODULAR compat_netbsd32_30	\
+279	STD MODULAR compat_netbsd32_30	\
 			{ int|netbsd32|13|fstat(int fd, \
 			    netbsd32_stat13p_t sb); }
-280	COMPAT_30 MODULAR compat_netbsd32_30	\
+280	STD MODULAR compat_netbsd32_30	\
 			{ int|netbsd32|13|lstat(netbsd32_charp path, \
 			    netbsd32_stat13p_t ub); }
 281	STD		{ int|netbsd32|14|sigaltstack(\
@@ -633,21 +655,22 @@
 296	STD		{ int|netbsd32||__getcwd(netbsd32_charp bufp, \
 			    netbsd32_size_t length); }
 297	STD		{ int|netbsd32||fchroot(int fd); }
-298	COMPAT_30 MODULAR compat_netbsd32_30	\
+298	STD MODULAR compat_netbsd32_30	\
 			{ int|netbsd32||fhopen(netbsd32_fhandlep_t fhp, \
 			   int flags); }
-299	COMPAT_30 MODULAR compat_netbsd32_30	\
+299	STD MODULAR compat_netbsd32_30	\
 			{ int|netbsd32||fhstat(netbsd32_fhandlep_t fhp, \
 			    netbsd32_stat13p_t sb); }
-300	COMPAT_20	{ int|netbsd32||fhstatfs(netbsd32_fhandlep_t fhp, \
+300	STD MODULAR compat_netbsd32_20	\
+			{ int|netbsd32||fhstatfs(netbsd32_fhandlep_t fhp, \
 			    netbsd32_stat50p_t buf); }
-301	COMPAT_50 MODULAR compat_netbsd32_sysvipc	\
+301	STD MODULAR compat_netbsd32_sysvipc	\
 			{ int|netbsd32|14|semctl(int semid, int semnum, \
 			    int cmd, ... netbsd32_semun50p_t arg); }
-302	COMPAT_50 MODULAR compat_netbsd32_sysvipc	\
+302	STD MODULAR compat_netbsd32_sysvipc	\
 			{ int|netbsd32|13|msgctl(int msqid, int cmd, \
 			    netbsd32_msqid_ds50p_t buf); }
-303	COMPAT_50 MODULAR compat_netbsd32_sysvipc	\
+303	STD MODULAR compat_netbsd32_sysvipc	\
 			{ int|netbsd32|13|shmctl(int shmid, int cmd, \
 			    netbsd32_shmid_ds50p_t buf); }
 304	STD		{ int|netbsd32||lchflags(netbsd32_charp path, \
@@ -670,7 +693,8 @@
 317	STD 		{ void|netbsd32||_lwp_setprivate(netbsd32_voidp ptr); }
 318	STD		{ int|netbsd32||_lwp_kill(lwpid_t target, int signo); }
 319	STD 		{ int|netbsd32||_lwp_detach(lwpid_t target); }
-320	COMPAT_50	{ int|netbsd32||_lwp_park(netbsd32_timespec50p_t ts, \
+320	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||_lwp_park(netbsd32_timespec50p_t ts, \
 			    lwpid_t unpark, netbsd32_voidp hint, \
 			    netbsd32_voidp unparkhint); }
 321	STD 		{ int|netbsd32||_lwp_unpark(lwpid_t target, \
@@ -707,7 +731,8 @@
 343	STD		{ int|netbsd32||rasctl(netbsd32_voidp addr, \
 			    netbsd32_size_t len, int op); }
 344	NOARGS		{ int|sys||kqueue(void); }
-345	COMPAT_50	{ int|netbsd32||kevent(int fd, \
+345	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||kevent(int fd, \
 			    netbsd32_keventp_t changelist, \
 			    netbsd32_size_t nchanges, \
 			    netbsd32_keventp_t eventlist, \
@@ -739,7 +764,7 @@
 			    netbsd32_statvfsp_t buf, int flags); }
 358	STD		{ int|netbsd32||fstatvfs1(int fd, \
 			    netbsd32_statvfsp_t buf, int flags); }
-359	COMPAT_30 MODULAR compat_netbsd32_30	\
+359	STD MODULAR compat_netbsd32_30	\
 			{ int|netbsd32||fhstatvfs1(netbsd32_fhandlep_t fhp, \
 			    netbsd32_statvfsp_t buf, int flags); }
 360	STD		{ int|netbsd32||extattrctl(netbsd32_charp path, \
@@ -780,11 +805,13 @@
 372	STD		{ int|netbsd32||extattr_list_link(netbsd32_charp path, \
 			    int attrnamespace, netbsd32_voidp data, \
 			    netbsd32_size_t nbytes); }
-373	COMPAT_50	{ int|netbsd32||pselect(int nd, netbsd32_fd_setp_t in, \
+373	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||pselect(int nd, netbsd32_fd_setp_t in, \
 			    netbsd32_fd_setp_t ou, netbsd32_fd_setp_t ex, \
 			    netbsd32_timespec50p_t ts, \
 			    netbsd32_sigsetp_t mask); }
-374	COMPAT_50	{ int|netbsd32||pollts(netbsd32_pollfdp_t fds, \
+374	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32||pollts(netbsd32_pollfdp_t fds, \
 			    u_int nfds, netbsd32_timespec50p_t ts, \
 			    netbsd32_sigsetp_t mask); }
 375	STD		{ int|netbsd32||setxattr(netbsd32_charp path, \
@@ -817,16 +844,19 @@
 			    netbsd32_charp name); }
 386	STD		{ int|netbsd32||fremovexattr(int fd, \
 			    netbsd32_charp name); }
-387     COMPAT_50	{ int|netbsd32|30|stat(netbsd32_charp path, \
+387     STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32|30|stat(netbsd32_charp path, \
 			    netbsd32_stat50p_t ub); }
-388     COMPAT_50	{ int|netbsd32|30|fstat(int fd, \
+388     STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32|30|fstat(int fd, \
 			    netbsd32_stat50p_t sb); }
-389     COMPAT_50	{ int|netbsd32|30|lstat( \
+389     STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32|30|lstat( \
 			    netbsd32_charp path, netbsd32_stat50p_t ub); }
 390     STD             { int|netbsd32|30|getdents(int fd, \
 			    netbsd32_charp buf, netbsd32_size_t count); }
 391	IGNORED		old posix fadvise
-392	COMPAT_30 MODULAR compat_netbsd32_30	\
+392	STD MODULAR compat_netbsd32_30	\
 			{ int|netbsd32|30|fhstat( \
 			    netbsd32_fhandlep_t fhp, \
 			    netbsd32_stat50p_t sb); }
@@ -845,7 +875,8 @@
 397	STD		{ int|netbsd32|40|fhstatvfs1(	\
 			    netbsd32_pointer_t fhp, netbsd32_size_t fh_size,\
 			    netbsd32_statvfsp_t buf, int flags); }
-398	COMPAT_50	{ int|netbsd32|40|fhstat(	\
+398	STD MODULAR compat_netbsd32_50	\
+			{ int|netbsd32|40|fhstat(	\
 			    netbsd32_pointer_t fhp, netbsd32_size_t fh_size,\
 			    netbsd32_stat50p_t sb); }
 
@@ -929,7 +960,8 @@
 			    mqd_t mqdes, netbsd32_charp msg_ptr, \
 			    netbsd32_size_t msg_len, netbsd32_uintp msg_prio, \
 			    const netbsd32_timespecp_t abs_timeout); }
-434	COMPAT_60 	{ int|netbsd32||_lwp_park( \
+434	STD MODULAR compat_netbsd32_60	\
+		 	{ int|netbsd32||_lwp_park( \
 			    const netbsd32_timespecp_t ts, \
 			    lwpid_t unpark, const netbsd32_voidp hint, \
 			    const netbsd32_voidp unparkhint); }

Index: src/sys/modules/compat_netbsd32/Makefile
diff -u src/sys/modules/compat_netbsd32/Makefile:1.20.12.3 src/sys/modules/compat_netbsd32/Makefile:1.20.12.4
--- src/sys/modules/compat_netbsd32/Makefile:1.20.12.3	Mon Sep 10 10:59:50 2018
+++ src/sys/modules/compat_netbsd32/Makefile	Mon Sep 10 22:50:52 2018
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.20.12.3 2018/09/10 10:59:50 pgoyette Exp $
+#	$NetBSD: Makefile,v 1.20.12.4 2018/09/10 22:50:52 pgoyette Exp $
 
 .include "../Makefile.inc"
 .include "../Makefile.assym"
@@ -27,7 +27,7 @@ CPPFLAGS+=	-DNTP -DKTRACE -DMODULAR
 SRCS+=	netbsd32_compat_10.c	# belongs to compat_netbsd32_sysvipc_10
 SRCS+=	netbsd32_compat_14.c	# belongs to compat_netbsd32_sysvipc_14
 SRCS+=	netbsd32_compat_43.c
-SRCS+=	netbsd32_compat_50.c netbsd32_compat_60.c
+SRCS+=	netbsd32_compat_60.c
 SRCS+=	netbsd32_core.c netbsd32_event.c
 SRCS+=	netbsd32_exec_elf32.c
 SRCS+=	netbsd32_execve.c netbsd32_fs.c

Index: src/sys/sys/module.h
diff -u src/sys/sys/module.h:1.41.14.11 src/sys/sys/module.h:1.41.14.12
--- src/sys/sys/module.h:1.41.14.11	Fri Sep  7 23:32:30 2018
+++ src/sys/sys/module.h	Mon Sep 10 22:50:52 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: module.h,v 1.41.14.11 2018/09/07 23:32:30 pgoyette Exp $	*/
+/*	$NetBSD: module.h,v 1.41.14.12 2018/09/10 22:50:52 pgoyette Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -218,6 +218,11 @@ void	module_print(const char *, ...) __p
 extern char	module_base[MODULE_BASE_SIZE];
 extern const char	*module_machine;
 
+extern int (*vec_compat32_80_modctl)(struct lwp *,
+    const struct netbsd32_modctl_args *, register_t *);
+extern int compat32_80_modctl_compat_stub(struct lwp *,
+    const struct netbsd32_modctl_args *, register_t *);
+
 #else	/* _KERNEL */
 
 #include <stdint.h>

Added files:

Index: src/sys/compat/netbsd32/netbsd32_compat_80.c
diff -u /dev/null src/sys/compat/netbsd32/netbsd32_compat_80.c:1.1.2.1
--- /dev/null	Mon Sep 10 22:50:52 2018
+++ src/sys/compat/netbsd32/netbsd32_compat_80.c	Mon Sep 10 22:50:51 2018
@@ -0,0 +1,201 @@
+/*	$NetBSD: netbsd32_compat_80.c,v 1.1.2.1 2018/09/10 22:50:51 pgoyette Exp $	*/
+
+/*-
+ * Copyright (c) 2008 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software developed for The NetBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_80.c,v 1.1.2.1 2018/09/10 22:50:51 pgoyette Exp $");
+
+#include <sys/param.h>
+#include <sys/dirent.h>
+#include <sys/kauth.h>
+#include <sys/module.h>
+#include <sys/kobj.h>
+
+#include <compat/netbsd32/netbsd32.h>
+#include <compat/netbsd32/netbsd32_syscall.h>
+#include <compat/netbsd32/netbsd32_syscallargs.h>
+#include <compat/netbsd32/netbsd32_conv.h>
+
+#ifdef COMPAT_80
+static int
+modctl32_handle_ostat(int cmd, struct netbsd32_iovec *iov, void *arg)
+{
+	omodstat_t *oms, *omso;
+	modinfo_t *mi;
+	module_t *mod;
+	vaddr_t addr;
+	size_t size;
+	size_t omslen;
+	size_t used;
+	int error;
+	int omscnt;
+	bool stataddr;
+	const char *suffix = "...";
+
+	if (cmd != MODCTL_OSTAT)
+		return EINVAL;
+
+	/* If not privileged, don't expose kernel addresses. */
+	error = kauth_authorize_system(kauth_cred_get(), KAUTH_SYSTEM_MODULE,
+	    0, (void *)(uintptr_t)MODCTL_STAT, NULL, NULL);
+	stataddr = (error == 0);
+
+	kernconfig_lock();
+	omscnt = 0;
+	TAILQ_FOREACH(mod, &module_list, mod_chain) {
+		omscnt++;
+		mi = mod->mod_info;
+	}
+	TAILQ_FOREACH(mod, &module_builtins, mod_chain) {
+		omscnt++;
+		mi = mod->mod_info;
+	}
+	omslen = omscnt * sizeof(omodstat_t);
+	omso = kmem_zalloc(omslen, KM_SLEEP);
+	oms = omso;
+	TAILQ_FOREACH(mod, &module_list, mod_chain) {
+		mi = mod->mod_info;
+		strlcpy(oms->oms_name, mi->mi_name, sizeof(oms->oms_name));
+		if (mi->mi_required != NULL) {
+			used = strlcpy(oms->oms_required, mi->mi_required,
+			    sizeof(oms->oms_required));
+			if (used >= sizeof(oms->oms_required)) { 
+				oms->oms_required[sizeof(oms->oms_required) -
+				    strlen(suffix) - 1] = '\0';
+				strlcat(oms->oms_required, suffix,
+				    sizeof(oms->oms_required));
+                        }
+		}
+		if (mod->mod_kobj != NULL && stataddr) {
+			kobj_stat(mod->mod_kobj, &addr, &size);
+			oms->oms_addr = addr;
+			oms->oms_size = size;
+		}
+		oms->oms_class = mi->mi_class;
+		oms->oms_refcnt = mod->mod_refcnt;
+		oms->oms_source = mod->mod_source;
+		oms->oms_flags = mod->mod_flags;
+		oms++;
+	}
+	TAILQ_FOREACH(mod, &module_builtins, mod_chain) {
+		mi = mod->mod_info;
+		strlcpy(oms->oms_name, mi->mi_name, sizeof(oms->oms_name));
+		if (mi->mi_required != NULL) {
+			used = strlcpy(oms->oms_required, mi->mi_required,
+			    sizeof(oms->oms_required));
+			if (used >= sizeof(oms->oms_required)) { 
+				oms->oms_required[sizeof(oms->oms_required) -
+				    strlen(suffix) - 1] = '\0';
+				strlcat(oms->oms_required, suffix,
+				    sizeof(oms->oms_required));
+                        }
+		}
+		if (mod->mod_kobj != NULL && stataddr) {
+			kobj_stat(mod->mod_kobj, &addr, &size);
+			oms->oms_addr = addr;
+			oms->oms_size = size;
+		}
+		oms->oms_class = mi->mi_class;
+		oms->oms_refcnt = -1;
+		KASSERT(mod->mod_source == MODULE_SOURCE_KERNEL);
+		oms->oms_source = mod->mod_source;
+		oms++;
+	}
+	kernconfig_unlock();
+	error = copyout(omso, NETBSD32PTR64(iov->iov_base),
+	    uimin(omslen - sizeof(modstat_t), iov->iov_len));
+	kmem_free(omso, omslen);
+	if (error == 0) {
+		iov->iov_len = omslen - sizeof(modstat_t);
+		error = copyout(iov, arg, sizeof(*iov));
+	}
+
+	return error;
+}
+
+int
+netbsd32_80_modctl(struct lwp *lwp, const struct netbsd32_modctl_args *uap,
+	register_t *result)
+{
+	/* {
+		syscallarg(int) cmd;
+		syscallarg(netbsd32_voidp) arg;
+	} */
+	char buf[MAXMODNAME];
+	struct netbsd32_iovec iov;
+	struct netbsd32_modctl_load ml;
+	int error;
+	void *arg;
+#ifdef MODULAR
+	uintptr_t loadtype;
+#endif
+
+	arg = SCARG_P32(uap, arg);
+
+	switch (SCARG(uap, cmd)) {
+	case MODCTL_OSTAT:
+		error = copyin(arg, &iov, sizeof(iov));
+		if (error != 0) {
+			break;
+		}
+		error = modctl32_handle_ostat(SCARG(uap, cmd), &iov, arg);
+		break;
+	default:
+		error = EPASSTHROUGH;
+		break;
+	}
+
+	return error;
+}
+
+MODULE(MODULE_CLASS_EXEC, compat_netbsd32_80, "compat_netbsd32,compat_80");
+
+static int
+compat_netbsd32_80_modcmd(modcmd_t cmd, void *arg)
+{
+static int (*orig_netbsd32_80_modctl)(struct lwp *,
+    const struct netbsd32_modctl_args *, register_t *);
+
+	switch (cmd) {
+	case MODULE_CMD_INIT:
+		orig_netbsd32_80_modctl = vec_compat32_80_modctl;
+		vec_compat32_80_modctl = netbsd32_80_modctl;
+		return 0;
+
+	case MODULE_CMD_FINI:
+		vec_compat32_80_modctl = orig_netbsd32_80_modctl;
+		return 0;
+
+	default:
+		return ENOTTY;
+	}
+}
+#endif	/* COMPAT_80 */
+
+vec_compat32_80_modctl = compat32_80_modctl_compat_stub;

Index: src/sys/modules/compat_netbsd32_50/Makefile
diff -u /dev/null src/sys/modules/compat_netbsd32_50/Makefile:1.1.2.1
--- /dev/null	Mon Sep 10 22:50:52 2018
+++ src/sys/modules/compat_netbsd32_50/Makefile	Mon Sep 10 22:50:52 2018
@@ -0,0 +1,13 @@
+#	$NetBSD: Makefile,v 1.1.2.1 2018/09/10 22:50:52 pgoyette Exp $
+
+.include "../Makefile.inc"
+
+.PATH:	${S}/compat/netbsd32
+
+KMOD=	compat_netbsd32_50
+
+CPPFLAGS+=	-DCOMPAT_50 -DCOMPAT_60 -DCOMPAT_70 -DCOMPAT_80
+
+SRCS+=	netbsd32_compat_50.c
+
+.include <bsd.kmodule.mk>

Index: src/sys/modules/compat_netbsd32_60/Makefile
diff -u /dev/null src/sys/modules/compat_netbsd32_60/Makefile:1.1.2.1
--- /dev/null	Mon Sep 10 22:50:52 2018
+++ src/sys/modules/compat_netbsd32_60/Makefile	Mon Sep 10 22:50:52 2018
@@ -0,0 +1,13 @@
+#	$NetBSD: Makefile,v 1.1.2.1 2018/09/10 22:50:52 pgoyette Exp $
+
+.include "../Makefile.inc"
+
+.PATH:	${S}/compat/netbsd32
+
+KMOD=	compat_netbsd32_60
+
+CPPFLAGS+=	-DCOMPAT_60 -DCOMPAT_70 -DCOMPAT_80
+
+SRCS+=	netbsd32_compat_60.c
+
+.include <bsd.kmodule.mk>

Index: src/sys/modules/compat_netbsd32_80/Makefile
diff -u /dev/null src/sys/modules/compat_netbsd32_80/Makefile:1.1.2.1
--- /dev/null	Mon Sep 10 22:50:52 2018
+++ src/sys/modules/compat_netbsd32_80/Makefile	Mon Sep 10 22:50:52 2018
@@ -0,0 +1,13 @@
+#	$NetBSD: Makefile,v 1.1.2.1 2018/09/10 22:50:52 pgoyette Exp $
+
+.include "../Makefile.inc"
+
+.PATH:	${S}/compat/netbsd32
+
+KMOD=	compat_netbsd32_60
+
+CPPFLAGS+=	-DCOMPAT_80
+
+SRCS+=	netbsd32_compat_80.c
+
+.include <bsd.kmodule.mk>

Reply via email to