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>

Reply via email to