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>