Module Name: src
Committed By: pgoyette
Date: Sun May 10 07:41:16 UTC 2015
Modified Files:
src/sys/compat/common: compat_mod.c sysv_ipc_50.c
src/sys/kern: files.kern syscalls.master sysv_ipc.c
src/sys/modules: Makefile
src/sys/modules/compat: Makefile
src/sys/sys: ipc.h
Added Files:
src/sys/compat/common: compat_sysv_mod.c
src/sys/modules/compat_sysv: Makefile
Log Message:
Split the SYSV* compat code out into a separate compat_sysv module.
For monolithic kernels, both modules will be compiled as "built-ins",
while modular environments will be able to load the SYSVSEM, SYSVSHM,
and SYSVMSG code independant from the rest of compat.
This is a necessary precursor step to making the "STD" SYSV* code
into a separate module.
Tested in both monolithic and modular environments with no errors
seen.
To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/sys/compat/common/compat_mod.c
cvs rdiff -u -r0 -r1.1 src/sys/compat/common/compat_sysv_mod.c
cvs rdiff -u -r1.2 -r1.3 src/sys/compat/common/sysv_ipc_50.c
cvs rdiff -u -r1.5 -r1.6 src/sys/kern/files.kern
cvs rdiff -u -r1.275 -r1.276 src/sys/kern/syscalls.master
cvs rdiff -u -r1.25 -r1.26 src/sys/kern/sysv_ipc.c
cvs rdiff -u -r1.151 -r1.152 src/sys/modules/Makefile
cvs rdiff -u -r1.11 -r1.12 src/sys/modules/compat/Makefile
cvs rdiff -u -r0 -r1.1 src/sys/modules/compat_sysv/Makefile
cvs rdiff -u -r1.33 -r1.34 src/sys/sys/ipc.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/common/compat_mod.c
diff -u src/sys/compat/common/compat_mod.c:1.20 src/sys/compat/common/compat_mod.c:1.21
--- src/sys/compat/common/compat_mod.c:1.20 Thu Sep 19 18:50:35 2013
+++ src/sys/compat/common/compat_mod.c Sun May 10 07:41:15 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: compat_mod.c,v 1.20 2013/09/19 18:50:35 christos Exp $ */
+/* $NetBSD: compat_mod.c,v 1.21 2015/05/10 07:41:15 pgoyette Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: compat_mod.c,v 1.20 2013/09/19 18:50:35 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: compat_mod.c,v 1.21 2015/05/10 07:41:15 pgoyette Exp $");
#ifdef _KERNEL_OPT
#include "opt_compat_netbsd.h"
@@ -60,12 +60,15 @@ __KERNEL_RCSID(0, "$NetBSD: compat_mod.c
#include <compat/common/compat_util.h>
#include <compat/common/compat_mod.h>
+#ifdef _MODULE
#if defined(COMPAT_09) || defined(COMPAT_43) || defined(COMPAT_50)
static struct sysctllog *compat_clog = NULL;
#endif
+#endif
MODULE(MODULE_CLASS_EXEC, compat, NULL);
+#ifdef _MODULE
int ttcompat(struct tty *, u_long, void *, int, struct lwp *);
#ifdef COMPAT_16
@@ -153,18 +156,6 @@ static const struct syscall_package comp
{ SYS_compat_13_sigsuspend13, 0, (sy_call_t *)compat_13_sys_sigsuspend },
#endif
-#if defined(COMPAT_14)
-# if defined(SYSVSEM)
- { SYS_compat_14___semctl, 0, (sy_call_t *)compat_14_sys___semctl },
-# endif
-# if defined(SYSVMSG)
- { SYS_compat_14_msgctl, 0, (sy_call_t *)compat_14_sys_msgctl },
-# endif
-# if defined(SYSVSHM)
- { SYS_compat_14_shmctl, 0, (sy_call_t *)compat_14_sys_shmctl },
-# endif
-#endif
-
#if defined(COMPAT_16)
#if defined(COMPAT_SIGCONTEXT)
{ SYS_compat_16___sigaction14, 0, (sy_call_t *)compat_16_sys___sigaction14 },
@@ -220,15 +211,6 @@ static const struct syscall_package comp
{ SYS_compat_50_mq_timedsend, 0, (sy_call_t *)compat_50_sys_mq_timedsend },
{ SYS_compat_50_mq_timedreceive, 0, (sy_call_t *)compat_50_sys_mq_timedreceive },
{ SYS_compat_50_lutimes, 0, (sy_call_t *)compat_50_sys_lutimes },
-# if defined(SYSVSEM)
- { SYS_compat_50_____semctl13, 0, (sy_call_t *)compat_50_sys_____semctl13 },
-# endif
-# if defined(SYSVMSG)
- { SYS_compat_50___msgctl13, 0, (sy_call_t *)compat_50_sys___msgctl13 },
-# endif
-# if defined(SYSVSHM)
- { SYS_compat_50___shmctl13, 0, (sy_call_t *)compat_50_sys___shmctl13 },
-# endif
{ SYS_compat_50__lwp_park, 0, (sy_call_t *)compat_50_sys__lwp_park },
{ SYS_compat_50_kevent, 0, (sy_call_t *)compat_50_sys_kevent },
{ SYS_compat_50_pselect, 0, (sy_call_t *)compat_50_sys_pselect },
@@ -248,10 +230,12 @@ static const struct syscall_package comp
#endif
{ 0, 0, NULL },
};
+#endif /* _MODULE */
static int
compat_modcmd(modcmd_t cmd, void *arg)
{
+#ifdef _MODULE
#ifdef COMPAT_16
proc_t *p;
#endif
@@ -342,8 +326,18 @@ compat_modcmd(modcmd_t cmd, void *arg)
default:
return ENOTTY;
}
+#else /* _MODULE */
+ switch (cmd) {
+ case MODULE_CMD_INIT:
+ case MODULE_CMD_FINI:
+ return 0;
+ default:
+ return ENOTTY;
+ }
+#endif
}
+#ifdef _MODULE
void
compat_sysctl_init(void)
{
@@ -364,3 +358,4 @@ compat_sysctl_fini(void)
sysctl_teardown(&compat_clog);
#endif
}
+#endif
Index: src/sys/compat/common/sysv_ipc_50.c
diff -u src/sys/compat/common/sysv_ipc_50.c:1.2 src/sys/compat/common/sysv_ipc_50.c:1.3
--- src/sys/compat/common/sysv_ipc_50.c:1.2 Wed Jan 21 16:12:20 2009
+++ src/sys/compat/common/sysv_ipc_50.c Sun May 10 07:41:15 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: sysv_ipc_50.c,v 1.2 2009/01/21 16:12:20 christos Exp $ */
+/* $NetBSD: sysv_ipc_50.c,v 1.3 2015/05/10 07:41:15 pgoyette Exp $ */
/*-
* Copyright (c) 1998, 2007 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysv_ipc_50.c,v 1.2 2009/01/21 16:12:20 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysv_ipc_50.c,v 1.3 2015/05/10 07:41:15 pgoyette Exp $");
#ifdef _KERNEL_OPT
#include "opt_sysv.h"
@@ -74,6 +74,8 @@ __KERNEL_RCSID(0, "$NetBSD: sysv_ipc_50.
* Check for ipc permission
*/
+int sysctl_kern_sysvipc50(SYSCTLFN_PROTO);
+
int
sysctl_kern_sysvipc50(SYSCTLFN_ARGS)
{
Index: src/sys/kern/files.kern
diff -u src/sys/kern/files.kern:1.5 src/sys/kern/files.kern:1.6
--- src/sys/kern/files.kern:1.5 Wed May 6 15:57:08 2015
+++ src/sys/kern/files.kern Sun May 10 07:41:15 2015
@@ -1,4 +1,4 @@
-# $NetBSD: files.kern,v 1.5 2015/05/06 15:57:08 hannken Exp $
+# $NetBSD: files.kern,v 1.6 2015/05/10 07:41:15 pgoyette Exp $
#
# kernel sources
@@ -6,6 +6,8 @@
define kern: machdep, uvm
defflag opt_kern.h KERN
file compat/common/compat_mod.c compat_netbsd | compat_netbsd32
+file compat/common/compat_sysv_mod.c (compat_netbsd | compat_netbsd32) &
+ (sysvshm | sysvsem | sysvmsg)
file conf/debugsyms.c kern
file dev/bio.c bio needs-flag
file dev/ccd.c ccd
Index: src/sys/kern/syscalls.master
diff -u src/sys/kern/syscalls.master:1.275 src/sys/kern/syscalls.master:1.276
--- src/sys/kern/syscalls.master:1.275 Sat May 9 06:04:13 2015
+++ src/sys/kern/syscalls.master Sun May 10 07:41:15 2015
@@ -1,4 +1,4 @@
- $NetBSD: syscalls.master,v 1.275 2015/05/09 06:04:13 pgoyette Exp $
+ $NetBSD: syscalls.master,v 1.276 2015/05/10 07:41:15 pgoyette Exp $
; @(#)syscalls.master 8.2 (Berkeley) 1/13/94
@@ -351,7 +351,7 @@
168 UNIMPL
; XXX more generally, never on machines where sizeof(void *) != sizeof(int)
#if (defined(SYSVSEM) || !defined(_KERNEL_OPT)) && !defined(_LP64)
-169 COMPAT_10 MODULAR compat \
+169 COMPAT_10 MODULAR compat_sysv \
{ int|sys||semsys(int which, int a2, int a3, int a4, \
int a5); } osemsys
#else
@@ -359,7 +359,7 @@
#endif
; XXX more generally, never on machines where sizeof(void *) != sizeof(int)
#if (defined(SYSVMSG) || !defined(_KERNEL_OPT)) && !defined(_LP64)
-170 COMPAT_10 MODULAR compat \
+170 COMPAT_10 MODULAR compat_sysv \
{ int|sys||msgsys(int which, int a2, int a3, int a4, \
int a5, int a6); } omsgsys
#else
@@ -367,7 +367,7 @@
#endif
; XXX more generally, never on machines where sizeof(void *) != sizeof(int)
#if (defined(SYSVSHM) || !defined(_KERNEL_OPT)) && !defined(_LP64)
-171 COMPAT_10 MODULAR compat \
+171 COMPAT_10 MODULAR compat_sysv \
{ int|sys||shmsys(int which, int a2, int a3, int a4); } \
oshmsys
#else
@@ -454,7 +454,7 @@
219 UNIMPL
; System calls 220-300 are reserved for use by NetBSD
#if defined(SYSVSEM) || !defined(_KERNEL_OPT)
-220 COMPAT_14 MODULAR compat \
+220 COMPAT_14 MODULAR compat_sysv \
{ int|sys||__semctl(int semid, int semnum, int cmd, \
union __semun *arg); }
221 STD { int|sys||semget(key_t key, int nsems, int semflg); }
@@ -468,7 +468,7 @@
223 EXCL semconfig
#endif
#if defined(SYSVMSG) || !defined(_KERNEL_OPT)
-224 COMPAT_14 MODULAR compat { int|sys||msgctl(int msqid, int cmd, \
+224 COMPAT_14 MODULAR compat_sysv { int|sys||msgctl(int msqid, int cmd, \
struct msqid_ds14 *buf); }
225 STD { int|sys||msgget(key_t key, int msgflg); }
226 STD { int|sys||msgsnd(int msqid, const void *msgp, \
@@ -484,7 +484,7 @@
#if defined(SYSVSHM) || !defined(_KERNEL_OPT)
228 STD { void *|sys||shmat(int shmid, const void *shmaddr, \
int shmflg); }
-229 COMPAT_14 MODULAR compat { int|sys||shmctl(int shmid, int cmd, \
+229 COMPAT_14 MODULAR compat_sysv { int|sys||shmctl(int shmid, int cmd, \
struct shmid_ds14 *buf); }
230 STD { int|sys||shmdt(const void *shmaddr); }
231 STD { int|sys||shmget(key_t key, size_t size, int shmflg); }
@@ -629,20 +629,20 @@
{ int|sys||fhstatfs(const struct compat_30_fhandle *fhp, \
struct statfs12 *buf); }
#if defined(SYSVSEM) || !defined(_KERNEL_OPT)
-301 COMPAT_50 MODULAR compat \
+301 COMPAT_50 MODULAR compat_sysv \
{ int|sys|13|__semctl(int semid, int semnum, int cmd, \
... union __semun *arg); }
#else
301 EXCL ____semctl13
#endif
#if defined(SYSVMSG) || !defined(_KERNEL_OPT)
-302 COMPAT_50 MODULAR compat { int|sys|13|msgctl(int msqid, int cmd, \
+302 COMPAT_50 MODULAR compat_sysv { int|sys|13|msgctl(int msqid, int cmd, \
struct msqid_ds *buf); }
#else
302 EXCL __msgctl13
#endif
#if defined(SYSVSHM) || !defined(_KERNEL_OPT)
-303 COMPAT_50 MODULAR compat { int|sys|13|shmctl(int shmid, int cmd, \
+303 COMPAT_50 MODULAR compat_sysv { int|sys|13|shmctl(int shmid, int cmd, \
struct shmid_ds13 *buf); }
#else
303 EXCL __shmctl13
Index: src/sys/kern/sysv_ipc.c
diff -u src/sys/kern/sysv_ipc.c:1.25 src/sys/kern/sysv_ipc.c:1.26
--- src/sys/kern/sysv_ipc.c:1.25 Tue Feb 25 18:30:11 2014
+++ src/sys/kern/sysv_ipc.c Sun May 10 07:41:15 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: sysv_ipc.c,v 1.25 2014/02/25 18:30:11 pooka Exp $ */
+/* $NetBSD: sysv_ipc.c,v 1.26 2015/05/10 07:41:15 pgoyette Exp $ */
/*-
* Copyright (c) 1998, 2007 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysv_ipc.c,v 1.25 2014/02/25 18:30:11 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysv_ipc.c,v 1.26 2015/05/10 07:41:15 pgoyette Exp $");
#include "opt_sysv.h"
#include "opt_compat_netbsd.h"
@@ -59,6 +59,20 @@ __KERNEL_RCSID(0, "$NetBSD: sysv_ipc.c,v
#include <compat/sys/ipc.h>
#endif
+static int (*kern_sysvipc50_sysctl_p)(SYSCTLFN_ARGS)
+#ifdef COMPAT_50
+ = sysctl_kern_sysvipc50;
+#else
+ = NULL;
+#endif
+
+void
+sysvipc50_set_compat_sysctl(int (*compat_sysctl)(SYSCTLFN_PROTO))
+{
+
+ kern_sysvipc50_sysctl_p = compat_sysctl;
+}
+
static kauth_listener_t sysvipc_listener = NULL;
static int
@@ -168,16 +182,17 @@ sysctl_kern_sysvipc(SYSCTLFN_ARGS)
int32_t nds;
int i, error, ret;
-#ifdef COMPAT_50
- switch ((error = sysctl_kern_sysvipc50(SYSCTLFN_CALL(rnode)))) {
- case 0:
- return 0;
- case EPASSTHROUGH:
- break;
- default:
- return error;
+/*
+ * If compat_sysv module has loaded the compat sysctl, call it. If
+ * it handles the request completely (either success or error), just
+ * return. Otherwise fallthrough to the non-compat_sysv sysctl code.
+ */
+ if (kern_sysvipc50_sysctl_p != NULL) {
+ error = (*kern_sysvipc50_sysctl_p)(SYSCTLFN_CALL(rnode));
+ if (error != EPASSTHROUGH)
+ return error;
}
-#endif
+
if (namelen != 1)
return EINVAL;
Index: src/sys/modules/Makefile
diff -u src/sys/modules/Makefile:1.151 src/sys/modules/Makefile:1.152
--- src/sys/modules/Makefile:1.151 Sat May 9 14:19:13 2015
+++ src/sys/modules/Makefile Sun May 10 07:41:16 2015
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.151 2015/05/09 14:19:13 matt Exp $
+# $NetBSD: Makefile,v 1.152 2015/05/10 07:41:16 pgoyette Exp $
.include <bsd.own.mk>
@@ -20,6 +20,7 @@ SUBDIR+= crypto
SUBDIR+= coda
SUBDIR+= coda5
SUBDIR+= compat
+SUBDIR+= compat_sysv
SUBDIR+= compat_ossaudio
SUBDIR+= coredump
SUBDIR+= dbcool
Index: src/sys/modules/compat/Makefile
diff -u src/sys/modules/compat/Makefile:1.11 src/sys/modules/compat/Makefile:1.12
--- src/sys/modules/compat/Makefile:1.11 Sun Dec 14 21:14:06 2014
+++ src/sys/modules/compat/Makefile Sun May 10 07:41:16 2015
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.11 2014/12/14 21:14:06 christos Exp $
+# $NetBSD: Makefile,v 1.12 2015/05/10 07:41:16 pgoyette Exp $
.include "../Makefile.inc"
@@ -23,17 +23,16 @@ CPPFLAGS+= -DCOMPAT_16
CPPFLAGS+= -DCOMPAT_20
CPPFLAGS+= -DCOMPAT_30 -DCOMPAT_40 -DCOMPAT_50
CPPFLAGS+= -DCOMPAT_60 -DCOMPAT_70 -DCOMPAT_80
-CPPFLAGS+= -DSYSVSEM -DSYSVSHM -DSYSVMSG -DCOMPAT_43
+CPPFLAGS+= -DCOMPAT_43
SRCS= kern_exit_43.c kern_info_09.c
-SRCS+= kern_info_43.c kern_ipc_10.c kern_resource_43.c kern_select_50.c
-SRCS+= kern_sig_13.c kern_sig_43.c kern_xxx_12.c sysv_msg_14.c
-SRCS+= sysv_sem_14.c sysv_shm_14.c tty_43.c uipc_syscalls_30.c
+SRCS+= kern_info_43.c kern_resource_43.c kern_select_50.c
+SRCS+= kern_sig_13.c kern_sig_43.c kern_xxx_12.c
+SRCS+= tty_43.c uipc_syscalls_30.c
SRCS+= uipc_syscalls_43.c vfs_syscalls_12.c kern_sig_16.c
SRCS+= vfs_syscalls_20.c vfs_syscalls_30.c vfs_syscalls_40.c
SRCS+= vfs_syscalls_43.c vm_12.c vm_43.c compat_mod.c
-SRCS+= sysv_msg_50.c sysv_sem_50.c kern_time_50.c kern_50.c
-SRCS+= sysv_shm_50.c vfs_syscalls_50.c sysv_ipc_50.c
+SRCS+= kern_time_50.c kern_50.c vfs_syscalls_50.c
SRCS+= tty_60.c kern_time_60.c
.PATH: ${S}/arch/${MACHINE}/${MACHINE}
Index: src/sys/sys/ipc.h
diff -u src/sys/sys/ipc.h:1.33 src/sys/sys/ipc.h:1.34
--- src/sys/sys/ipc.h:1.33 Tue Mar 13 18:41:02 2012
+++ src/sys/sys/ipc.h Sun May 10 07:41:16 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: ipc.h,v 1.33 2012/03/13 18:41:02 elad Exp $ */
+/* $NetBSD: ipc.h,v 1.34 2015/05/10 07:41:16 pgoyette Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -50,6 +50,7 @@
#include <sys/featuretest.h>
#include <sys/types.h>
+#include <sys/sysctl.h>
struct ipc_perm {
uid_t uid; /* user id */
@@ -129,6 +130,12 @@ void sysvipcinit(void);
(dst)._seq = (src)._seq; \
} while (/*CONSTCOND*/ 0);
+/*
+ * Set-up the sysctl routine for COMPAT_50
+ */
+
+void sysvipc50_set_compat_sysctl(int (*)(SYSCTLFN_PROTO));
+
#endif /* _KERNEL */
#ifndef _KERNEL
Added files:
Index: src/sys/compat/common/compat_sysv_mod.c
diff -u /dev/null src/sys/compat/common/compat_sysv_mod.c:1.1
--- /dev/null Sun May 10 07:41:16 2015
+++ src/sys/compat/common/compat_sysv_mod.c Sun May 10 07:41:15 2015
@@ -0,0 +1,125 @@
+/* $NetBSD: compat_sysv_mod.c,v 1.1 2015/05/10 07:41:15 pgoyette Exp $ */
+
+/*-
+ * Copyright (c) 2008 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software developed for The NetBSD Foundation
+ * by Andrew Doran.
+ *
+ * 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.
+ */
+
+/*
+ * Linkage for the compat module: spaghetti.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: compat_sysv_mod.c,v 1.1 2015/05/10 07:41:15 pgoyette Exp $");
+
+#ifdef _KERNEL_OPT
+#include "opt_compat_netbsd.h"
+#endif
+
+#include <sys/systm.h>
+#include <sys/module.h>
+#include <sys/sysctl.h>
+#include <sys/syscall.h>
+#include <sys/syscallargs.h>
+#include <sys/syscallvar.h>
+#include <sys/ipc.h>
+
+MODULE(MODULE_CLASS_EXEC, compat_sysv, NULL);
+
+#ifdef _MODULE
+static const struct syscall_package compat_sysv_syscalls[] = {
+#if defined(COMPAT_10) && !defined(_LP64)
+# if defined(SYSVMSG)
+ { SYS_compat_10_omsgsys, 0, (sy_call_t *)compat_10_sys_msgsys },
+# endif
+# if defined(SYSVSEM)
+ { SYS_compat_10_osemsys, 0, (sy_call_t *)compat_10_sys_semsys },
+# endif
+# if defined(SYSVSHM)
+ { SYS_compat_10_oshmsys, 0, (sy_call_t *)compat_10_sys_shmsys },
+# endif
+#endif
+
+#if defined(COMPAT_14)
+# if defined(SYSVSEM)
+ { SYS_compat_14___semctl, 0, (sy_call_t *)compat_14_sys___semctl },
+# endif
+# if defined(SYSVMSG)
+ { SYS_compat_14_msgctl, 0, (sy_call_t *)compat_14_sys_msgctl },
+# endif
+# if defined(SYSVSHM)
+ { SYS_compat_14_shmctl, 0, (sy_call_t *)compat_14_sys_shmctl },
+# endif
+#endif
+
+#if defined(COMPAT_50)
+# if defined(SYSVSEM)
+ { SYS_compat_50_____semctl13, 0, (sy_call_t *)compat_50_sys_____semctl13 },
+# endif
+# if defined(SYSVMSG)
+ { SYS_compat_50___msgctl13, 0, (sy_call_t *)compat_50_sys___msgctl13 },
+# endif
+# if defined(SYSVSHM)
+ { SYS_compat_50___shmctl13, 0, (sy_call_t *)compat_50_sys___shmctl13 },
+# endif
+#endif
+ { 0, 0, NULL },
+};
+#endif
+
+int sysctl_kern_sysvipc50(SYSCTLFN_ARGS);
+
+static int
+compat_sysv_modcmd(modcmd_t cmd, void *arg)
+{
+ int error = 0;
+
+ switch (cmd) {
+ case MODULE_CMD_INIT:
+#ifdef _MODULE
+ /* Link the system calls */
+ error = syscall_establish(NULL, compat_sysv_syscalls);
+#endif
+#ifdef COMPAT_50
+ sysvipc50_set_compat_sysctl(sysctl_kern_sysvipc50);
+#endif
+ return error;
+
+ case MODULE_CMD_FINI:
+#ifdef _MODULE
+ /* Unlink the system calls. */
+ error = syscall_disestablish(NULL, compat_sysv_syscalls);
+#endif
+#ifdef COMPAT_50
+ sysvipc50_set_compat_sysctl(NULL);
+#endif
+ return error;
+
+ default:
+ return ENOTTY;
+ }
+}
Index: src/sys/modules/compat_sysv/Makefile
diff -u /dev/null src/sys/modules/compat_sysv/Makefile:1.1
--- /dev/null Sun May 10 07:41:16 2015
+++ src/sys/modules/compat_sysv/Makefile Sun May 10 07:41:16 2015
@@ -0,0 +1,25 @@
+# $NetBSD: Makefile,v 1.1 2015/05/10 07:41:16 pgoyette Exp $
+
+.include "../Makefile.inc"
+
+.PATH: ${S}/compat/common
+
+KMOD= compat_sysv
+
+CPPFLAGS+= -DCOMPAT_10
+CPPFLAGS+= -DCOMPAT_13
+CPPFLAGS+= -DCOMPAT_14
+CPPFLAGS+= -DCOMPAT_50
+CPPFLAGS+= -DSYSVSEM -DSYSVSHM -DSYSVMSG
+
+SRCS= compat_sysv_mod.c
+SRCS+= sysv_msg_14.c sysv_sem_14.c sysv_shm_14.c
+SRCS+= sysv_msg_50.c sysv_sem_50.c sysv_shm_50.c sysv_ipc_50.c
+
+# really, all machines where sizeof(int) != sizeof(long) (LP64)
+.if (${MACHINE_ARCH} != "alpha" && ${MACHINE_ARCH} != "sparc64" \
+ && ${MACHINE_ARCH} != "x86_64")
+SRCS+= kern_ipc_10.c
+.endif
+
+.include <bsd.kmodule.mk>