Module Name: src Committed By: pgoyette Date: Mon Mar 19 21:54:43 UTC 2018
Modified Files: src/sys/compat/common [pgoyette-compat]: compat_60_mod.c compat_mod.c compat_mod.h files.common kern_50.c kern_select_50.c kern_time_50.c vfs_syscalls_50.c src/sys/modules [pgoyette-compat]: Makefile Added Files: src/sys/compat/common [pgoyette-compat]: compat_50_mod.c src/sys/modules/compat_50 [pgoyette-compat]: Makefile Log Message: Initial pass at a COMPAT_50 module. More to come. To generate a diff of this commit: cvs rdiff -u -r0 -r1.1.2.1 src/sys/compat/common/compat_50_mod.c cvs rdiff -u -r1.1.2.10 -r1.1.2.11 src/sys/compat/common/compat_60_mod.c cvs rdiff -u -r1.24.14.16 -r1.24.14.17 src/sys/compat/common/compat_mod.c cvs rdiff -u -r1.1.42.6 -r1.1.42.7 src/sys/compat/common/compat_mod.h cvs rdiff -u -r1.1.2.13 -r1.1.2.14 src/sys/compat/common/files.common cvs rdiff -u -r1.1 -r1.1.34.1 src/sys/compat/common/kern_50.c cvs rdiff -u -r1.1 -r1.1.60.1 src/sys/compat/common/kern_select_50.c cvs rdiff -u -r1.31 -r1.31.16.1 src/sys/compat/common/kern_time_50.c cvs rdiff -u -r1.18 -r1.18.18.1 src/sys/compat/common/vfs_syscalls_50.c cvs rdiff -u -r1.202.2.8 -r1.202.2.9 src/sys/modules/Makefile cvs rdiff -u -r0 -r1.1.2.1 src/sys/modules/compat_50/Makefile 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_60_mod.c diff -u src/sys/compat/common/compat_60_mod.c:1.1.2.10 src/sys/compat/common/compat_60_mod.c:1.1.2.11 --- src/sys/compat/common/compat_60_mod.c:1.1.2.10 Sun Mar 18 23:34:25 2018 +++ src/sys/compat/common/compat_60_mod.c Mon Mar 19 21:54:43 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_60_mod.c,v 1.1.2.10 2018/03/18 23:34:25 pgoyette Exp $ */ +/* $NetBSD: compat_60_mod.c,v 1.1.2.11 2018/03/19 21:54:43 pgoyette Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: compat_60_mod.c,v 1.1.2.10 2018/03/18 23:34:25 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: compat_60_mod.c,v 1.1.2.11 2018/03/19 21:54:43 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -54,9 +54,6 @@ __KERNEL_RCSID(0, "$NetBSD: compat_60_mo #include <compat/sys/ccdvar.h> #include <compat/sys/cpuio.h> -#define REQUIRED_60 "compat_70" /* XXX No compat_80 yet */ -MODULE(MODULE_CLASS_EXEC, compat_60, REQUIRED_60); - int compat_60_init(void) { @@ -117,6 +114,11 @@ compat_60_fini(void) return error; } +#ifdef _MODULE + +#define REQUIRED_60 "compat_70" /* XXX No compat_80 yet */ +MODULE(MODULE_CLASS_EXEC, compat_60, REQUIRED_60); + static int compat_60_modcmd(modcmd_t cmd, void *arg) { @@ -130,3 +132,4 @@ compat_60_modcmd(modcmd_t cmd, void *arg return ENOTTY; } } +#endif Index: src/sys/compat/common/compat_mod.c diff -u src/sys/compat/common/compat_mod.c:1.24.14.16 src/sys/compat/common/compat_mod.c:1.24.14.17 --- src/sys/compat/common/compat_mod.c:1.24.14.16 Sun Mar 18 12:06:59 2018 +++ src/sys/compat/common/compat_mod.c Mon Mar 19 21:54:43 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_mod.c,v 1.24.14.16 2018/03/18 12:06:59 pgoyette Exp $ */ +/* $NetBSD: compat_mod.c,v 1.24.14.17 2018/03/19 21:54:43 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.24.14.16 2018/03/18 12:06:59 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: compat_mod.c,v 1.24.14.17 2018/03/19 21:54:43 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -66,7 +66,7 @@ __KERNEL_RCSID(0, "$NetBSD: compat_mod.c #include <compat/sys/uvm.h> #include <compat/sys/cpuio.h> -#if defined(COMPAT_09) || defined(COMPAT_43) || defined(COMPAT_50) +#if defined(COMPAT_09) || defined(COMPAT_43) static struct sysctllog *compat_clog = NULL; #endif @@ -74,11 +74,6 @@ static struct sysctllog *compat_clog = N #include <compat/common/if_40.h> #endif -#ifdef COMPAT_50 -void if_50_init(void); -void if_50_fini(void); -#endif - #ifdef COMPAT_70 #include <net/route.h> #include <compat/net/route.h> @@ -86,7 +81,7 @@ void if_50_fini(void); #endif static const char * const compat_includes[] = { - "compat_70", "compat_60", + "compat_70", "compat_60", "compat_50", NULL }; @@ -198,48 +193,24 @@ static const struct syscall_package comp #if defined(COMPAT_40) { SYS_compat_40_mount, 0, (sy_call_t *)compat_40_sys_mount }, #endif -#if defined(COMPAT_50) - { SYS_compat_50_wait4, 0, (sy_call_t *)compat_50_sys_wait4 }, - { SYS_compat_50_mknod, 0, (sy_call_t *)compat_50_sys_mknod }, - { SYS_compat_50_setitimer, 0, (sy_call_t *)compat_50_sys_setitimer }, - { SYS_compat_50_getitimer, 0, (sy_call_t *)compat_50_sys_getitimer }, - { SYS_compat_50_select, 0, (sy_call_t *)compat_50_sys_select }, - { SYS_compat_50_gettimeofday, 0, (sy_call_t *)compat_50_sys_gettimeofday }, - { SYS_compat_50_getrusage, 0, (sy_call_t *)compat_50_sys_getrusage }, - { SYS_compat_50_settimeofday, 0, (sy_call_t *)compat_50_sys_settimeofday }, - { SYS_compat_50_utimes, 0, (sy_call_t *)compat_50_sys_utimes }, - { SYS_compat_50_adjtime, 0, (sy_call_t *)compat_50_sys_adjtime }, -#ifdef LFS - { SYS_compat_50_lfs_segwait, 0, (sy_call_t *)compat_50_sys_lfs_segwait }, -#endif - { SYS_compat_50_futimes, 0, (sy_call_t *)compat_50_sys_futimes }, - { SYS_compat_50_clock_gettime, 0, (sy_call_t *)compat_50_sys_clock_gettime }, - { SYS_compat_50_clock_settime, 0, (sy_call_t *)compat_50_sys_clock_settime }, - { SYS_compat_50_clock_getres, 0, (sy_call_t *)compat_50_sys_clock_getres }, - { SYS_compat_50_timer_settime, 0, (sy_call_t *)compat_50_sys_timer_settime }, - { SYS_compat_50_timer_gettime, 0, (sy_call_t *)compat_50_sys_timer_gettime }, - { SYS_compat_50_nanosleep, 0, (sy_call_t *)compat_50_sys_nanosleep }, - { SYS_compat_50___sigtimedwait, 0, (sy_call_t *)compat_50_sys___sigtimedwait }, - { 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 }, - { 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 }, - { SYS_compat_50_pollts, 0, (sy_call_t *)compat_50_sys_pollts }, - { SYS_compat_50___stat30, 0, (sy_call_t *)compat_50_sys___stat30 }, - { SYS_compat_50___fstat30, 0, (sy_call_t *)compat_50_sys___fstat30 }, - { SYS_compat_50___lstat30, 0, (sy_call_t *)compat_50_sys___lstat30 }, -# if defined(NTP) - { SYS_compat_50___ntp_gettime30, 0, (sy_call_t *)compat_50_sys___ntp_gettime30 }, -# endif - { SYS_compat_50___fhstat40, 0, (sy_call_t *)compat_50_sys___fhstat40 }, - { SYS_compat_50_aio_suspend, 0, (sy_call_t *)compat_50_sys_aio_suspend }, - { SYS_compat_50_quotactl, 0, (sy_call_t *)compat_50_sys_quotactl }, -#endif { 0, 0, NULL }, }; +struct compat_init_fini { + int (*init)(void); + int (*fini)(void); +} init_fini_list[] = { +#ifdef COMPAT_70 + { compat_70_init, compat_70_fini }, +#endif +#ifdef COMPAT_60 + { compat_60_init, compat_60_fini }, +#endif +#ifdef COMPAT_50 + { compat_50_init, compat_50_fini }, +#endif +}; + static int compat_modcmd(modcmd_t cmd, void *arg) { @@ -247,9 +218,26 @@ compat_modcmd(modcmd_t cmd, void *arg) proc_t *p; #endif int error; + int i, j; switch (cmd) { case MODULE_CMD_INIT: + /* + * Call the init() routine for all components; if + * any component fails, disable (via fini() routine) + * those which had already been disabled before we + * return to prevent partial module initialization. + */ + for (i = 0; i < __arraycount(init_fini_list); i++) { + error = (*init_fini_list[i].init)(); + if (error != 0) { + for (j = i - 1; j >= 0; j--) { + (*init_fini_list[j].fini)(); + } + return error; + } + } + error = syscall_establish(NULL, compat_syscalls); if (error != 0) { return error; @@ -291,27 +279,9 @@ compat_modcmd(modcmd_t cmd, void *arg) vfs_syscalls_10_init(); #endif compat_sysctl_init(); -#ifdef COMPAT_50 - uvm_50_init(); - if_50_init(); -#endif -#ifdef COMPAT_70 - compat_70_init(); -#endif -#ifdef COMPAT_60 - if ((error = compat_60_init()) != 0) - return error; -#endif return 0; case MODULE_CMD_FINI: -#ifdef COMPAT_60 - if ((error = compat_60_fini()) != 0) - return error; -#endif -#ifdef COMPAT_70 - compat_70_fini(); -#endif #ifdef COMPAT_10 vfs_syscalls_10_fini(); #endif @@ -376,11 +346,23 @@ compat_modcmd(modcmd_t cmd, void *arg) #ifdef COMPAT_40 if_40_fini(); #endif -#ifdef COMPAT_50 - if_50_fini(); - uvm_50_fini(); -#endif + /* + * Disable included components in reverse order; + * if any component fails to fini(), re-init those + * components which had already been disabled + */ compat_sysctl_fini(); + for (i = __arraycount(init_fini_list) - 1; i >= 0; i--) { + error = (*init_fini_list[i].fini)(); + if (error != 0) { + for (j = i + 1; + j < __arraycount(init_fini_list); j++) { + (*init_fini_list[j].init)(); + } + return error; + } + } + return 0; default: @@ -395,22 +377,16 @@ compat_sysctl_init(void) #if defined(COMPAT_09) || defined(COMPAT_43) compat_sysctl_vfs(&compat_clog); #endif -#if defined(COMPAT_50) - compat_sysctl_time(&compat_clog); -#endif } void compat_sysctl_fini(void) { -#if defined(COMPAT_09) || defined(COMPAT_43) || defined(COMPAT_50) +#if defined(COMPAT_09) || defined(COMPAT_43) sysctl_teardown(&compat_clog); #endif #if defined(COMPAT_43) if_43_fini(); #endif -#ifdef COMPAT_50 - if_50_fini(); -#endif } Index: src/sys/compat/common/compat_mod.h diff -u src/sys/compat/common/compat_mod.h:1.1.42.6 src/sys/compat/common/compat_mod.h:1.1.42.7 --- src/sys/compat/common/compat_mod.h:1.1.42.6 Sun Mar 18 23:34:25 2018 +++ src/sys/compat/common/compat_mod.h Mon Mar 19 21:54:43 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_mod.h,v 1.1.42.6 2018/03/18 23:34:25 pgoyette Exp $ */ +/* $NetBSD: compat_mod.h,v 1.1.42.7 2018/03/19 21:54:43 pgoyette Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -37,7 +37,6 @@ void compat_sysctl_init(void); void compat_sysctl_fini(void); -void compat_sysctl_time(struct sysctllog **); void compat_sysctl_vfs(struct sysctllog **); #ifdef COMPAT_70 @@ -56,4 +55,21 @@ void kern_tty_60_init(void); void kern_tty_60_fini(void); #endif +#ifdef COMPAT_50 +int compat_50_init(void); +int compat_50_fini(void); +int kern_50_init(void); +int kern_50_fini(void); +int kern_time_50_init(void); +int kern_time_50_fini(void); +int kern_select_50_init(void); +int kern_select_50_fini(void); +void uvm_50_init(void); +void uvm_50_fini(void); +int vfs_syscalls_50_init(void); +int vfs_syscalls_50_fini(void); +void if_50_init(void); +void if_50_fini(void); +#endif + #endif /* !_COMPAT_MOD_H_ */ Index: src/sys/compat/common/files.common diff -u src/sys/compat/common/files.common:1.1.2.13 src/sys/compat/common/files.common:1.1.2.14 --- src/sys/compat/common/files.common:1.1.2.13 Sun Mar 18 21:41:31 2018 +++ src/sys/compat/common/files.common Mon Mar 19 21:54:43 2018 @@ -1,4 +1,4 @@ -# $NetBSD: files.common,v 1.1.2.13 2018/03/18 21:41:31 pgoyette Exp $ +# $NetBSD: files.common,v 1.1.2.14 2018/03/19 21:54:43 pgoyette Exp $ # # Generic files, used by all compat options. @@ -56,6 +56,7 @@ file compat/common/vfs_syscalls_40.c co file compat/common/uipc_syscalls_40.c compat_40 # Compatibility code for NetBSD 5.0 +file compat/common/compat_50_mod.c compat_50 file compat/common/kern_50.c compat_50 file compat/common/kern_time_50.c compat_50 file compat/common/kern_select_50.c compat_50 Index: src/sys/compat/common/kern_50.c diff -u src/sys/compat/common/kern_50.c:1.1 src/sys/compat/common/kern_50.c:1.1.34.1 --- src/sys/compat/common/kern_50.c:1.1 Fri Apr 4 18:17:36 2014 +++ src/sys/compat/common/kern_50.c Mon Mar 19 21:54:43 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_50.c,v 1.1 2014/04/04 18:17:36 njoly Exp $ */ +/* $NetBSD: kern_50.c,v 1.1.34.1 2018/03/19 21:54:43 pgoyette Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -29,16 +29,28 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_50.c,v 1.1 2014/04/04 18:17:36 njoly Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_50.c,v 1.1.34.1 2018/03/19 21:54:43 pgoyette Exp $"); #include <sys/param.h> #include <sys/lwp.h> #include <sys/proc.h> +#include <sys/syscall.h> +#include <sys/syscallvar.h> #include <sys/syscallargs.h> #include <compat/sys/resource.h> #include <compat/sys/time.h> +#include <compat/common/compat_mod.h> + +static const struct syscall_package kern_50_syscalls[] = { + { SYS_compat_50__lwp_park, 0, (sy_call_t *)compat_50_sys__lwp_park }, + { SYS_compat_50___sigtimedwait, 0, + (sy_call_t *)compat_50_sys___sigtimedwait }, + { SYS_compat_50_wait4, 0, (sy_call_t *)compat_50_sys_wait4 }, + { 0, 0, NULL } +}; + int compat_50_sys__lwp_park(struct lwp *l, const struct compat_50_sys__lwp_park_args *uap, register_t *retval) @@ -141,3 +153,17 @@ compat_50_sys_wait4(struct lwp *l, const return error; } + +int +kern_50_init(void) +{ + + return syscall_establish(NULL, kern_50_syscalls); +} + +int +kern_50_fini(void) +{ + + return syscall_disestablish(NULL, kern_50_syscalls); +} Index: src/sys/compat/common/kern_select_50.c diff -u src/sys/compat/common/kern_select_50.c:1.1 src/sys/compat/common/kern_select_50.c:1.1.60.1 --- src/sys/compat/common/kern_select_50.c:1.1 Mon Jan 17 15:57:04 2011 +++ src/sys/compat/common/kern_select_50.c Mon Mar 19 21:54:43 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_select_50.c,v 1.1 2011/01/17 15:57:04 pooka Exp $ */ +/* $NetBSD: kern_select_50.c,v 1.1.60.1 2018/03/19 21:54:43 pgoyette Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -29,16 +29,27 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_select_50.c,v 1.1 2011/01/17 15:57:04 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_select_50.c,v 1.1.60.1 2018/03/19 21:54:43 pgoyette Exp $"); #include <sys/param.h> #include <sys/event.h> #include <sys/poll.h> #include <sys/select.h> #include <sys/time.h> +#include <sys/syscall.h> +#include <sys/syscallvar.h> #include <sys/syscallargs.h> #include <compat/sys/time.h> +#include <compat/common/compat_mod.h> + +static const struct syscall_package kern_select_50_syscalls[] = { + { SYS_compat_50_kevent, 0, (sy_call_t *)compat_50_sys_kevent }, + { SYS_compat_50_select, 0, (sy_call_t *)compat_50_sys_select }, + { SYS_compat_50_pselect, 0, (sy_call_t *)compat_50_sys_pselect }, + { SYS_compat_50_pollts, 0, (sy_call_t *)compat_50_sys_pollts }, + { 0, 0, NULL } +}; static int compat_50_kevent_fetch_timeout(const void *src, void *dest, size_t length) @@ -174,3 +185,17 @@ compat_50_sys_pollts(struct lwp *l, cons return pollcommon(retval, SCARG(uap, fds), SCARG(uap, nfds), ts, mask); } + +int +kern_select_50_init(void) +{ + +return syscall_establish(NULL, kern_select_50_syscalls); +} + +int +kern_select_50_fini(void) +{ + +return syscall_disestablish(NULL, kern_select_50_syscalls); +} Index: src/sys/compat/common/kern_time_50.c diff -u src/sys/compat/common/kern_time_50.c:1.31 src/sys/compat/common/kern_time_50.c:1.31.16.1 --- src/sys/compat/common/kern_time_50.c:1.31 Fri Mar 11 18:32:29 2016 +++ src/sys/compat/common/kern_time_50.c Mon Mar 19 21:54:43 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_time_50.c,v 1.31 2016/03/11 18:32:29 christos Exp $ */ +/* $NetBSD: kern_time_50.c,v 1.31.16.1 2018/03/19 21:54:43 pgoyette Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -29,7 +29,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_time_50.c,v 1.31 2016/03/11 18:32:29 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_time_50.c,v 1.31.16.1 2018/03/19 21:54:43 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_aio.h" @@ -56,7 +56,9 @@ __KERNEL_RCSID(0, "$NetBSD: kern_time_50 #include <sys/clockctl.h> #include <sys/aio.h> #include <sys/poll.h> +#include <sys/syscall.h> #include <sys/syscallargs.h> +#include <sys/syscallvar.h> #include <sys/sysctl.h> #include <sys/resource.h> @@ -69,6 +71,44 @@ __KERNEL_RCSID(0, "$NetBSD: kern_time_50 struct timeval50 boottime50; +static struct sysctllog *kern_time_50_clog = NULL; + +static const struct syscall_package kern_time_50_syscalls[] = { + { SYS_compat_50_clock_gettime, 0, + (sy_call_t *)compat_50_sys_clock_gettime }, + { SYS_compat_50_clock_settime, 0, + (sy_call_t *)compat_50_sys_clock_settime }, + { SYS_compat_50_clock_getres, 0, + (sy_call_t *)compat_50_sys_clock_getres}, + { SYS_compat_50_nanosleep, 0, (sy_call_t *)compat_50_sys_nanosleep }, + { SYS_compat_50_gettimeofday, 0, + (sy_call_t *)compat_50_sys_gettimeofday }, + { SYS_compat_50_settimeofday, 0, + (sy_call_t *)compat_50_sys_settimeofday }, + { SYS_compat_50_adjtime, 0, (sy_call_t *)compat_50_sys_adjtime }, + { SYS_compat_50_setitimer, 0, (sy_call_t *)compat_50_sys_setitimer }, + { SYS_compat_50_getitimer, 0, (sy_call_t *)compat_50_sys_getitimer }, + { SYS_compat_50_aio_suspend, 0, + (sy_call_t *)compat_50_sys_aio_suspend }, + { 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_getrusage, 0, (sy_call_t *)compat_50_sys_getrusage }, + { SYS_compat_50_timer_settime, 0, + (sy_call_t *)compat_50_sys_timer_settime }, + { SYS_compat_50_timer_gettime, 0, + (sy_call_t *)compat_50_sys_timer_gettime }, + { SYS_compat_50___ntp_gettime30, 0, + (sy_call_t *)compat_50_sys___ntp_gettime30 }, + { 0, 0, NULL } + + + + + +}; + int compat_50_sys_clock_gettime(struct lwp *l, const struct compat_50_sys_clock_gettime_args *uap, register_t *retval) @@ -516,6 +556,9 @@ int compat_50_sys___ntp_gettime30(struct lwp *l, const struct compat_50_sys___ntp_gettime30_args *uap, register_t *retval) { +/* XXX + * XXX need to detect if kernel has NTP at run-time! + * XXX */ #ifdef NTP /* { syscallarg(struct ntptimeval *) ntvp; @@ -543,7 +586,7 @@ compat_50_sys___ntp_gettime30(struct lwp #endif } -void +static void compat_sysctl_time(struct sysctllog **clog) { struct timeval tv; @@ -558,3 +601,29 @@ compat_sysctl_time(struct sysctllog **cl NULL, 0, &boottime50, sizeof(boottime50), CTL_KERN, KERN_OBOOTTIME, CTL_EOL); } + +int +kern_time_50_init(void) +{ + int error; + + compat_sysctl_time(&kern_time_50_clog); + + error = syscall_establish(NULL, kern_time_50_syscalls); + if (error != 0) + sysctl_teardown(&kern_time_50_clog); + + return error; +} + +int +kern_time_50_fini(void) +{ + int error; + + error = syscall_disestablish(NULL, kern_time_50_syscalls); + if (error == 0) + sysctl_teardown(&kern_time_50_clog); + + return error; +} Index: src/sys/compat/common/vfs_syscalls_50.c diff -u src/sys/compat/common/vfs_syscalls_50.c:1.18 src/sys/compat/common/vfs_syscalls_50.c:1.18.18.1 --- src/sys/compat/common/vfs_syscalls_50.c:1.18 Fri Sep 5 09:21:54 2014 +++ src/sys/compat/common/vfs_syscalls_50.c Mon Mar 19 21:54:43 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_syscalls_50.c,v 1.18 2014/09/05 09:21:54 matt Exp $ */ +/* $NetBSD: vfs_syscalls_50.c,v 1.18.18.1 2018/03/19 21:54:43 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: vfs_syscalls_50.c,v 1.18 2014/09/05 09:21:54 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_50.c,v 1.18.18.1 2018/03/19 21:54:43 pgoyette Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -53,6 +53,9 @@ __KERNEL_RCSID(0, "$NetBSD: vfs_syscalls #include <sys/dirent.h> #include <sys/kauth.h> #include <sys/time.h> +#include <sys/syscall.h> +#include <sys/syscallvar.h> +#include <sys/syscallargs.h> #include <sys/vfs_syscalls.h> #ifndef LFS #define LFS @@ -66,6 +69,7 @@ __KERNEL_RCSID(0, "$NetBSD: vfs_syscalls #include <ufs/ufs/quota1.h> #include <compat/common/compat_util.h> +#include <compat/common/compat_mod.h> #include <compat/sys/time.h> #include <compat/sys/stat.h> #include <compat/sys/dirent.h> @@ -73,6 +77,21 @@ __KERNEL_RCSID(0, "$NetBSD: vfs_syscalls static void cvtstat(struct stat30 *, const struct stat *); +static const struct syscall_package vfs_syscalls_50_syscalls[] = { + { SYS_compat_50___stat30, 0, (sy_call_t *)compat_50_sys___stat30 }, + { SYS_compat_50___fstat30, 0, (sy_call_t *)compat_50_sys___fstat30 }, + { SYS_compat_50___lstat30, 0, (sy_call_t *)compat_50_sys___lstat30 }, + { SYS_compat_50___fhstat40, 0, (sy_call_t *)compat_50_sys___fhstat40 }, + { SYS_compat_50_utimes, 0, (sy_call_t *)compat_50_sys_utimes }, + { SYS_compat_50_lfs_segwait, 0, + (sy_call_t *)compat_50_sys_lfs_segwait } , + { SYS_compat_50_futimes, 0, (sy_call_t *)compat_50_sys_futimes }, + { SYS_compat_50_lutimes, 0, (sy_call_t *)compat_50_sys_lutimes }, + { SYS_compat_50_mknod, 0, (sy_call_t *)compat_50_sys_mknod }, + { SYS_compat_50_quotactl, 0, (sy_call_t *)compat_50_sys_quotactl }, + { 0, 0, NULL } +}; + /* * Convert from a new to an old stat structure. */ @@ -276,6 +295,7 @@ compat_50_sys_lfs_segwait(struct lwp *l, syscallarg(struct timeval50 *) tv; } */ #ifdef notyet +/* XXX need to check presence of LFS at run-time XXX */ struct timeval atv; struct timeval50 atv50; fsid_t fsid; @@ -426,3 +446,17 @@ compat_50_sys_quotactl(struct lwp *l, co vrele(vp); return error; } + +int +vfs_syscalls_50_init(void) +{ + + return syscall_establish(NULL, vfs_syscalls_50_syscalls); +} + +int +vfs_syscalls_50_fini(void) +{ + + return syscall_disestablish(NULL, vfs_syscalls_50_syscalls); +} Index: src/sys/modules/Makefile diff -u src/sys/modules/Makefile:1.202.2.8 src/sys/modules/Makefile:1.202.2.9 --- src/sys/modules/Makefile:1.202.2.8 Sun Mar 18 02:05:21 2018 +++ src/sys/modules/Makefile Mon Mar 19 21:54:43 2018 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.202.2.8 2018/03/18 02:05:21 pgoyette Exp $ +# $NetBSD: Makefile,v 1.202.2.9 2018/03/19 21:54:43 pgoyette Exp $ .include <bsd.own.mk> @@ -6,7 +6,7 @@ # Modules for compatability with earlier versions of NetBSD -SUBDIR+= compat compat_70 compat_60 # compat_50 compat_40 +SUBDIR+= compat compat_70 compat_60 compat_50 # compat_40 SUBDIR+= # compat_30 compat_20 compat_16 compat_14 compat_13 SUBDIR+= # compat_12 compat_10 compat_09 SUBDIR+= compat_ossaudio Added files: Index: src/sys/compat/common/compat_50_mod.c diff -u /dev/null src/sys/compat/common/compat_50_mod.c:1.1.2.1 --- /dev/null Mon Mar 19 21:54:43 2018 +++ src/sys/compat/common/compat_50_mod.c Mon Mar 19 21:54:43 2018 @@ -0,0 +1,151 @@ +/* $NetBSD: compat_50_mod.c,v 1.1.2.1 2018/03/19 21:54:43 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_50_mod.c,v 1.1.2.1 2018/03/19 21:54:43 pgoyette Exp $"); + +#ifdef _KERNEL_OPT +#include "opt_compat_netbsd.h" +#include "opt_compat_43.h" +#endif + +#include <sys/systm.h> +#include <sys/module.h> +#include <sys/sysctl.h> +#include <sys/syscall.h> +#include <sys/syscallvar.h> +#include <sys/syscallargs.h> + +#include <compat/common/compat_util.h> +#include <compat/common/compat_mod.h> + +int +compat_50_init(void) +{ + int error = 0; + + error = kern_50_init(); + if (error != 0) + return error; + + error = kern_time_50_init(); + if (error != 0) + goto err1; + + error = kern_select_50_init(); + if (error != 0) + goto err2; + + error = vfs_syscalls_50_init(); + if (error != 0) + goto err3; + + uvm_50_init(); + if_50_init(); + + return error; + +/* If an error occured, undo all previous set-up before returning */ + + err3: + kern_select_50_fini(); + err2: + kern_time_50_fini(); + err1: + kern_50_fini(); + + return error; +} + +int +compat_50_fini(void) +{ + int error = 0; + + if_50_fini(); + uvm_50_fini(); + + error = vfs_syscalls_50_fini(); + if (error != 0) + goto err1; + + error = kern_select_50_fini(); + if (error != 0) + goto err2; + + error = kern_time_50_fini(); + if (error != 0) + goto err3; + + error = kern_50_fini(); + if (error != 0) + goto err4; + + return error; + +/* If an error occurred while removing something, restore everything! */ + err4: + kern_time_50_init(); + err3: + kern_select_50_init(); + err2: + vfs_syscalls_50_init(); + err1: + uvm_50_init(); + if_50_init(); + + return error; +} + +#ifdef _MODULE + +#define REQUIRED_50 "compat_70,compat_60" /* XXX No compat_80 yet */ + +MODULE(MODULE_CLASS_EXEC, compat_50, REQUIRED_50); + +static int +compat_50_modcmd(modcmd_t cmd, void *arg) +{ + + switch (cmd) { + case MODULE_CMD_INIT: + return compat_50_init(); + case MODULE_CMD_FINI: + return compat_50_init(); + default: + return ENOTTY; + } +} +#endif Index: src/sys/modules/compat_50/Makefile diff -u /dev/null src/sys/modules/compat_50/Makefile:1.1.2.1 --- /dev/null Mon Mar 19 21:54:43 2018 +++ src/sys/modules/compat_50/Makefile Mon Mar 19 21:54:43 2018 @@ -0,0 +1,16 @@ +# $NetBSD: Makefile,v 1.1.2.1 2018/03/19 21:54:43 pgoyette Exp $ + +.include "../Makefile.inc" + +.PATH: ${S}/compat/common + +KMOD= compat_50 + +CPPFLAGS+= -DCOMPAT_50 -DCOMPAT_60 -DCOMPAT_70 -DCOMPAT_80 + +SRCS+= compat_50_mod.c +SRCS+= kern_50.c kern_time_50.c kern_select_50.c +SRCS+= vfs_syscalls_50.c uipc_syscalls_50.c uvm_50.c +#SRCS+= rndpseudo_50.c rtsock_50.c + +.include <bsd.kmodule.mk>