Module Name: src Committed By: rin Date: Sat Jul 29 12:38:25 UTC 2023
Modified Files: src/sys/compat/netbsd32: netbsd32.h netbsd32_compat_100.c netbsd32_compat_50.c netbsd32_conv.h netbsd32_event.c syscalls.master Added Files: src/sys/compat/netbsd32: netbsd32_event.h Log Message: COMPAT_NETBSD32: Catch up with sys___kevent100() addition. XXX Add epoll_* and memfd_create. To generate a diff of this commit: cvs rdiff -u -r1.141 -r1.142 src/sys/compat/netbsd32/netbsd32.h \ src/sys/compat/netbsd32/syscalls.master cvs rdiff -u -r1.1 -r1.2 src/sys/compat/netbsd32/netbsd32_compat_100.c cvs rdiff -u -r1.53 -r1.54 src/sys/compat/netbsd32/netbsd32_compat_50.c cvs rdiff -u -r1.46 -r1.47 src/sys/compat/netbsd32/netbsd32_conv.h cvs rdiff -u -r1.12 -r1.13 src/sys/compat/netbsd32/netbsd32_event.c cvs rdiff -u -r0 -r1.1 src/sys/compat/netbsd32/netbsd32_event.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.h diff -u src/sys/compat/netbsd32/netbsd32.h:1.141 src/sys/compat/netbsd32/netbsd32.h:1.142 --- src/sys/compat/netbsd32/netbsd32.h:1.141 Sun Feb 12 16:28:32 2023 +++ src/sys/compat/netbsd32/netbsd32.h Sat Jul 29 12:38:25 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32.h,v 1.141 2023/02/12 16:28:32 andvar Exp $ */ +/* $NetBSD: netbsd32.h,v 1.142 2023/07/29 12:38:25 rin Exp $ */ /* * Copyright (c) 1998, 2001, 2008, 2015 Matthew R. Green @@ -1024,6 +1024,19 @@ struct netbsd32_kevent { uint32_t fflags; netbsd32_int64 data; netbsd32_pointer_t udata; + netbsd32_uint64 ext[4]; +}; + +/* from <compat/sys/event.h> */ +typedef netbsd32_pointer_t netbsd32_kevent100p_t; + +struct netbsd32_kevent100 { + netbsd32_uintptr_t ident; + uint32_t filter; + uint32_t flags; + uint32_t fflags; + netbsd32_int64 data; + netbsd32_pointer_t udata; }; /* from <sys/sched.h> */ Index: src/sys/compat/netbsd32/syscalls.master diff -u src/sys/compat/netbsd32/syscalls.master:1.141 src/sys/compat/netbsd32/syscalls.master:1.142 --- src/sys/compat/netbsd32/syscalls.master:1.141 Mon Sep 20 01:07:45 2021 +++ src/sys/compat/netbsd32/syscalls.master Sat Jul 29 12:38:25 2023 @@ -1,4 +1,4 @@ - $NetBSD: syscalls.master,v 1.141 2021/09/20 01:07:45 thorpej Exp $ + $NetBSD: syscalls.master,v 1.142 2023/07/29 12:38:25 rin Exp $ ; from: NetBSD: syscalls.master,v 1.81 1998/07/05 08:49:50 jonathan Exp ; @(#)syscalls.master 8.2 (Berkeley) 1/13/94 @@ -783,9 +783,9 @@ 344 NOARGS { int|sys||kqueue(void); } 345 COMPAT_50 MODULAR compat_netbsd32_50 \ { int|netbsd32||kevent(int fd, \ - netbsd32_keventp_t changelist, \ + netbsd32_kevent100p_t changelist, \ netbsd32_size_t nchanges, \ - netbsd32_keventp_t eventlist, \ + netbsd32_kevent100p_t eventlist, \ netbsd32_size_t nevents, \ netbsd32_timespec50p_t timeout); } ; Scheduling system calls. @@ -1016,10 +1016,11 @@ const netbsd32_timespecp_t ts, \ lwpid_t unpark, const netbsd32_voidp hint, \ const netbsd32_voidp unparkhint); } -435 STD { int|netbsd32|50|kevent(int fd, \ - const netbsd32_keventp_t changelist, \ +435 COMPAT_100 MODULAR compat_netbsd32_100 \ + { int|netbsd32|50|kevent(int fd, \ + const netbsd32_kevent100p_t changelist, \ netbsd32_size_t nchanges, \ - netbsd32_keventp_t eventlist, \ + netbsd32_kevent100p_t eventlist, \ netbsd32_size_t nevents, \ const netbsd32_timespecp_t timeout); } 436 STD { int|netbsd32|50|pselect(int nd, \ @@ -1213,3 +1214,13 @@ acl_type_t type, netbsd32_aclp_t aclp); } 499 STD { long|netbsd32||lpathconf(const netbsd32_charp path, \ int name); } +500 UNIMPL memfd_create +501 STD { int|netbsd32|100|kevent(int fd, \ + const netbsd32_keventp_t changelist, \ + netbsd32_size_t nchanges, \ + netbsd32_keventp_t eventlist, \ + netbsd32_size_t nevents, \ + const netbsd32_timespecp_t timeout); } +502 UNIMPL epoll_create1 +503 UNIMPL epoll_ctl +504 UNIMPL epoll_pwait2 Index: src/sys/compat/netbsd32/netbsd32_compat_100.c diff -u src/sys/compat/netbsd32/netbsd32_compat_100.c:1.1 src/sys/compat/netbsd32/netbsd32_compat_100.c:1.2 --- src/sys/compat/netbsd32/netbsd32_compat_100.c:1.1 Mon Dec 19 23:19:51 2022 +++ src/sys/compat/netbsd32/netbsd32_compat_100.c Sat Jul 29 12:38:25 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_compat_100.c,v 1.1 2022/12/19 23:19:51 pgoyette Exp $ */ +/* $NetBSD: netbsd32_compat_100.c,v 1.2 2023/07/29 12:38:25 rin Exp $ */ /*- * Copyright (c) 2019 The NetBSD Foundation, Inc. @@ -30,14 +30,126 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_100.c,v 1.1 2022/12/19 23:19:51 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_100.c,v 1.2 2023/07/29 12:38:25 rin Exp $"); +#include <sys/types.h> +#include <sys/event.h> +#include <sys/eventvar.h> #include <sys/module.h> +#include <sys/syscallvar.h> +#include <sys/syscallargs.h> +#include <sys/systm.h> #include <compat/netbsd32/netbsd32.h> #include <compat/netbsd32/netbsd32_syscall.h> #include <compat/netbsd32/netbsd32_syscallargs.h> #include <compat/netbsd32/netbsd32_conv.h> +#include <compat/netbsd32/netbsd32_event.h> + +static int +compat_100_netbsd32_kevent_fetch_timeout(const void *src, void *dest, + size_t length) +{ + struct netbsd32_timespec ts32; + int error; + + KASSERT(length == sizeof(struct timespec)); + + error = copyin(src, &ts32, sizeof(ts32)); + if (error) + return error; + netbsd32_to_timespec(&ts32, (struct timespec *)dest); + return 0; +} + +static void +compat_100_netbsd32_to_kevent(const struct netbsd32_kevent100 *ke32, + struct kevent *ke) +{ + + memset(ke, 0, sizeof(*ke)); + ke->ident = ke32->ident; + ke->filter = ke32->filter; + ke->flags = ke32->flags; + ke->fflags = ke32->fflags; + ke->data = ke32->data; + ke->udata = NETBSD32PTR64(ke32->udata); +} + +static void +compat_100_netbsd32_from_kevent(const struct kevent *ke, + struct netbsd32_kevent100 *ke32) +{ + + memset(ke32, 0, sizeof(*ke32)); + ke32->ident = ke->ident; + ke32->filter = ke->filter; + ke32->flags = ke->flags; + ke32->fflags = ke->fflags; + ke32->data = ke->data; + NETBSD32PTR32(ke32->udata, ke->udata); +} + +int +compat_100_netbsd32_kevent_fetch_changes(void *ctx, + const struct kevent *changelist, struct kevent *changes, size_t index, + int n) +{ + const struct netbsd32_kevent100 *src = + (const struct netbsd32_kevent100 *)changelist; + struct netbsd32_kevent100 *ke32, *changes32 = ctx; + int error, i; + + error = copyin(src + index, changes32, n * sizeof(*changes32)); + if (error) + return error; + for (i = 0, ke32 = changes32; i < n; i++, ke32++, changes++) + compat_100_netbsd32_to_kevent(ke32, changes); + return 0; +} + +int +compat_100_netbsd32_kevent_put_events(void *ctx, struct kevent *events, + struct kevent *eventlist, size_t index, int n) +{ + struct netbsd32_kevent100 *ke32, *events32 = ctx; + int i; + + for (i = 0, ke32 = events32; i < n; i++, ke32++, events++) + compat_100_netbsd32_from_kevent(events, ke32); + ke32 = ((struct netbsd32_kevent100 *)eventlist) + index; + return copyout(events32, ke32, n * sizeof(*events32)); +} + +int +compat_100_netbsd32___kevent50(struct lwp *l, + const struct compat_100_netbsd32___kevent50_args *uap, register_t *retval) +{ + /* { + syscallarg(int) fd; + syscallarg(const netbsd32_kevent100p_t) changelist; + syscallarg(netbsd32_size_t) nchanges; + syscallarg(netbsd32_kevent100p_t) eventlist; + syscallarg(netbsd32_size_t) nevents; + syscallarg(netbsd32_timespecp_t) timeout; + } */ + struct kevent_ops netbsd32_kevent_ops = { + .keo_fetch_timeout = compat_100_netbsd32_kevent_fetch_timeout, + .keo_fetch_changes = compat_100_netbsd32_kevent_fetch_changes, + .keo_put_events = compat_100_netbsd32_kevent_put_events, + }; + + return netbsd32_kevent1(retval, SCARG(uap, fd), + (netbsd32_keventp_t)SCARG(uap, changelist), SCARG(uap, nchanges), + (netbsd32_keventp_t)SCARG(uap, eventlist), SCARG(uap, nevents), + SCARG(uap, timeout), &netbsd32_kevent_ops); +} + +static struct syscall_package compat_netbsd32_100_syscalls[] = { + { NETBSD32_SYS_compat_100_netbsd32___kevent50, 0, + (sy_call_t *)compat_100_netbsd32___kevent50 }, + { 0, 0, NULL }, +}; MODULE(MODULE_CLASS_EXEC, compat_netbsd32_100, "compat_netbsd32,compat_100"); @@ -47,10 +159,12 @@ compat_netbsd32_100_modcmd(modcmd_t cmd, switch (cmd) { case MODULE_CMD_INIT: - return 0; + return syscall_establish(&emul_netbsd32, + compat_netbsd32_100_syscalls); case MODULE_CMD_FINI: - return 0; + return syscall_disestablish(&emul_netbsd32, + compat_netbsd32_100_syscalls); default: return ENOTTY; Index: src/sys/compat/netbsd32/netbsd32_compat_50.c diff -u src/sys/compat/netbsd32/netbsd32_compat_50.c:1.53 src/sys/compat/netbsd32/netbsd32_compat_50.c:1.54 --- src/sys/compat/netbsd32/netbsd32_compat_50.c:1.53 Wed Oct 26 23:23:52 2022 +++ src/sys/compat/netbsd32/netbsd32_compat_50.c Sat Jul 29 12:38:25 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_compat_50.c,v 1.53 2022/10/26 23:23:52 riastradh Exp $ */ +/* $NetBSD: netbsd32_compat_50.c,v 1.54 2023/07/29 12:38:25 rin Exp $ */ /*- * Copyright (c) 2008, 2020 The NetBSD Foundation, Inc. @@ -29,7 +29,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_50.c,v 1.53 2022/10/26 23:23:52 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_50.c,v 1.54 2023/07/29 12:38:25 rin Exp $"); #if defined(_KERNEL_OPT) #include "opt_compat_netbsd.h" @@ -71,6 +71,7 @@ __KERNEL_RCSID(0, "$NetBSD: netbsd32_com #include <compat/netbsd32/netbsd32_syscall.h> #include <compat/netbsd32/netbsd32_syscallargs.h> #include <compat/netbsd32/netbsd32_conv.h> +#include <compat/netbsd32/netbsd32_event.h> #include <compat/sys/mount.h> #include <compat/sys/time.h> #include <compat/sys/rnd.h> @@ -577,7 +578,8 @@ compat_50_netbsd32__lwp_park(struct lwp } static int -netbsd32_kevent_fetch_timeout(const void *src, void *dest, size_t length) +compat_50_netbsd32_kevent_fetch_timeout(const void *src, void *dest, + size_t length) { struct netbsd32_timespec50 ts32; int error; @@ -591,71 +593,28 @@ netbsd32_kevent_fetch_timeout(const void return 0; } -static int -netbsd32_kevent_fetch_changes(void *ctx, const struct kevent *changelist, - struct kevent *changes, size_t index, int n) -{ - const struct netbsd32_kevent *src = - (const struct netbsd32_kevent *)changelist; - struct netbsd32_kevent *kev32, *changes32 = ctx; - int error, i; - - error = copyin(src + index, changes32, n * sizeof(*changes32)); - if (error) - return error; - for (i = 0, kev32 = changes32; i < n; i++, kev32++, changes++) - netbsd32_to_kevent(kev32, changes); - return 0; -} - -static int -netbsd32_kevent_put_events(void *ctx, struct kevent *events, - struct kevent *eventlist, size_t index, int n) -{ - struct netbsd32_kevent *kev32, *events32 = ctx; - int i; - - for (i = 0, kev32 = events32; i < n; i++, kev32++, events++) - netbsd32_from_kevent(events, kev32); - kev32 = (struct netbsd32_kevent *)eventlist; - return copyout(events32, kev32, n * sizeof(*events32)); -} - int compat_50_netbsd32_kevent(struct lwp *l, const struct compat_50_netbsd32_kevent_args *uap, register_t *retval) { /* { syscallarg(int) fd; - syscallarg(netbsd32_keventp_t) changelist; + syscallarg(netbsd32_kevent100p_t) changelist; syscallarg(netbsd32_size_t) nchanges; - syscallarg(netbsd32_keventp_t) eventlist; + syscallarg(netbsd32_kevent100p_t) eventlist; syscallarg(netbsd32_size_t) nevents; syscallarg(netbsd32_timespec50p_t) timeout; } */ - int error; - size_t maxalloc, nchanges, nevents; - struct kevent_ops netbsd32_kevent_ops = { - .keo_fetch_timeout = netbsd32_kevent_fetch_timeout, - .keo_fetch_changes = netbsd32_kevent_fetch_changes, - .keo_put_events = netbsd32_kevent_put_events, + struct kevent_ops kops = { + .keo_fetch_timeout = compat_50_netbsd32_kevent_fetch_timeout, + .keo_fetch_changes = compat_100_netbsd32_kevent_fetch_changes, + .keo_put_events = compat_100_netbsd32_kevent_put_events, }; - nchanges = SCARG(uap, nchanges); - nevents = SCARG(uap, nevents); - maxalloc = KQ_NEVENTS; - - netbsd32_kevent_ops.keo_private = - kmem_alloc(maxalloc * sizeof(struct netbsd32_kevent), KM_SLEEP); - - error = kevent1(retval, SCARG(uap, fd), - NETBSD32PTR64(SCARG(uap, changelist)), nchanges, - NETBSD32PTR64(SCARG(uap, eventlist)), nevents, - NETBSD32PTR64(SCARG(uap, timeout)), &netbsd32_kevent_ops); - - kmem_free(netbsd32_kevent_ops.keo_private, - maxalloc * sizeof(struct netbsd32_kevent)); - return error; + return netbsd32_kevent1(retval, SCARG(uap, fd), + (netbsd32_keventp_t)SCARG(uap, changelist), SCARG(uap, nchanges), + (netbsd32_keventp_t)SCARG(uap, eventlist), SCARG(uap, nevents), + (netbsd32_timespecp_t)SCARG(uap, timeout), &kops); } int Index: src/sys/compat/netbsd32/netbsd32_conv.h diff -u src/sys/compat/netbsd32/netbsd32_conv.h:1.46 src/sys/compat/netbsd32/netbsd32_conv.h:1.47 --- src/sys/compat/netbsd32/netbsd32_conv.h:1.46 Tue Sep 7 11:43:05 2021 +++ src/sys/compat/netbsd32/netbsd32_conv.h Sat Jul 29 12:38:25 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_conv.h,v 1.46 2021/09/07 11:43:05 riastradh Exp $ */ +/* $NetBSD: netbsd32_conv.h,v 1.47 2023/07/29 12:38:25 rin Exp $ */ /* * Copyright (c) 1998, 2001 Matthew R. Green @@ -812,6 +812,7 @@ netbsd32_to_kevent(struct netbsd32_keven ke->fflags = ke32->fflags; ke->data = ke32->data; ke->udata = NETBSD32PTR64(ke32->udata); + memcpy(&ke->ext, &ke32->ext, sizeof(ke->ext)); } static __inline void @@ -825,6 +826,7 @@ netbsd32_from_kevent(struct kevent *ke, ke32->fflags = ke->fflags; ke32->data = ke->data; NETBSD32PTR32(ke32->udata, ke->udata); + memcpy(&ke32->ext, &ke->ext, sizeof(ke32->ext)); } static __inline void Index: src/sys/compat/netbsd32/netbsd32_event.c diff -u src/sys/compat/netbsd32/netbsd32_event.c:1.12 src/sys/compat/netbsd32/netbsd32_event.c:1.13 --- src/sys/compat/netbsd32/netbsd32_event.c:1.12 Fri Sep 5 05:26:26 2014 +++ src/sys/compat/netbsd32/netbsd32_event.c Sat Jul 29 12:38:25 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_event.c,v 1.12 2014/09/05 05:26:26 matt Exp $ */ +/* $NetBSD: netbsd32_event.c,v 1.13 2023/07/29 12:38:25 rin Exp $ */ /* * Copyright (c) 2005 The NetBSD Foundation. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netbsd32_event.c,v 1.12 2014/09/05 05:26:26 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbsd32_event.c,v 1.13 2023/07/29 12:38:25 rin Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -44,6 +44,7 @@ __KERNEL_RCSID(0, "$NetBSD: netbsd32_eve #include <compat/netbsd32/netbsd32_syscall.h> #include <compat/netbsd32/netbsd32_syscallargs.h> #include <compat/netbsd32/netbsd32_conv.h> +#include <compat/netbsd32/netbsd32_event.h> static int netbsd32_kevent_fetch_timeout(const void *src, void *dest, size_t length) @@ -91,38 +92,44 @@ netbsd32_kevent_put_events(void *ctx, st } int -netbsd32___kevent50(struct lwp *l, - const struct netbsd32___kevent50_args *uap, register_t *retval) +netbsd32_kevent1(register_t *retval, int fd, + const netbsd32_keventp_t changelist, netbsd32_size_t nchanges, + netbsd32_keventp_t eventlist, netbsd32_size_t nevents, + netbsd32_timespecp_t timeout, struct kevent_ops *kops) +{ + const size_t maxalloc = KQ_NEVENTS; + int error; + + kops->keo_private = + kmem_alloc(maxalloc * sizeof(struct netbsd32_kevent), KM_SLEEP); + + error = kevent1(retval, fd, NETBSD32PTR64(changelist), nchanges, + NETBSD32PTR64(eventlist), nevents, NETBSD32PTR64(timeout), kops); + + kmem_free(kops->keo_private, maxalloc * sizeof(struct netbsd32_kevent)); + return error; +} + +int +netbsd32___kevent100(struct lwp *l, + const struct netbsd32___kevent100_args *uap, register_t *retval) { /* { syscallarg(int) fd; - syscallarg(netbsd32_keventp_t) changelist; + syscallarg(const netbsd32_keventp_t) changelist; syscallarg(netbsd32_size_t) nchanges; syscallarg(netbsd32_keventp_t) eventlist; syscallarg(netbsd32_size_t) nevents; syscallarg(netbsd32_timespecp_t) timeout; } */ - int error; - size_t maxalloc, nchanges, nevents; - struct kevent_ops netbsd32_kevent_ops = { + struct kevent_ops kops = { .keo_fetch_timeout = netbsd32_kevent_fetch_timeout, .keo_fetch_changes = netbsd32_kevent_fetch_changes, .keo_put_events = netbsd32_kevent_put_events, }; - nchanges = SCARG(uap, nchanges); - nevents = SCARG(uap, nevents); - maxalloc = KQ_NEVENTS; - - netbsd32_kevent_ops.keo_private = - kmem_alloc(maxalloc * sizeof(struct netbsd32_kevent), KM_SLEEP); - - error = kevent1(retval, SCARG(uap, fd), - NETBSD32PTR64(SCARG(uap, changelist)), nchanges, - NETBSD32PTR64(SCARG(uap, eventlist)), nevents, - NETBSD32PTR64(SCARG(uap, timeout)), &netbsd32_kevent_ops); - - kmem_free(netbsd32_kevent_ops.keo_private, - maxalloc * sizeof(struct netbsd32_kevent)); - return error; + return netbsd32_kevent1(retval, SCARG(uap, fd), + SCARG(uap, changelist), SCARG(uap, nchanges), + SCARG(uap, eventlist), SCARG(uap, nevents), + SCARG(uap, timeout), &kops); } Added files: Index: src/sys/compat/netbsd32/netbsd32_event.h diff -u /dev/null src/sys/compat/netbsd32/netbsd32_event.h:1.1 --- /dev/null Sat Jul 29 12:38:25 2023 +++ src/sys/compat/netbsd32/netbsd32_event.h Sat Jul 29 12:38:25 2023 @@ -0,0 +1,45 @@ +/* $NetBSD: netbsd32_event.h,v 1.1 2023/07/29 12:38:25 rin Exp $ */ + +/* + * Copyright (c) 2023 NetBSD Foundation, Inc. + * All rights reserved. + * + * 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 AUTHOR ``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 AUTHOR 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. + */ + +#ifndef _NETBSD32_EVENT_H_ +#define _NETBSD32_EVENT_H_ + +#include <compat/netbsd32/netbsd32.h> + +/* netbsd32_event.c */ +int netbsd32_kevent1(register_t *, int, const netbsd32_kevent100p_t, + netbsd32_size_t, netbsd32_kevent100p_t, netbsd32_size_t, + netbsd32_timespecp_t, struct kevent_ops *); + +/* netbsd32_compat_100.c */ +int compat_100_netbsd32_kevent_fetch_changes(void *, const struct kevent *, + struct kevent *, size_t, int); +int compat_100_netbsd32_kevent_put_events(void *, struct kevent *, + struct kevent *, size_t, int); + +#endif /* !_NETBSD32_EVENT_H_ */