kernel, world - Remove the remaining vestiges of linux emul
authorMatthew Dillon <dillon@apollo.backplane.com>
Sat, 6 Aug 2016 17:53:59 +0000 (10:53 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Sat, 6 Aug 2016 17:53:59 +0000 (10:53 -0700)
* Remove the remaining bits of the 32-bit linux emulation code.  This
  code hasn't been used in ages and we have no plans to implement a
  64-bit linux emulation.

70 files changed:
Makefile_upgrade.inc
etc/defaults/make.conf
include/Makefile
share/man/man9/syscall.9
sys/Makefile
sys/bus/cam/scsi/scsi_sg.c
sys/dev/raid/aac/Makefile
sys/dev/raid/aac/aac_linux.c [deleted file]
sys/dev/raid/aac/aac_linux/Makefile [deleted file]
sys/dev/raid/amr/Makefile
sys/dev/raid/amr/amr_linux.c [deleted file]
sys/dev/raid/amr/amr_linux/Makefile [deleted file]
sys/dev/raid/mfi/Makefile
sys/dev/raid/mfi/mfi_linux.c [deleted file]
sys/dev/raid/mfi/mfi_linux/Makefile [deleted file]
sys/emulation/Makefile
sys/emulation/linux/Makefile [deleted file]
sys/emulation/linux/i386/Makefile [deleted file]
sys/emulation/linux/i386/imgact_linux.c [deleted file]
sys/emulation/linux/i386/linprocfs/Makefile [deleted file]
sys/emulation/linux/i386/linprocfs/linprocfs.h [deleted file]
sys/emulation/linux/i386/linprocfs/linprocfs_misc.c [deleted file]
sys/emulation/linux/i386/linprocfs/linprocfs_subr.c [deleted file]
sys/emulation/linux/i386/linprocfs/linprocfs_vfsops.c [deleted file]
sys/emulation/linux/i386/linprocfs/linprocfs_vnops.c [deleted file]
sys/emulation/linux/i386/linux.h [deleted file]
sys/emulation/linux/i386/linux_dummy.c [deleted file]
sys/emulation/linux/i386/linux_genassym.c [deleted file]
sys/emulation/linux/i386/linux_locore.s [deleted file]
sys/emulation/linux/i386/linux_machdep.c [deleted file]
sys/emulation/linux/i386/linux_proto.h [deleted file]
sys/emulation/linux/i386/linux_ptrace.c [deleted file]
sys/emulation/linux/i386/linux_support.s [deleted file]
sys/emulation/linux/i386/linux_syscall.h [deleted file]
sys/emulation/linux/i386/linux_sysent.c [deleted file]
sys/emulation/linux/i386/linux_sysvec.c [deleted file]
sys/emulation/linux/i386/linux_union.h [deleted file]
sys/emulation/linux/i386/syscalls.conf [deleted file]
sys/emulation/linux/i386/syscalls.master [deleted file]
sys/emulation/linux/linux_emuldata.c [deleted file]
sys/emulation/linux/linux_emuldata.h [deleted file]
sys/emulation/linux/linux_epoll.c [deleted file]
sys/emulation/linux/linux_epoll.h [deleted file]
sys/emulation/linux/linux_file.c [deleted file]
sys/emulation/linux/linux_futex.c [deleted file]
sys/emulation/linux/linux_futex.h [deleted file]
sys/emulation/linux/linux_getcwd.c [deleted file]
sys/emulation/linux/linux_ioctl.c [deleted file]
sys/emulation/linux/linux_ioctl.h [deleted file]
sys/emulation/linux/linux_ipc.c [deleted file]
sys/emulation/linux/linux_ipc.h [deleted file]
sys/emulation/linux/linux_mib.c [deleted file]
sys/emulation/linux/linux_mib.h [deleted file]
sys/emulation/linux/linux_misc.c [deleted file]
sys/emulation/linux/linux_signal.c [deleted file]
sys/emulation/linux/linux_signal.h [deleted file]
sys/emulation/linux/linux_socket.c [deleted file]
sys/emulation/linux/linux_socket.h [deleted file]
sys/emulation/linux/linux_stats.c [deleted file]
sys/emulation/linux/linux_sysctl.c [deleted file]
sys/emulation/linux/linux_sysproto.h [deleted file]
sys/emulation/linux/linux_time.c [deleted file]
sys/emulation/linux/linux_uid16.c [deleted file]
sys/emulation/linux/linux_util.c [deleted file]
sys/emulation/linux/linux_util.h [deleted file]
usr.bin/truss/Makefile
usr.bin/truss/extern.h
usr.bin/truss/i386-linux.c [deleted file]
usr.bin/truss/i386linux.conf [deleted file]
usr.bin/truss/syscalls.c

index e83ee35..99003b7 100644 (file)
@@ -3116,6 +3116,16 @@ TO_REMOVE+=/usr/share/man/man8/mk-amd-map.8.gz
 TO_REMOVE+=/usr/share/man/man8/wire-test.8.gz
 TO_REMOVE+=/usr/include/varargs.h
 TO_REMOVE+=/usr/include/bus/pci/pcibus.h
+TO_REMOVE+=/usr/include/emulation/linux/linux_emuldata.h
+TO_REMOVE+=/usr/include/emulation/linux/linux_epoll.h
+TO_REMOVE+=/usr/include/emulation/linux/linux_futex.h
+TO_REMOVE+=/usr/include/emulation/linux/linux_ioctl.h
+TO_REMOVE+=/usr/include/emulation/linux/linux_ipc.h
+TO_REMOVE+=/usr/include/emulation/linux/linux_mib.h
+TO_REMOVE+=/usr/include/emulation/linux/linux_signal.h
+TO_REMOVE+=/usr/include/emulation/linux/linux_socket.h
+TO_REMOVE+=/usr/include/emulation/linux/linux_sysproto.h
+TO_REMOVE+=/usr/include/emulation/linux/linux_util.h
 TO_REMOVE+=/usr/share/openssl/man/man3/CMS_set1_signer_certs.3.gz
 TO_REMOVE+=/usr/share/openssl/man/man3/d2i_509_CRL_fp.3.gz
 TO_REMOVE+=/usr/share/openssl/man/man3/EVP_PKEY_ctrl.3.gz
index 408bf73..b9a7604 100644 (file)
@@ -121,7 +121,7 @@ THREAD_LIB?=        thread_xu
 #MODULES_WITH_WORLD=true       # do not build modules when building kernel
 #
 # The list of modules to build instead of all of them.
-#MODULES_OVERRIDE=     emulation/linux net/ipfw
+#MODULES_OVERRIDE=     net/ipfw
 #
 # The paper size for groff(1), either "letter" or "A4"
 #GROFF_PAPER_SIZE=     letter
index f005fa6..a232176 100644 (file)
@@ -62,7 +62,6 @@ LSUBDIRS= \
        dev/raid/ciss dev/raid/mfi \
        dev/smbus/smb \
        dev/video/bktr dev/video/meteor \
-       emulation/linux \
        gnu/vfs/ext2fs \
        libprop \
        net/bridge net/tap net/tun net/ppp net/ppp_layer net/sl \
index 4e677b2..0ff744e 100644 (file)
@@ -164,8 +164,6 @@ system call switch tables;
 system call argument lists;
 .It Pa sys/sys/syscall.h
 system call numbers.
-.\".It Pa sys/emulation/linux/i386
-.\"Linux emulation system calls.
 .El
 .Sh SEE ALSO
 .Xr ktrace 2 ,
index 4b2539e..881afe0 100644 (file)
@@ -28,7 +28,6 @@ HTAGSFLAGS+= -at `awk -F= '/^RELEASE *=/{release=$2}; END {print "FreeBSD", rele
 
 all_sysent:
        (cd ${.CURDIR}/kern; ${MAKE} sysent)
-       (cd ${.CURDIR}/emulation/linux/i386; ${MAKE} sysent) 
 
 # XXX this may be temporary, should the module build be incorporated
 # into the default build (make the SUBDIR additions above non-conditional)?
index 9cb96ed..916f794 100644 (file)
@@ -52,8 +52,6 @@
 #include "../cam_debug.h"
 #include "../cam_sim.h"
 
-#include <emulation/linux/linux_ioctl.h>
-
 #include "scsi_all.h"
 #include "scsi_message.h"
 #include "scsi_sg.h"
@@ -448,6 +446,7 @@ sgioctl(struct dev_ioctl_args *ap)
        error = 0;
 
        switch (ap->a_cmd) {
+#if 0
        case LINUX_SCSI_GET_BUS_NUMBER: {
                int busno;
 
@@ -465,12 +464,11 @@ sgioctl(struct dev_ioctl_args *ap)
                error = copyout(&idlun, ap->a_data, sizeof(idlun));
                break;
        }
+#endif
        case SG_GET_VERSION_NUM:
-       case LINUX_SG_GET_VERSION_NUM:
                error = copyout(&sg_version, ap->a_data, sizeof(sg_version));
                break;
-       case SG_SET_TIMEOUT:
-       case LINUX_SG_SET_TIMEOUT: {
+       case SG_SET_TIMEOUT: {
                u_int user_timeout;
 
                error = copyin(ap->a_data, &user_timeout, sizeof(u_int));
@@ -481,7 +479,6 @@ sgioctl(struct dev_ioctl_args *ap)
                break;
        }
        case SG_GET_TIMEOUT:
-       case LINUX_SG_GET_TIMEOUT:
                /*
                 * The value is returned directly to the syscall.
                 */
@@ -489,7 +486,6 @@ sgioctl(struct dev_ioctl_args *ap)
                error = 0;
                break;
        case SG_IO:
-       case LINUX_SG_IO:
                error = copyin(ap->a_data, &req, sizeof(req));
                if (error)
                        break;
@@ -567,8 +563,7 @@ sgioctl(struct dev_ioctl_args *ap)
                xpt_release_ccb(ccb);
                break;
 
-       case SG_GET_RESERVED_SIZE:
-       case LINUX_SG_GET_RESERVED_SIZE: {
+       case SG_GET_RESERVED_SIZE: {
                int size = 32768;
 
                error = copyout(&size, ap->a_data, sizeof(size));
@@ -576,7 +571,6 @@ sgioctl(struct dev_ioctl_args *ap)
        }
 
        case SG_GET_SCSI_ID:
-       case LINUX_SG_GET_SCSI_ID:
        {
                struct sg_scsi_id id;
 
@@ -613,25 +607,6 @@ sgioctl(struct dev_ioctl_args *ap)
        case SG_SET_COMMAND_Q:
        case SG_SET_DEBUG:
        case SG_NEXT_CMD_LEN:
-       case LINUX_SG_EMULATED_HOST:
-       case LINUX_SG_SET_TRANSFORM:
-       case LINUX_SG_GET_TRANSFORM:
-       case LINUX_SG_GET_NUM_WAITING:
-       case LINUX_SG_SCSI_RESET:
-       case LINUX_SG_GET_REQUEST_TABLE:
-       case LINUX_SG_SET_KEEP_ORPHAN:
-       case LINUX_SG_GET_KEEP_ORPHAN:
-       case LINUX_SG_GET_ACCESS_COUNT:
-       case LINUX_SG_SET_FORCE_LOW_DMA:
-       case LINUX_SG_GET_LOW_DMA:
-       case LINUX_SG_GET_SG_TABLESIZE:
-       case LINUX_SG_SET_FORCE_PACK_ID:
-       case LINUX_SG_GET_PACK_ID:
-       case LINUX_SG_SET_RESERVED_SIZE:
-       case LINUX_SG_GET_COMMAND_Q:
-       case LINUX_SG_SET_COMMAND_Q:
-       case LINUX_SG_SET_DEBUG:
-       case LINUX_SG_NEXT_CMD_LEN:
        default:
 #ifdef CAMDEBUG
                kprintf("sgioctl: rejecting cmd 0x%lx\n", ap->a_cmd);
index 962a103..a6a80b4 100644 (file)
@@ -1,9 +1,5 @@
 # $FreeBSD: src/sys/modules/aac/Makefile,v 1.9 2010/08/23 06:13:29 imp Exp $
 
-.if ${MACHINE_ARCH} == "i386"
-SUBDIR= aac_linux
-.endif
-
 KMOD=  aac
 SRCS=  aac.c aac_pci.c aac_disk.c aac_cam.c
 SRCS+= opt_scsi.h opt_cam.h opt_aac.h
diff --git a/sys/dev/raid/aac/aac_linux.c b/sys/dev/raid/aac/aac_linux.c
deleted file mode 100644 (file)
index 60f0964..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*-
- * Copyright (c) 2002 Scott Long
- * 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 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 AUTHOR 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.
- *
- * $FreeBSD: head/sys/dev/aac/aac_linux.c 165393 2006-12-20 17:10:53Z delphij $
- */
-
-/*
- * Linux ioctl handler for the aac device driver
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/conf.h>
-#include <sys/kernel.h>
-#include <sys/module.h>
-#include <sys/file.h>
-#include <sys/mapped_ioctl.h>
-#include <sys/proc.h>
-#ifdef __x86_64__
-#include <machine/../linux32/linux.h>
-#include <machine/../linux32/linux32_proto.h>
-#else
-#include <emulation/linux/i386/linux.h>
-#include <emulation/linux/i386/linux_proto.h>
-#endif
-#include <emulation/linux/linux_ioctl.h>
-
-#include <dev/raid/aac/aacreg.h>       /* needed by aac_ioctl.h */
-#include <dev/raid/aac/aac_ioctl.h>
-
-/* Define ioctl mappings */
-static struct ioctl_map_range aac_linux_ioctl_cmds[] = {
-       MAPPED_IOCTL_MAP(FSACTL_LNX_SENDFIB, FSACTL_SENDFIB),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_GET_COMM_PERF_DATA, FSACTL_GET_COMM_PERF_DATA),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_OPENCLS_COMM_PERF_DATA, FSACTL_OPENCLS_COMM_PERF_DATA),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_OPEN_GET_ADAPTER_FIB, FSACTL_OPEN_GET_ADAPTER_FIB),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_GET_NEXT_ADAPTER_FIB, FSACTL_GET_NEXT_ADAPTER_FIB),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_CLOSE_GET_ADAPTER_FIB, FSACTL_CLOSE_GET_ADAPTER_FIB),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_CLOSE_ADAPTER_CONFIG, FSACTL_CLOSE_ADAPTER_CONFIG),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_OPEN_ADAPTER_CONFIG, FSACTL_OPEN_ADAPTER_CONFIG),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_MINIPORT_REV_CHECK, FSACTL_MINIPORT_REV_CHECK),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_QUERY_ADAPTER_CONFIG, FSACTL_QUERY_ADAPTER_CONFIG),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_GET_PCI_INFO, FSACTL_GET_PCI_INFO),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_FORCE_DELETE_DISK, FSACTL_FORCE_DELETE_DISK),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_AIF_THREAD, FSACTL_AIF_THREAD),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_NULL_IO_TEST, FSACTL_NULL_IO_TEST),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_SIM_IO_TEST, FSACTL_SIM_IO_TEST),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_DOWNLOAD, FSACTL_DOWNLOAD),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_GET_VAR, FSACTL_GET_VAR),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_SET_VAR, FSACTL_SET_VAR),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_GET_FIBTIMES, FSACTL_GET_FIBTIMES),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_ZERO_FIBTIMES, FSACTL_ZERO_FIBTIMES),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_DELETE_DISK, FSACTL_DELETE_DISK),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_QUERY_DISK, FSACTL_QUERY_DISK),
-       MAPPED_IOCTL_MAP(FSACTL_LNX_PROBE_CONTAINERS, FSACTL_PROBE_CONTAINERS),
-       MAPPED_IOCTL_MAPF(0 ,0, NULL)
-};
-
-static struct ioctl_map_handler aac_linux_ioctl_handler = {
-       &linux_ioctl_map,
-       "aac_linux",
-       aac_linux_ioctl_cmds
-};
-
-SYSINIT  (aac_register,   SI_BOOT2_KLD, SI_ORDER_MIDDLE,
-         mapped_ioctl_register_handler, &aac_linux_ioctl_handler);
-SYSUNINIT(aac_unregister, SI_BOOT2_KLD, SI_ORDER_MIDDLE,
-         mapped_ioctl_unregister_handler, &aac_linux_ioctl_handler);
-
-static int
-aac_linux_modevent(module_t mod, int type, void *data)
-{
-       /* Do we care about any specific load/unload actions? */
-       return (0);
-}
-
-DEV_MODULE(aac_linux, aac_linux_modevent, NULL);
-MODULE_DEPEND(aac_linux, linux, 1, 1, 1);
diff --git a/sys/dev/raid/aac/aac_linux/Makefile b/sys/dev/raid/aac/aac_linux/Makefile
deleted file mode 100644 (file)
index 5ada686..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# $FreeBSD: src/sys/modules/aac/aac_linux/Makefile,v 1.1 2002/09/25 05:00:25 scottl Exp $
-
-.PATH: ${.CURDIR}/..
-
-KMOD=  aac_linux
-SRCS=  aac_linux.c
-
-.include <bsd.kmod.mk>
index debf8bb..d8aec9f 100644 (file)
@@ -1,9 +1,6 @@
 # $FreeBSD: src/sys/modules/amr/Makefile,v 1.14 2010/08/23 06:13:29 imp Exp $
 
 SUBDIR= amr_cam
-#.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64"
-#SUBDIR+= amr_linux
-#.endif
 
 KMOD=  amr
 SRCS=  amr.c amr_pci.c amr_disk.c device_if.h bus_if.h pci_if.h
diff --git a/sys/dev/raid/amr/amr_linux.c b/sys/dev/raid/amr/amr_linux.c
deleted file mode 100644 (file)
index e43e5a0..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*-
- * Copyright (c) 2005 Paul Saab
- * 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 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 AUTHOR 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.
- *
- * $FreeBSD: src/sys/dev/amr/amr_linux.c,v 1.5 2009/05/20 17:29:21 imp Exp $
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/conf.h>
-#include <sys/kernel.h>
-#include <sys/module.h>
-#include <sys/file.h>
-#include <sys/proc.h>
-
-#if defined(__x86_64__) /* Assume amd64 wants 32 bit Linux */
-#include <machine/../linux32/linux.h>
-#include <machine/../linux32/linux32_proto.h>
-#else
-#include <emulation/linux/i386/linux.h>
-#include <emulation/linux/i386/linux_proto.h>
-#endif
-#include <emulation/linux/linux_ioctl.h>
-
-/* There are multiple ioctl number ranges that need to be handled */
-#define AMR_LINUX_IOCTL_MIN  0x6d00
-#define AMR_LINUX_IOCTL_MAX  0x6d01
-
-static linux_ioctl_function_t amr_linux_ioctl;
-static struct linux_ioctl_handler amr_linux_handler = {amr_linux_ioctl,
-                                                      AMR_LINUX_IOCTL_MIN,
-                                                      AMR_LINUX_IOCTL_MAX};
-
-SYSINIT  (amr_register,   SI_SUB_KLD, SI_ORDER_MIDDLE,
-         linux_ioctl_register_handler, &amr_linux_handler);
-SYSUNINIT(amr_unregister, SI_SUB_KLD, SI_ORDER_MIDDLE,
-         linux_ioctl_unregister_handler, &amr_linux_handler);
-
-static int
-amr_linux_modevent(module_t mod, int cmd, void *data)
-{
-       return (0);
-}
-
-DEV_MODULE(amr_linux, amr_linux_modevent, NULL);
-MODULE_DEPEND(amr, linux, 1, 1, 1);
-
-static int
-amr_linux_ioctl(struct thread *p, struct linux_ioctl_args *args)
-{
-       struct file *fp;
-       int error;
-
-       if ((error = fget(p, args->fd, &fp)) != 0)
-               return (error);
-       error = fo_ioctl(fp, args->cmd, (caddr_t)args->arg, p->td_ucred, p);
-       fdrop(fp, p);
-       return (error);
-}
diff --git a/sys/dev/raid/amr/amr_linux/Makefile b/sys/dev/raid/amr/amr_linux/Makefile
deleted file mode 100644 (file)
index ec14676..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# $FreeBSD: src/sys/modules/amr/amr_linux/Makefile,v 1.1 2006/01/24 21:13:49 ambrisko Exp $
-
-.PATH: ${.CURDIR}/..
-
-KMOD=  amr_linux
-SRCS=  amr_linux.c device_if.h bus_if.h
-
-.include <bsd.kmod.mk>
index 62557da..6932492 100644 (file)
@@ -2,11 +2,6 @@
 
 SUBDIR= mfip
 
-#.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64"
-.if ${MACHINE_ARCH} == "i386"
-SUBDIR+= mfi_linux
-.endif
-
 KMOD=  mfi
 SRCS=  mfi.c mfi_pci.c mfi_disk.c mfi_debug.c mfi_syspd.c mfi_tbolt.c
 SRCS+= opt_mfi.h opt_cam.h
diff --git a/sys/dev/raid/mfi/mfi_linux.c b/sys/dev/raid/mfi/mfi_linux.c
deleted file mode 100644 (file)
index 343add6..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*-
- * Copyright (c) 2006 IronPort Systems
- * 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 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 AUTHOR 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.
- *
- * $FreeBSD: src/sys/dev/mfi/mfi_linux.c,v 1.3 2009/05/20 17:29:21 imp Exp $
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/conf.h>
-#include <sys/kernel.h>
-#include <sys/module.h>
-#include <sys/file.h>
-#include <sys/mapped_ioctl.h>
-#include <sys/proc.h>
-
-#if defined(__x86_64__) /* Assume amd64 wants 32 bit Linux */
-#include <machine/../linux32/linux.h>
-#include <machine/../linux32/linux32_proto.h>
-#else
-#include <emulation/linux/i386/linux.h>
-#include <emulation/linux/i386/linux_proto.h>
-#endif
-#include <emulation/linux/linux_ioctl.h>
-#include <emulation/linux/linux_util.h>
-
-#include <dev/raid/mfi/mfireg.h>
-#include <dev/raid/mfi/mfi_ioctl.h>
-
-static struct ioctl_map_range mfi_linux_ioctl_cmds[] = {
-       MAPPED_IOCTL_MAP(MFI_LINUX_CMD, MFI_CMD),
-       MAPPED_IOCTL_MAP(MFI_LINUX_CMD_2, MFI_CMD),
-       MAPPED_IOCTL_MAP(MFI_LINUX_SET_AEN, MFI_SET_AEN),
-       MAPPED_IOCTL_MAP(MFI_LINUX_SET_AEN_2, MFI_SET_AEN),
-       MAPPED_IOCTL_MAPF(0 ,0, NULL)
-};
-
-static struct ioctl_map_handler mfi_linux_ioctl_handler = {
-       &linux_ioctl_map,
-       "mfi_linux",
-       mfi_linux_ioctl_cmds
-};
-
-SYSINIT  (mfi_register,   SI_BOOT2_KLD, SI_ORDER_MIDDLE,
-         mapped_ioctl_register_handler, &mfi_linux_ioctl_handler);
-SYSUNINIT(mfi_unregister, SI_BOOT2_KLD, SI_ORDER_MIDDLE,
-         mapped_ioctl_unregister_handler, &mfi_linux_ioctl_handler);
-
-static int
-mfi_linux_modevent(module_t mod, int cmd, void *data)
-{
-       return (0);
-}
-
-DEV_MODULE(mfi_linux, mfi_linux_modevent, NULL);
-MODULE_DEPEND(mfi, linux, 1, 1, 1);
diff --git a/sys/dev/raid/mfi/mfi_linux/Makefile b/sys/dev/raid/mfi/mfi_linux/Makefile
deleted file mode 100644 (file)
index ebc4ba5..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# $FreeBSD: src/sys/modules/mfi/mfi_linux/Makefile,v 1.1 2006/05/18 23:30:48 ambrisko Exp $
-
-.PATH: ${.CURDIR}/..
-
-KMOD=  mfi_linux
-SRCS=  mfi_linux.c
-
-.include <bsd.kmod.mk>
index 154652e..5b0bf9e 100644 (file)
@@ -1,7 +1,3 @@
 SUBDIR= ndis
 
-.if ${MACHINE_ARCH} == "i386"
-SUBDIR+=linux
-.endif
-
 .include <bsd.subdir.mk>
diff --git a/sys/emulation/linux/Makefile b/sys/emulation/linux/Makefile
deleted file mode 100644 (file)
index 81bc9fd..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# $FreeBSD: src/sys/modules/linux/Makefile,v 1.34.2.12 2003/01/02 20:41:34 kan Exp $
-
-.PATH: ${.CURDIR}/${MACHINE_ARCH}
-
-ARCH=  arch_linux
-KMOD=  linux
-SRCS=  linux_dummy.c linux_emuldata.c linux_epoll.c \
-       linux_file.c linux_futex.c linux_getcwd.c linux_ioctl.c \
-       linux_ipc.c \
-       linux_machdep.c linux_mib.c linux_misc.c linux_time.c linux_signal.c \
-       linux_socket.c \
-       linux_stats.c linux_sysctl.c linux_sysent.c linux_sysvec.c \
-       linux_util.c opt_compat.h opt_global.h
-SRCS+= bus_if.h device_if.h
-SRCS+= opt_nfs.h assym.s
-OBJS=  linux_support.o linux_locore.o
-
-SUBDIR= ${MACHINE_ARCH}
-.if ${MACHINE_ARCH} == "i386"
-SRCS+= linux_ptrace.c linux_uid16.c imgact_linux.c opt_cpu.h
-.endif
-
-CLEANFILES=    linux_assym.h linux_genassym.o
-
-linux_assym.h: linux_genassym.o
-
-.if exists(@)
-linux_assym.h: @/kern/genassym.sh
-.endif
-       sh @/kern/genassym.sh linux_genassym.o > ${.TARGET}
-
-linux_locore.o: linux_locore.s linux_assym.h
-       ${CC} -c -x assembler-with-cpp -DLOCORE ${CFLAGS} \
-           ${.IMPSRC} -o ${.TARGET}
-
-linux_support.o: linux_support.s linux_assym.h assym.s
-       ${CC} -c -x assembler-with-cpp -DLOCORE ${CFLAGS} \
-           ${.IMPSRC} -o ${.TARGET}
-
-linux_genassym.o: linux_genassym.c linux.h @
-       ${CC} -c ${CFLAGS:N-fno-common} ${.IMPSRC}
-
-.include <bsd.kmod.mk>
diff --git a/sys/emulation/linux/i386/Makefile b/sys/emulation/linux/i386/Makefile
deleted file mode 100644 (file)
index efd6732..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# Makefile for syscall tables
-#
-# $FreeBSD: src/sys/i386/linux/Makefile,v 1.4 1999/08/28 00:45:21 peter Exp $
-
-all:
-       @echo "make sysent only"
-
-sysent: ${.CURDIR}/linux_sysent.c
-
-${.CURDIR}/linux_sysent.c ${.CURDIR}/linux_syscall.h \
-${.CURDIR}/linux_proto.h ${.CURDIR}/linux_union.h: \
-       ${.CURDIR}/../../../kern/makesyscalls.sh \
-       ${.CURDIR}/syscalls.master ${.CURDIR}/syscalls.conf
-       -mv -f ${.CURDIR}/linux_sysent.c ${.CURDIR}/linux_sysent.c.bak
-       -mv -f ${.CURDIR}/linux_syscall.h ${.CURDIR}/linux_syscall.h.bak
-       -mv -f ${.CURDIR}/linux_proto.h ${.CURDIR}/linux_proto.h.bak
-       -mv -f ${.CURDIR}/linux_union.h ${.CURDIR}/linux_union.h.bak
-       cd ${.CURDIR} && sh ../../../kern/makesyscalls.sh syscalls.master syscalls.conf
-
-SUBDIR=        linprocfs
-
-.include <bsd.subdir.mk>
diff --git a/sys/emulation/linux/i386/imgact_linux.c b/sys/emulation/linux/i386/imgact_linux.c
deleted file mode 100644 (file)
index cd272bc..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-/*-
- * Copyright (c) 1994-1996 Søren Schmidt
- * All rights reserved.
- *
- * Based heavily on /sys/kern/imgact_aout.c which is:
- * Copyright (c) 1993, David Greenman
- *
- * 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 
- *    in this position and unchanged.
- * 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.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission
- *
- * 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.
- *
- * $FreeBSD: src/sys/i386/linux/imgact_linux.c,v 1.35.2.2 2001/11/03 01:41:08 ps Exp $
- * $DragonFly: src/sys/emulation/linux/i386/imgact_linux.c,v 1.10 2006/12/28 21:24:02 dillon Exp $
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/resourcevar.h>
-#include <sys/exec.h>
-#include <sys/mman.h>
-#include <sys/imgact.h>
-#include <sys/imgact_aout.h>
-#include <sys/kernel.h>
-#include <sys/lock.h>
-#include <sys/proc.h>
-#include <sys/vnode.h>
-
-#include <vm/vm.h>
-#include <vm/vm_kern.h>
-#include <vm/vm_param.h>
-#include <vm/pmap.h>
-#include <vm/vm_map.h>
-#include <vm/vm_extern.h>
-
-#include "linux.h"
-
-static int     exec_linux_imgact (struct image_params *iparams);
-
-static int
-exec_linux_imgact(struct image_params *imgp)
-{
-    const struct exec *a_out = (const struct exec *) imgp->image_header;
-    struct vmspace *vmspace;
-    vm_offset_t vmaddr;
-    unsigned long virtual_offset, file_offset;
-    vm_offset_t buffer;
-    unsigned long bss_size;
-    int error;
-
-    if (((a_out->a_magic >> 16) & 0xff) != 0x64)
-       return -1;
-
-    /*
-     * Set file/virtual offset based on a.out variant.
-     */
-    switch ((int)(a_out->a_magic & 0xffff)) {
-    case 0413:
-       virtual_offset = 0;
-       file_offset = 1024;
-       break;
-    case 0314:
-       virtual_offset = 4096;
-       file_offset = 0;
-       break;
-    default:
-       return (-1);
-    }
-    bss_size = round_page(a_out->a_bss);
-#ifdef DEBUG
-    kprintf("imgact: text: %08lx, data: %08lx, bss: %08lx\n",
-       (u_long)a_out->a_text, (u_long)a_out->a_data, bss_size);
-#endif
-
-    /*
-     * Check various fields in header for validity/bounds.
-     */
-    if (a_out->a_entry < virtual_offset ||
-       a_out->a_entry >= virtual_offset + a_out->a_text ||
-       a_out->a_text & PAGE_MASK || a_out->a_data & PAGE_MASK)
-       return (-1);
-
-    /* text + data can't exceed file size */
-    if (a_out->a_data + a_out->a_text > imgp->attr->va_size)
-       return (EFAULT);
-    /*
-     * text/data/bss must not exceed limits
-     */
-    if (a_out->a_text > maxtsiz ||
-       a_out->a_data + bss_size > imgp->proc->p_rlimit[RLIMIT_DATA].rlim_cur)
-       return (ENOMEM);
-
-    /*
-     * Destroy old process VM and create a new one (with a new stack)
-     */
-    exec_new_vmspace(imgp, NULL);
-    vmspace = imgp->proc->p_vmspace;
-
-    /*
-     * Check if file_offset page aligned,.
-     * Currently we cannot handle misalinged file offsets,
-     * and so we read in the entire image (what a waste).
-     */
-    if (file_offset & PAGE_MASK) {
-#ifdef DEBUG
-       kprintf("imgact: Non page aligned binary %lu\n", file_offset);
-#endif
-       /*
-        * Map text+data+bss read/write/execute
-        */
-       vmaddr = virtual_offset;
-       error = vm_map_find(&vmspace->vm_map, NULL, NULL,
-                           0, &vmaddr,
-                           a_out->a_text + a_out->a_data + bss_size,
-                           PAGE_SIZE,
-                           FALSE, VM_MAPTYPE_NORMAL,
-                           VM_PROT_ALL, VM_PROT_ALL, 0);
-       if (error)
-           return error;
-
-       error = vm_mmap(&kernel_map, &buffer,
-                       round_page(a_out->a_text + a_out->a_data + file_offset),
-                       VM_PROT_READ, VM_PROT_READ, 0,
-                       (caddr_t) imgp->vp, trunc_page(file_offset));
-       if (error)
-           return error;
-
-       error = copyout((caddr_t)(void *)(uintptr_t)(buffer + file_offset),
-                       (caddr_t)vmaddr, a_out->a_text + a_out->a_data);
-
-       vm_map_remove(&kernel_map, buffer,
-                     buffer + round_page(a_out->a_text + a_out->a_data + file_offset));
-
-       if (error)
-           return error;
-
-       /*
-        * remove write enable on the 'text' part
-        */
-       error = vm_map_protect(&vmspace->vm_map,
-                              vmaddr,
-                              vmaddr + a_out->a_text,
-                              VM_PROT_EXECUTE|VM_PROT_READ,
-                              TRUE);
-       if (error)
-           return error;
-    }
-    else {
-#ifdef DEBUG
-       kprintf("imgact: Page aligned binary %lu\n", file_offset);
-#endif
-       /*
-        * Map text+data read/execute
-        */
-       vmaddr = virtual_offset;
-       error = vm_mmap(&vmspace->vm_map, &vmaddr,
-                       a_out->a_text + a_out->a_data,
-                       VM_PROT_READ | VM_PROT_EXECUTE,
-                       VM_PROT_ALL,
-                       MAP_PRIVATE | MAP_FIXED,
-                       (caddr_t)imgp->vp, file_offset);
-       if (error)
-           return (error);
-    
-#ifdef DEBUG
-       kprintf("imgact: startaddr=%08lx, length=%08lx\n",
-           (u_long)vmaddr, a_out->a_text + a_out->a_data);
-#endif
-       /*
-        * allow read/write of data
-        */
-       error = vm_map_protect(&vmspace->vm_map,
-                              vmaddr + a_out->a_text,
-                              vmaddr + a_out->a_text + a_out->a_data,
-                              VM_PROT_ALL,
-                              FALSE);
-       if (error)
-           return (error);
-    
-       /*
-        * Allocate anon demand-zeroed area for uninitialized data
-        */
-       if (bss_size != 0) {
-           vmaddr = virtual_offset + a_out->a_text + a_out->a_data;
-           error = vm_map_find(&vmspace->vm_map, NULL, NULL,
-                               0, &vmaddr,
-                               bss_size, PAGE_SIZE,
-                               FALSE, VM_MAPTYPE_NORMAL,
-                               VM_PROT_ALL, VM_PROT_ALL,
-                               0);
-           if (error)
-               return (error);
-#ifdef DEBUG
-           kprintf("imgact: bssaddr=%08lx, length=%08lx\n",
-               (u_long)vmaddr, bss_size);
-#endif
-
-       }
-       /* Indicate that this file should not be modified */
-       imgp->vp->v_flag |= VTEXT;
-    }
-    /* Fill in process VM information */
-    vmspace->vm_tsize = round_page(a_out->a_text) >> PAGE_SHIFT;
-    vmspace->vm_dsize = round_page(a_out->a_data + bss_size) >> PAGE_SHIFT;
-    vmspace->vm_taddr = (caddr_t)(void *)(uintptr_t)virtual_offset;
-    vmspace->vm_daddr = (caddr_t)(void *)(uintptr_t)
-       (virtual_offset + a_out->a_text);
-
-    /* Fill in image_params */
-    imgp->interpreted = 0;
-    imgp->entry_addr = a_out->a_entry;
-    
-    imgp->proc->p_sysent = &linux_sysvec;
-    return (0);
-}
-
-/*
- * Tell kern_execve.c about it, with a little help from the linker.
- */
-static struct execsw linux_execsw = { exec_linux_imgact, "linux a.out" };
-EXEC_SET(linuxaout, linux_execsw);
diff --git a/sys/emulation/linux/i386/linprocfs/Makefile b/sys/emulation/linux/i386/linprocfs/Makefile
deleted file mode 100644 (file)
index 5f05b5b..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-# $FreeBSD: src/sys/modules/linprocfs/Makefile,v 1.1.2.3 2000/06/06 11:53:28 des Exp $
-
-KMOD=  linprocfs
-SRCS=  linprocfs_misc.c linprocfs_subr.c \
-               linprocfs_vfsops.c linprocfs_vnops.c
-
-.include <bsd.kmod.mk>
diff --git a/sys/emulation/linux/i386/linprocfs/linprocfs.h b/sys/emulation/linux/i386/linprocfs/linprocfs.h
deleted file mode 100644 (file)
index 89bf558..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (c) 2000 Dag-Erling Coïdan Smørgrav
- * Copyright (c) 1999 Pierre Beyssac
- * Copyright (c) 1993 Jan-Simon Pendry
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Jan-Simon Pendry.
- *
- * 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.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
- *
- *     @(#)procfs.h    8.9 (Berkeley) 5/14/95
- *
- * $FreeBSD: src/sys/i386/linux/linprocfs/linprocfs.h,v 1.2.2.4 2001/06/25 19:46:47 pirzyk Exp $
- * $DragonFly: src/sys/emulation/linux/i386/linprocfs/linprocfs.h,v 1.10 2007/02/03 09:50:49 y0netan1 Exp $
- */
-
-/*
- * The different types of node in a procfs filesystem
- */
-typedef enum {
-       Proot,          /* the filesystem root */
-       Pself,          /* symbolic link for curproc */
-       Pproc,          /* a process-specific sub-directory */
-       Pexe,           /* the executable file */
-       Pmem,           /* the process's memory image */
-       Pprocstat,      /* the process's status */
-       Pprocstatus,    /* the process's status (again) */
-       Pmeminfo,       /* memory system statistics */
-       Pcpuinfo,       /* CPU model, speed and features */
-       Pstat,          /* kernel/system statistics */
-       Puptime,        /* system uptime */
-       Pversion,       /* system version */
-       Ploadavg,       /* system load average */
-       Pnet,           /* the net sub-directory */
-       Pnetdev,        /* net devices */
-       Psys,           /* the sys sub-directory */
-       Psyskernel,     /* the sys/kernel sub-directory */
-       Pdevices,       /* devices */
-       Posrelease,     /* osrelease */
-       Postype,        /* ostype */
-       Ppidmax,        /* pid_max */
-       Pcwd,
-       Pprocroot,
-       Pfd,
-       Pcmdline,
-       Penviron,
-       Pmaps,
-       Pstatm,
-       Pmounts,
-} pfstype;
-
-/*
- * control data for the proc file system.
- */
-struct pfsnode {
-       struct pfsnode  *pfs_next;      /* next on list */
-       struct vnode    *pfs_vnode;     /* vnode associated with this pfsnode */
-       pfstype         pfs_type;       /* type of procfs node */
-       pid_t           pfs_pid;        /* associated process */
-       u_short         pfs_mode;       /* mode bits for stat() */
-       u_long          pfs_flags;      /* open flags */
-       u_long          pfs_fileno;     /* unique file id */
-       struct thread   *pfs_lockowner; /* pfs lock owner */
-};
-
-#define PROCFS_NAMELEN         8       /* max length of a filename component */
-
-/*
- * Kernel stuff follows
- */
-#ifdef _KERNEL
-#define CNEQ(cnp, s, len) \
-        ((cnp)->cn_namelen == (len) && \
-         (bcmp((s), (cnp)->cn_nameptr, (len)) == 0))
-
-#define KMEM_GROUP 2
-
-#define PROCFS_FILENO(pid, type) \
-       (((type) < Pproc) ? \
-                       ((type) + 2) : \
-                       ((((pid)+1) << 4) + ((int) (type))))
-
-/*
- * Convert between pfsnode vnode
- */
-#define VTOPFS(vp)     ((struct pfsnode *)(vp)->v_data)
-#define PFSTOV(pfs)    ((pfs)->pfs_vnode)
-
-typedef struct vfs_namemap vfs_namemap_t;
-struct vfs_namemap {
-       const char *nm_name;
-       int nm_val;
-};
-
-int vfs_getuserstr (struct uio *, char *, int *);
-vfs_namemap_t *vfs_findname (vfs_namemap_t *, char *, int);
-
-/* <sys/reg.h> */
-struct reg;
-struct fpreg;
-struct dbreg;
-
-#define PFIND(pid) ((pid) ? pfindn(pid) : &proc0) /* pfindn() not MPSAFE XXX */
-
-void linprocfs_exit (struct thread *);
-int linprocfs_freevp (struct vnode *);
-int linprocfs_allocvp (struct mount *, struct vnode **, long, pfstype);
-int linprocfs_sstep (struct proc *);
-void linprocfs_fix_sstep (struct proc *);
-struct proc *linprocfs_pfind(pid_t pfs_pid);
-#if 0
-int linprocfs_read_regs (struct proc *, struct reg *);
-int linprocfs_write_regs (struct proc *, struct reg *);
-int linprocfs_read_fpregs (struct proc *, struct fpreg *);
-int linprocfs_write_fpregs (struct proc *, struct fpreg *);
-int linprocfs_read_dbregs (struct proc *, struct dbreg *);
-int linprocfs_write_dbregs (struct proc *, struct dbreg *);
-#endif
-int linprocfs_domeminfo (struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
-int linprocfs_docpuinfo (struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
-int linprocfs_domounts (struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
-int linprocfs_dostat (struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
-int linprocfs_douptime (struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
-int linprocfs_doversion (struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
-int linprocfs_doprocstat (struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
-int linprocfs_doprocstatus (struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
-int linprocfs_doloadavg (struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
-int linprocfs_donetdev (struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
-int linprocfs_dodevices (struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
-int linprocfs_doosrelease (struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
-int linprocfs_doostype (struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
-int linprocfs_dopidmax (struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
-int linprocfs_domaps(struct proc *curp, struct proc *p, struct pfsnode *pfs, struct uio *uio);
-int linprocfs_dostatm(struct proc *curp, struct proc *p, struct pfsnode *pfs, struct uio *uio);
-/* functions to check whether or not files should be displayed */
-int linprocfs_validfile (struct proc *);
-
-#define PROCFS_LOCKED  0x01
-#define PROCFS_WANT    0x02
-
-#define PFS_DEAD        0x80000000     /* or'd with pid */
-
-int    linprocfs_root (struct mount *, struct vnode **);
-int    linprocfs_rw (struct vop_read_args *);
-#endif /* _KERNEL */
diff --git a/sys/emulation/linux/i386/linprocfs/linprocfs_misc.c b/sys/emulation/linux/i386/linprocfs/linprocfs_misc.c
deleted file mode 100644 (file)
index d4080d1..0000000
+++ /dev/null
@@ -1,869 +0,0 @@
-/*
- * Copyright (c) 2000 Dag-Erling Coïdan Smørgrav
- * Copyright (c) 1999 Pierre Beyssac
- * Copyright (c) 1993 Jan-Simon Pendry
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Jan-Simon Pendry.
- *
- * 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.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
- *
- *     @(#)procfs_status.c     8.4 (Berkeley) 6/15/94
- *
- * $FreeBSD: src/sys/i386/linux/linprocfs/linprocfs_misc.c,v 1.3.2.8 2001/06/25 19:46:47 pirzyk Exp $
- */
-
-#include <sys/param.h>
-#include <sys/blist.h>
-#include <sys/kernel.h>
-#include <sys/kinfo.h>
-#include <sys/proc.h>
-#include <sys/jail.h>
-#include <sys/resourcevar.h>
-#include <sys/systm.h>
-#include <sys/tty.h>
-#include <sys/vnode.h>
-#include <sys/lock.h>
-#include <sys/sbuf.h>
-#include <sys/mount.h>
-#include <sys/sysctl.h>
-
-#include <vm/vm.h>
-#include <vm/pmap.h>
-#include <vm/vm_map.h>
-#include <vm/vm_param.h>
-#include <vm/vm_object.h>
-#include <vm/swap_pager.h>
-#include <sys/vmmeter.h>
-#include <sys/exec.h>
-#include <sys/devfs.h>
-
-#include <machine/clock.h>
-#include <machine/cputypes.h>
-#include <machine/inttypes.h>
-#include <machine/md_var.h>
-#include <machine/vmparam.h>
-
-#include "linprocfs.h"
-#include "../linux.h"
-#include "../../linux_ioctl.h"
-#include "../../linux_mib.h"
-
-/*
- * Various conversion macros
- */
-#define T2J(x) (((x) * 100) / (stathz ? stathz : hz))  /* ticks to jiffies */
-#define T2S(x) ((x) / (stathz ? stathz : hz))          /* ticks to seconds */
-#define B2K(x) ((unsigned long)((x) >> 10))                    /* bytes to kbytes */
-#define P2B(x) ((x) << PAGE_SHIFT)                     /* pages to bytes */
-#define P2K(x) ((x) << (PAGE_SHIFT - 10))              /* pages to kbytes */
-
-int
-linprocfs_domeminfo(struct proc *curp, struct proc *p, struct pfsnode *pfs,
-                   struct uio *uio)
-{
-       char *ps;
-       char psbuf[512];                /* XXX - conservative */
-       unsigned long memtotal;         /* total memory in bytes */
-       unsigned long memused;          /* used memory in bytes */
-       unsigned long memfree;          /* free memory in bytes */
-       unsigned long memshared;        /* shared memory ??? */
-       unsigned long buffers, cached;  /* buffer / cache memory ??? */
-       unsigned long long swaptotal;   /* total swap space in bytes */
-       unsigned long long swapused;    /* used swap space in bytes */
-       unsigned long long swapfree;    /* free swap space in bytes */
-       int n;
-
-       if (uio->uio_rw != UIO_READ)
-               return (EOPNOTSUPP);
-
-       memtotal = Maxmem * PAGE_SIZE;
-       /*
-        * The correct thing here would be:
-        *
-       memfree = vmstats.v_free_count * PAGE_SIZE;
-       memused = memtotal - memfree;
-        *
-        * but it might mislead linux binaries into thinking there
-        * is very little memory left, so we cheat and tell them that
-        * all memory that isn't wired down is free.
-        */
-       memused = vmstats.v_wire_count * PAGE_SIZE;
-       memfree = memtotal - memused;
-       if (swapblist == NULL) {
-               swaptotal = 0;
-               swapfree = 0;
-       } else {
-               swaptotal = swapblist->bl_blocks * 1024LL; /* XXX why 1024? */
-               swapfree = (unsigned long long)swapblist->bl_root->u.bmu_avail * PAGE_SIZE;
-       }
-       swapused = swaptotal - swapfree;
-       memshared = 0;
-
-       for (n = 0; n < ncpus; ++n) {
-               globaldata_t gd = globaldata_find(n);
-
-               memshared += gd->gd_vmtotal.t_arm;
-       }
-       memshared *= PAGE_SIZE;
-
-       /*
-        * We'd love to be able to write:
-        *
-       buffers = bufspace;
-        *
-        * but bufspace is internal to vfs_bio.c and we don't feel
-        * like unstaticizing it just for linprocfs's sake.
-        */
-       buffers = 0;
-       cached = vmstats.v_cache_count * PAGE_SIZE;
-
-       ps = psbuf;
-       ps += ksprintf(ps,
-               "        total:    used:    free:  shared: buffers:  cached:\n"
-               "Mem:  %lu %lu %lu %lu %lu %lu\n"
-               "Swap: %llu %llu %llu\n"
-               "MemTotal: %9lu kB\n"
-               "MemFree:  %9lu kB\n"
-               "MemShared:%9lu kB\n"
-               "Buffers:  %9lu kB\n"
-               "Cached:   %9lu kB\n"
-               "SwapTotal:%9lu kB\n"
-               "SwapFree: %9lu kB\n",
-               memtotal, memused, memfree, memshared, buffers, cached,
-               swaptotal, swapused, swapfree,
-               B2K(memtotal), B2K(memfree),
-               B2K(memshared), B2K(buffers), B2K(cached),
-               B2K(swaptotal), B2K(swapfree));
-
-       return (uiomove_frombuf(psbuf, ps - psbuf, uio));
-}
-
-int
-linprocfs_docpuinfo(struct proc *curp, struct proc *p, struct pfsnode *pfs,
-                   struct uio *uio)
-{
-       char *ps;
-       char psbuf[8192];
-       char hwmodel[128];
-       size_t  modellen = sizeof(hwmodel);
-       int mib[] = { CTL_HW, HW_MODEL };
-       int class;
-       int cpu;
-        int i;
-       int error;
-#if 0
-       extern char *cpu_model;         /* Yuck */
-#endif
-        /* We default the flags to include all non-conflicting flags,
-           and the Intel versions of conflicting flags.  Note the space
-           before each name; that is significant, and should be 
-           preserved. */
-
-        static char *flags[] = {
-               "fpu",      "vme",     "de",       "pse",      "tsc",
-               "msr",      "pae",     "mce",      "cx8",      "apic",
-               "sep",      "sep",     "mtrr",     "pge",      "mca",
-               "cmov",     "pat",     "pse36",    "pn",       "b19",
-               "b20",      "b21",     "mmxext",   "mmx",      "fxsr",
-               "xmm",      "b26",     "b27",      "b28",      "b29",
-               "3dnowext", "3dnow"
-       };
-
-       if (uio->uio_rw != UIO_READ)
-               return (EOPNOTSUPP);
-
-       switch (cpu_class) {
-       case CPUCLASS_286:
-               class = 2;
-               break;
-       case CPUCLASS_386:
-               class = 3;
-               break;
-       case CPUCLASS_486:
-               class = 4;
-               break;
-       case CPUCLASS_586:
-               class = 5;
-               break;
-       case CPUCLASS_686:
-               class = 6;
-               break;
-       default:
-                class = 0;
-               break;
-       }
-
-       ps = psbuf;
-
-       error = kernel_sysctl(mib, 2, hwmodel, &modellen, NULL, 0, NULL);
-       if (error)
-               strcpy(hwmodel, "unknown");
-
-       for (cpu = 0; cpu < ncpus; cpu++) {
-               ps += ksprintf(ps,
-                   "processor\t: %d\n"
-                   "vendor_id\t: %.20s\n"
-                   "cpu family\t: %d\n"
-                   "model\t\t: %d\n"
-                   "model name\t: %s\n"
-                   "stepping\t: %d\n",
-                   cpu, cpu_vendor, class, cpu, hwmodel, cpu_id & 0xf);
-       }
-
-        ps += ksprintf(ps,
-                        "flags\t\t:");
-
-        if (cpu_vendor_id == CPU_VENDOR_AMD && (class < 6)) {
-               flags[16] = "fcmov";
-        }
-        
-        for (i = 0; i < 32; i++)
-               if (cpu_feature & (1 << i))
-                       ps += ksprintf(ps, " %s", flags[i]);
-       ps += ksprintf(ps, "\n");
-        if (class >= 5) {
-               ps += ksprintf(ps,
-                       "cpu MHz\t\t: %d.%02d\n"
-                       "bogomips\t: %d.%02d\n",
-                        (int)((tsc_frequency + 4999) / 1000000),
-                        (int)((tsc_frequency + 4999) / 10000) % 100,
-                        (int)((tsc_frequency + 4999) / 1000000),
-                        (int)((tsc_frequency + 4999) / 10000) % 100);
-        }
-        
-       return (uiomove_frombuf(psbuf, ps - psbuf, uio));
-}
-
-static unsigned int
-cpucnt(int offset)
-{
-    int i;
-    int count = 0;
-
-    for (i = 0; i < ncpus; ++i) {
-       struct globaldata *gd = globaldata_find(i);
-       count += *(unsigned int *)((char *)&gd->gd_cnt + offset);
-    }
-    return(count);
-}
-
-static int
-linprocfs_domounts_callback(struct mount *mp, void *data)
-{
-       struct statfs *st;
-       struct sbuf *sb = (struct sbuf *)data;
-       char *to, *from, *fs;
-
-       st = &mp->mnt_stat;
-
-       from = st->f_mntfromname;
-       to = st->f_mntonname;
-       fs = st->f_fstypename;
-
-       if (!strcmp(st->f_fstypename, "linprocfs"))
-               fs = "proc";
-       else if (!strcmp(st->f_fstypename, "ext2fs"))
-               fs = "ext2";
-       else if (!strcmp(st->f_fstypename, "msdos"))
-               fs = "vfat";
-       else if (!strcmp(st->f_fstypename, "msdosfs"))
-               fs = "vfat";
-
-       sbuf_printf(sb, "%s %s %s %s", from, to, fs,
-           st->f_flags & MNT_RDONLY ? "ro" : "rw");
-
-#define OPT_ADD(name, flag) if (st->f_flags & (flag)) sbuf_printf(sb, "," name)
-       OPT_ADD("sync",         MNT_SYNCHRONOUS);
-       OPT_ADD("noexec",       MNT_NOEXEC);
-       OPT_ADD("nosuid",       MNT_NOSUID);
-       OPT_ADD("nodev",        MNT_NODEV);
-       OPT_ADD("async",        MNT_ASYNC);
-       OPT_ADD("suiddir",      MNT_SUIDDIR);
-       OPT_ADD("nosymfollow",  MNT_NOSYMFOLLOW);
-       OPT_ADD("noatime",      MNT_NOATIME);
-#undef OPT_ADD
-
-       sbuf_printf(sb, " 0 0\n");
-
-       return 0;
-}
-
-int
-linprocfs_domounts(struct proc *curp, struct proc *p, struct pfsnode *pfs,
-                   struct uio *uio)
-{
-       struct sbuf *sb;
-       int error;
-
-       sb = sbuf_new_auto();
-
-       error = mountlist_scan(linprocfs_domounts_callback, sb, MNTSCAN_FORWARD);
-
-       sbuf_finish(sb);
-       if (error == 0)
-               error = uiomove_frombuf(sbuf_data(sb), sbuf_len(sb), uio);
-       sbuf_delete(sb);
-       return (error);
-}
-
-int
-linprocfs_dostat(struct proc *curp, struct proc *p, struct pfsnode *pfs,
-                struct uio *uio)
-{
-        char *ps;
-       char psbuf[8192];
-       int cpu;
-
-       ps = psbuf;
-       ps += ksprintf(ps,
-                     "cpu %"PRIu64" %"PRIu64" %"PRIu64" %"PRIu64"\n",
-                     T2J(cpu_time.cp_user),
-                     T2J(cpu_time.cp_nice),
-                     T2J(cpu_time.cp_sys),
-                     T2J(cpu_time.cp_idle));
-
-       for (cpu = 0; cpu < ncpus; cpu++) {
-               ps += ksprintf(ps,
-                     "cpu%d %"PRIu64" %"PRIu64" %"PRIu64" %"PRIu64"\n",
-                     cpu,
-                     T2J(cputime_percpu[cpu].cp_user),
-                     T2J(cputime_percpu[cpu].cp_nice),
-                     T2J(cputime_percpu[cpu].cp_sys),
-                     T2J(cputime_percpu[cpu].cp_idle));                        
-       }
-
-       ps += ksprintf(ps,
-                     "disk 0 0 0 0\n"
-                     "page %u %u\n"
-                     "swap %u %u\n"
-                     "intr %u\n"
-                     "ctxt %u\n"
-                     "btime %ld\n",
-                     cpucnt(offsetof(struct vmmeter, v_vnodepgsin)),
-                     cpucnt(offsetof(struct vmmeter, v_vnodepgsout)),
-                     cpucnt(offsetof(struct vmmeter, v_swappgsin)),
-                     cpucnt(offsetof(struct vmmeter, v_swappgsout)),
-                     cpucnt(offsetof(struct vmmeter, v_intr)),
-                     cpucnt(offsetof(struct vmmeter, v_swtch)),
-                     boottime.tv_sec);
-
-       return (uiomove_frombuf(psbuf, ps - psbuf, uio));
-}
-
-int
-linprocfs_douptime(struct proc *curp, struct proc *p, struct pfsnode *pfs,
-                  struct uio *uio)
-{
-       char *ps;
-       char psbuf[64];
-       struct timeval tv;
-
-       getmicrouptime(&tv);
-       ps = psbuf;
-       ps += ksprintf(ps, "%ld.%02ld %"PRIu64".%02"PRIu64"\n",
-                     tv.tv_sec, tv.tv_usec / 10000,
-                     T2S(cpu_time.cp_idle), T2J(cpu_time.cp_idle) % 100);
-       return (uiomove_frombuf(psbuf, ps - psbuf, uio));
-}
-
-int
-linprocfs_doversion(struct proc *curp, struct proc *p, struct pfsnode *pfs,
-                   struct uio *uio)
-{
-        char *ps;
-       size_t xlen;
-
-       ps = version; /* XXX not entirely correct */
-       for (xlen = 0; ps[xlen] != '\n'; ++xlen)
-               /* nothing */ ;
-       ++xlen;
-       return (uiomove_frombuf(ps, xlen, uio));
-}
-
-#define B2P(x) ((x) >> PAGE_SHIFT)                     /* bytes to pages */
-int
-linprocfs_dostatm(struct proc *curp, struct proc *p, struct pfsnode *pfs,
-                   struct uio *uio)
-{
-       char *ps, psbuf[1024];
-       struct kinfo_proc kp;
-
-       lwkt_gettoken(&p->p_token);
-       fill_kinfo_proc(p, &kp);
-
-       ps = psbuf;
-       ps += ksprintf(ps, "%d", p->p_pid);
-#define PS_ADD(name, fmt, arg) ps += ksprintf(ps, " " fmt, arg)
-       PS_ADD("",      "%ju",  B2P((uintmax_t)(kp.kp_vm_tsize + kp.kp_vm_dsize + kp.kp_vm_ssize)));
-       PS_ADD("",      "%ju",  (uintmax_t)kp.kp_vm_rssize);
-       PS_ADD("",      "%ju",  (uintmax_t)0); /* XXX */
-       PS_ADD("",      "%ju",  (uintmax_t)kp.kp_vm_tsize);
-       PS_ADD("",      "%ju",  (uintmax_t)kp.kp_vm_dsize);
-       PS_ADD("",      "%ju",  (uintmax_t)kp.kp_vm_ssize);
-       PS_ADD("",      "%ju",  (uintmax_t)0); /* XXX */
-#undef PS_ADD
-       ps += ksprintf(ps, "\n");
-       lwkt_reltoken(&p->p_token);
-
-       return (uiomove_frombuf(psbuf, ps - psbuf, uio));
-}
-
-#define P2K(x) ((x) << (PAGE_SHIFT - 10))              /* pages to kbytes */
-int
-linprocfs_doprocstat(struct proc *curp, struct proc *p, struct pfsnode *pfs,
-                    struct uio *uio)
-{
-       vm_map_t map = &p->p_vmspace->vm_map;
-       vm_map_entry_t entry;
-       vm_offset_t start, end;
-       char *ps, psbuf[1024];
-       struct kinfo_proc kp;
-
-       lwkt_gettoken(&p->p_token);
-       fill_kinfo_proc(p, &kp);
-
-       start = 0;
-       end = 0;
-       vm_map_lock_read(map);
-       for (entry = map->header.next; entry != &map->header;
-               entry = entry->next) {
-               if (entry->maptype != VM_MAPTYPE_NORMAL &&
-                   entry->maptype != VM_MAPTYPE_VPAGETABLE) {
-                       continue;
-               }
-               /* Assuming that text is the first entry */
-               start = entry->start;
-               end = entry->end;
-       }
-       vm_map_unlock_read(map);
-
-       ps = psbuf;
-       ps += ksprintf(ps, "%d", p->p_pid);
-#define PS_ADD(name, fmt, arg) ps += ksprintf(ps, " " fmt, arg)
-       PS_ADD("comm",          "(%s)", p->p_comm);
-       PS_ADD("statr",         "%c",   '0'); /* XXX */
-       PS_ADD("ppid",          "%d",   p->p_pptr ? p->p_pptr->p_pid : 0);
-       PS_ADD("pgrp",          "%d",   p->p_pgid);
-       PS_ADD("session",       "%d",   p->p_session->s_sid);
-       PS_ADD("tty",           "%d",   0); /* XXX */
-       PS_ADD("tpgid",         "%d",   kp.kp_tpgid); /* XXX */
-       PS_ADD("flags",         "%u",   0); /* XXX */
-       PS_ADD("minflt",        "%lu",  kp.kp_ru.ru_minflt); /* XXX */
-       PS_ADD("cminflt",       "%lu",  kp.kp_cru.ru_minflt); /* XXX */
-       PS_ADD("majflt",        "%lu",  kp.kp_ru.ru_majflt); /* XXX */
-       PS_ADD("cmajflt",       "%lu",  kp.kp_cru.ru_majflt); /* XXX */
-       PS_ADD("utime",         "%d",   T2J(tvtohz_high(&kp.kp_ru.ru_utime))); /* XXX */
-       PS_ADD("stime",         "%d",   T2J(tvtohz_high(&kp.kp_ru.ru_stime))); /* XXX */
-       PS_ADD("cutime",        "%d",   T2J(tvtohz_high(&kp.kp_cru.ru_utime))); /* XXX */
-       PS_ADD("cstime",        "%d",   T2J(tvtohz_high(&kp.kp_cru.ru_stime))); /* XXX */
-       PS_ADD("priority",      "%d",   0); /* XXX */
-       PS_ADD("nice",          "%d",   kp.kp_nice);
-       PS_ADD("timeout",       "%u",   0); /* XXX */
-       PS_ADD("itrealvalue",   "%u",   0); /* XXX */
-       PS_ADD("starttime",     "%d",   T2J(tvtohz_high(&kp.kp_start))); /* XXX */
-       PS_ADD("vsize",         "%ju",  P2K((uintmax_t)(kp.kp_vm_tsize + kp.kp_vm_dsize + kp.kp_vm_ssize))); /* XXX: not sure */
-       PS_ADD("rss",           "%ju",  (uintmax_t)kp.kp_vm_rssize); /* XXX */
-       PS_ADD("rlim",          "%lu",  kp.kp_ru.ru_maxrss); /* XXX */
-       PS_ADD("startcode",     "%lu",  start); /* XXX */
-       PS_ADD("endcode",       "%lu",  end); /* XXX */
-       PS_ADD("startstack",    "%lu",  (u_long)p->p_vmspace->vm_minsaddr); /* XXX */
-       PS_ADD("kstkesp",       "%u",   0); /* XXX */
-       PS_ADD("kstkeip",       "%u",   0); /* XXX */
-       PS_ADD("signal",        "%d",   0); /* XXX */
-       PS_ADD("blocked",       "%d",   0); /* XXX */
-       PS_ADD("sigignore",     "%d",   0); /* XXX */
-       PS_ADD("sigcatch",      "%d",   0); /* XXX */
-       PS_ADD("wchan",         "%u",   0); /* XXX */
-       PS_ADD("nswap",         "%lu",  kp.kp_ru.ru_nswap); /* XXX */
-       PS_ADD("cnswap",        "%lu",  kp.kp_cru.ru_nswap); /* XXX */
-       PS_ADD("exitsignal",    "%d",   0); /* XXX */
-       PS_ADD("processor",     "%u",   kp.kp_lwp.kl_cpuid); /* XXX */
-       PS_ADD("rt_priority",   "%u",   0); /* XXX */ /* >= 2.5.19 */
-       PS_ADD("policy",        "%u",   kp.kp_nice); /* XXX */ /* >= 2.5.19 */
-#undef PS_ADD
-       ps += ksprintf(ps, "\n");
-       lwkt_reltoken(&p->p_token);
-       
-       return (uiomove_frombuf(psbuf, ps - psbuf, uio));
-}
-
-/*
- * Map process state to descriptive letter. Note that this does not
- * quite correspond to what Linux outputs, but it's close enough.
- */
-static char *state_str[] = {
-       "? (unknown)",
-       "I (idle)",
-       "R (running)",
-       "T (stopped)",
-       "Z (zombie)",
-       "S (sleeping)",
-       "W (waiting)",
-       "M (mutex)"
-};
-
-int
-linprocfs_doprocstatus(struct proc *curp, struct proc *p, struct pfsnode *pfs,
-                      struct uio *uio)
-{
-       char *ps, psbuf[1024];
-       char *state;
-       int i;
-
-       ps = psbuf;
-
-       lwkt_gettoken(&p->p_token);
-       if (p->p_stat > NELEM(state_str))
-               state = state_str[0];
-       else
-               state = state_str[(int)p->p_stat];
-
-#define PS_ADD ps += ksprintf
-       PS_ADD(ps, "Name:\t%s\n",         p->p_comm); /* XXX escape */
-       PS_ADD(ps, "State:\t%s\n",        state);
-
-       /*
-        * Credentials
-        */
-       PS_ADD(ps, "Pid:\t%d\n",          p->p_pid);
-       PS_ADD(ps, "PPid:\t%d\n",         p->p_pptr ? p->p_pptr->p_pid : 0);
-       PS_ADD(ps, "Uid:\t%d %d %d %d\n", p->p_ucred->cr_ruid,
-                                         p->p_ucred->cr_uid,
-                                         p->p_ucred->cr_svuid,
-                                         /* FreeBSD doesn't have fsuid */
-                                         p->p_ucred->cr_uid);
-       PS_ADD(ps, "Gid:\t%d %d %d %d\n", p->p_ucred->cr_rgid,
-                                         p->p_ucred->cr_gid,
-                                         p->p_ucred->cr_svgid,
-                                         /* FreeBSD doesn't have fsgid */
-                                         p->p_ucred->cr_gid);
-       PS_ADD(ps, "Groups:\t");
-       for (i = 0; i < p->p_ucred->cr_ngroups; i++)
-               PS_ADD(ps, "%d ", p->p_ucred->cr_groups[i]);
-       PS_ADD(ps, "\n");
-       
-       /*
-        * Memory
-        */
-       PS_ADD(ps, "VmSize:\t%8lu kB\n",  B2K(p->p_vmspace->vm_map.size));
-       PS_ADD(ps, "VmLck:\t%8u kB\n",    P2K(0)); /* XXX */
-       /* XXX vm_rssize seems to always be zero, how can this be? */
-       PS_ADD(ps, "VmRss:\t%8u kB\n",    P2K(p->p_vmspace->vm_rssize));
-       PS_ADD(ps, "VmData:\t%8u kB\n",   P2K(p->p_vmspace->vm_dsize));
-       PS_ADD(ps, "VmStk:\t%8u kB\n",    P2K(p->p_vmspace->vm_ssize));
-       PS_ADD(ps, "VmExe:\t%8u kB\n",    P2K(p->p_vmspace->vm_tsize));
-       PS_ADD(ps, "VmLib:\t%8u kB\n",    P2K(0)); /* XXX */
-
-       /*
-        * Signal masks
-        *
-        * We support up to 128 signals, while Linux supports 32,
-        * but we only define 32 (the same 32 as Linux, to boot), so
-        * just show the lower 32 bits of each mask. XXX hack.
-        *
-        * NB: on certain platforms (Sparc at least) Linux actually
-        * supports 64 signals, but this code is a long way from
-        * running on anything but i386, so ignore that for now.
-        */
-       PS_ADD(ps, "SigPnd:\t%08x\n",     p->p_siglist.__bits[0]);
-       PS_ADD(ps, "SigBlk:\t%08x\n",     0); /* XXX */
-       PS_ADD(ps, "SigIgn:\t%08x\n",     p->p_sigignore.__bits[0]);
-       PS_ADD(ps, "SigCgt:\t%08x\n",     p->p_sigcatch.__bits[0]);
-       
-       /*
-        * Linux also prints the capability masks, but we don't have
-        * capabilities yet, and when we do get them they're likely to
-        * be meaningless to Linux programs, so we lie. XXX
-        */
-       PS_ADD(ps, "CapInh:\t%016x\n",    0);
-       PS_ADD(ps, "CapPrm:\t%016x\n",    0);
-       PS_ADD(ps, "CapEff:\t%016x\n",    0);
-#undef PS_ADD
-       lwkt_reltoken(&p->p_token);
-       
-       return (uiomove_frombuf(psbuf, ps - psbuf, uio));
-}
-
-int
-linprocfs_doloadavg(struct proc *curp, struct proc *p,
-                   struct pfsnode *pfs, struct uio *uio)
-{
-       char *ps, psbuf[512];
-
-       ps = psbuf;
-       ps += ksprintf(ps, "%d.%02d %d.%02d %d.%02d %d/%d %d\n",
-           (int)(averunnable.ldavg[0] / averunnable.fscale),
-           (int)(averunnable.ldavg[0] * 100 / averunnable.fscale % 100),
-           (int)(averunnable.ldavg[1] / averunnable.fscale),
-           (int)(averunnable.ldavg[1] * 100 / averunnable.fscale % 100),
-           (int)(averunnable.ldavg[2] / averunnable.fscale),
-           (int)(averunnable.ldavg[2] * 100 / averunnable.fscale % 100),
-           1,                      /* number of running tasks */
-           -1,                     /* number of tasks */
-           1         /* The last pid, just kidding */
-       );
-       return(uiomove_frombuf(psbuf, ps - psbuf, uio));
-}
-
-int
-linprocfs_donetdev(struct proc *curp, struct proc *p, struct pfsnode *pfs,
-                  struct uio *uio)
-{
-       struct sbuf *sb;
-       char ifname[16]; /* XXX LINUX_IFNAMSIZ */
-       struct ifnet *ifp;
-       int error;
-
-       sb = sbuf_new_auto();
-
-       sbuf_printf(sb, "%6s|%58s|%s\n%6s|%58s|%58s\n",
-           "Inter-", "   Receive", "  Transmit", " face",
-           "bytes    packets errs drop fifo frame compressed",
-           "bytes    packets errs drop fifo frame compressed");
-
-       ifnet_lock();
-       TAILQ_FOREACH(ifp, &ifnetlist, if_link) {
-               linux_ifname(ifp, ifname, sizeof ifname);
-               sbuf_printf(sb, "%6.6s:", ifname);
-               sbuf_printf(sb, "%8lu %7lu %4lu %4lu %4lu %5lu %10lu %9lu ",
-                   0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL);
-               sbuf_printf(sb, "%8lu %7lu %4lu %4lu %4lu %5lu %7lu %10lu\n",
-                   0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL);
-       }
-       ifnet_unlock();
-       sbuf_finish(sb);
-       error = uiomove_frombuf(sbuf_data(sb), sbuf_len(sb), uio);
-       sbuf_delete(sb);
-       return (error);
-}
-
-static void
-linprocfs_dodevices_callback(char *name, cdev_t dev, bool is_alias, void *arg)
-{
-       struct sbuf *sb = arg;
-
-       sbuf_printf(sb, "%3d %s\n", dev->si_umajor, name);
-}
-
-int
-linprocfs_dodevices(struct proc *curp, struct proc *p, struct pfsnode *pfs,
-    struct uio *uio)
-{
-       struct sbuf *sb;
-       int error;
-
-       sb = sbuf_new_auto();
-       sbuf_printf(sb, "Character devices:\n");
-       devfs_scan_callback(linprocfs_dodevices_callback, sb);
-       sbuf_printf(sb, "\nBlock devices:\n");
-       sbuf_finish(sb);
-       error = uiomove_frombuf(sbuf_data(sb), sbuf_len(sb), uio);
-       sbuf_delete(sb);
-       return (error);
-}
-
-int
-linprocfs_doosrelease(struct proc *curp, struct proc *p, struct pfsnode *pfs,
-                  struct uio *uio)
-{
-       char *osrelease;
-
-       osrelease = linux_get_osrelease(curthread);
-       return(uiomove_frombuf(osrelease, strlen(osrelease)+1, uio));
-}
-
-int
-linprocfs_doostype(struct proc *curp, struct proc *p, struct pfsnode *pfs,
-                  struct uio *uio)
-{
-       char *osname;
-
-       osname = linux_get_osname(curthread);
-       return(uiomove_frombuf(osname, strlen(osname)+1, uio));
-}
-
-int
-linprocfs_dopidmax(struct proc *curp, struct proc *p, struct pfsnode *pfs,
-                  struct uio *uio)
-{
-       char buf[32];
-
-       ksnprintf(buf, sizeof(buf), "%d", PID_MAX);
-       return(uiomove_frombuf(buf, strlen(buf)+1, uio));
-}
-
-int
-linprocfs_domaps(struct proc *curp, struct proc *p, struct pfsnode *pfs,
-            struct uio *uio)
-{
-       int error;
-       vm_map_t map = &p->p_vmspace->vm_map;
-       vm_map_entry_t entry;
-       vm_ooffset_t off = 0;
-       struct sbuf *sb;
-       char *name = "", *freename = NULL;
-       struct vnode *vp;
-       struct vattr vat;
-       ino_t ino;
-
-       if (uio->uio_rw != UIO_READ)
-               return (EOPNOTSUPP);
-
-       sb = sbuf_new_auto();
-
-       error = 0;
-       vm_map_lock_read(map);
-       for (entry = map->header.next;
-               ((uio->uio_resid > 0) && (entry != &map->header));
-               entry = entry->next) {
-               vm_object_t obj, tobj, lobj;
-               vm_offset_t ostart;
-               name = "";
-               freename = NULL;
-               ino = 0;
-               if (entry->maptype != VM_MAPTYPE_NORMAL &&
-                   entry->maptype != VM_MAPTYPE_VPAGETABLE) {
-                       continue;
-               }
-               /*
-                * Use map->hint as a poor man's ripout detector.
-                */
-               map->hint = entry;
-               ostart = entry->start;
-
-               /*
-                * Find the bottom-most object, leaving the base object
-                * and the bottom-most object held (but only one hold
-                * if they happen to be the same).
-                */
-               obj = entry->object.vm_object;
-               if (obj)
-                       vm_object_hold(obj);
-
-                lobj = obj;
-                while (lobj && (tobj = lobj->backing_object) != NULL) {
-                       KKASSERT(tobj != obj);
-                        vm_object_hold(tobj);
-                        if (tobj == lobj->backing_object) {
-                               if (lobj != obj) {
-                                       vm_object_lock_swap();
-                                       vm_object_drop(lobj);
-                               }
-                                lobj = tobj;
-                        } else {
-                                vm_object_drop(tobj);
-                        }
-                }
-
-               if (lobj) {
-                       off = IDX_TO_OFF(lobj->size);
-                       if (lobj->type == OBJT_VNODE) {
-                               vp = lobj->handle;
-                               if (vp)
-                                       vref(vp);
-                       } else {
-                               vp = NULL;
-                       }
-                       
-                       if (vp) {
-                               vn_fullpath(curproc, vp, &name, &freename, 1);
-                               vn_lock(vp, LK_SHARED | LK_RETRY);
-                               VOP_GETATTR(vp, &vat);
-                               ino = vat.va_fileid;
-                               vput(vp);
-                       }
-               }
-               if (freename == NULL) {
-                       if (entry->eflags & MAP_ENTRY_STACK)
-                               name = "[stack]";
-               }
-
-               if (lobj != obj)
-                       vm_object_drop(lobj);
-               if (obj)
-                       vm_object_drop(obj);
-
-               /*
-                * We cannot safely hold the map locked while accessing
-                * userspace as a VM fault might recurse the locked map.
-                */
-               vm_map_unlock_read(map);
-
-               /*
-                * format:
-                *  start-end access offset major:minor inode [.text file]
-                */
-               error = sbuf_printf(sb,
-                   "%08lx-%08lx %s%s%s%s %08llx %02x:%02x %llu%s%s\n",
-                   (u_long)entry->start, (u_long)entry->end,
-                   (entry->protection & VM_PROT_READ)?"r":"-",
-                   (entry->protection & VM_PROT_WRITE)?"w":"-",
-                   (entry->protection & VM_PROT_EXECUTE)?"x":"-",
-                   "p",
-                   off,        /* offset */
-                   0,          /* major */
-                   0,          /* minor */
-                   ino,        /* inode */
-                   (name && *name) ? "     " : "",
-                   name ? name : "");
-               if (error == -1)
-                       error = ENOMEM;
-               if (freename)
-                       kfree(freename, M_TEMP);
-
-               vm_map_lock_read(map);
-               if (error)
-                       break;
-
-               /*
-                * We use map->hint as a poor man's ripout detector.  If
-                * it does not match the entry we set it to prior to
-                * unlocking the map the entry MIGHT now be stale.  In
-                * this case we do an expensive lookup to find our place
-                * in the iteration again.
-                */
-               if (map->hint != entry) {
-                       vm_map_entry_t reentry;
-               
-                       vm_map_lookup_entry(map, ostart, &reentry);
-                       entry = reentry;
-               }
-       }
-       vm_map_unlock_read(map);
-
-       sbuf_finish(sb);
-       if (error == 0)
-               error = uiomove_frombuf(sbuf_data(sb) + uio->uio_offset,
-                   sbuf_len(sb) - uio->uio_offset, uio);
-       sbuf_delete(sb);
-       return error;
-}
diff --git a/sys/emulation/linux/i386/linprocfs/linprocfs_subr.c b/sys/emulation/linux/i386/linprocfs/linprocfs_subr.c
deleted file mode 100644 (file)
index 08e9b91..0000000
+++ /dev/null
@@ -1,470 +0,0 @@
-/*
- * Copyright (c) 2000 Dag-Erling Coïdan Smørgrav
- * Copyright (c) 1999 Pierre Beyssac
- * Copyright (c) 1993 Jan-Simon Pendry
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Jan-Simon Pendry.
- *
- * 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.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
- *
- *     @(#)procfs_subr.c       8.6 (Berkeley) 5/14/95
- *
- * $FreeBSD: src/sys/i386/linux/linprocfs/linprocfs_subr.c,v 1.3.2.4 2001/06/25 19:46:47 pirzyk Exp $
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/proc.h>
-#include <sys/vnode.h>
-#include <sys/malloc.h>
-#include <sys/mount.h>
-#include "linprocfs.h"
-
-#define PFSHSIZE       256
-#define PFSHMASK       (PFSHSIZE - 1)
-
-static struct pfsnode *pfshead[PFSHSIZE];
-static struct lwkt_token pfs_token;
-static int pfsvplock;
-
-extern int procfs_domem (struct proc *, struct lwp *, struct pfsnode *pfsp, struct uio *uio);
-
-/*
- * allocate a pfsnode/vnode pair.  the vnode is
- * referenced, but not locked.
- *
- * the pid, pfs_type, and mount point uniquely
- * identify a pfsnode.  the mount point is needed
- * because someone might mount this filesystem
- * twice.
- *
- * all pfsnodes are maintained on a singly-linked
- * list.  new nodes are only allocated when they cannot
- * be found on this list.  entries on the list are
- * removed when the vfs reclaim entry is called.
- *
- * a single lock is kept for the entire list.  this is
- * needed because the getnewvnode() function can block
- * waiting for a vnode to become free, in which case there
- * may be more than one process trying to get the same
- * vnode.  this lock is only taken if we are going to
- * call getnewvnode, since the kernel itself is single-threaded.
- *
- * if an entry is found on the list, then call vget() to
- * take a reference.  this is done because there may be
- * zero references to it and so it needs to removed from
- * the vnode free list.
- */
-int
-linprocfs_allocvp(struct mount *mp, struct vnode **vpp, long pid,
-                 pfstype pfs_type)
-{
-       struct pfsnode *pfs;
-       struct vnode *vp;
-       struct pfsnode **pp;
-       int error;
-
-       lwkt_gettoken(&pfs_token);
-loop:
-       for (pfs = pfshead[pid & PFSHMASK]; pfs; pfs = pfs->pfs_next) {
-               vp = PFSTOV(pfs);
-               if (pfs->pfs_pid == pid &&
-                   pfs->pfs_type == pfs_type &&
-                   vp->v_mount == mp) {
-                       if (vget(vp, LK_EXCLUSIVE|LK_SLEEPFAIL))
-                               goto loop;
-                       *vpp = vp;
-                       lwkt_reltoken(&pfs_token);
-                       return (0);
-               }
-       }
-
-       /*
-        * otherwise lock the vp list while we call getnewvnode
-        * since that can block.
-        */
-       if (pfsvplock & PROCFS_LOCKED) {
-               pfsvplock |= PROCFS_WANT;
-               (void) tsleep((caddr_t) &pfsvplock, 0, "pfsavp", 0);
-               goto loop;
-       }
-       pfsvplock |= PROCFS_LOCKED;
-
-       /*
-        * Do the MALLOC before the getnewvnode since doing so afterward
-        * might cause a bogus v_data pointer to get dereferenced
-        * elsewhere if MALLOC should block.
-        */
-       pfs = kmalloc(sizeof(struct pfsnode), M_TEMP, M_WAITOK);
-
-       error = getnewvnode(VT_PROCFS, mp, vpp, 0, 0);
-       if (error) {
-               kfree(pfs, M_TEMP);
-               goto out;
-       }
-       vp = *vpp;
-
-       vp->v_data = pfs;
-
-       pfs->pfs_next = 0;
-       pfs->pfs_pid = (pid_t) pid;
-       pfs->pfs_type = pfs_type;
-       pfs->pfs_vnode = vp;
-       pfs->pfs_flags = 0;
-       pfs->pfs_lockowner = NULL;
-       pfs->pfs_fileno = PROCFS_FILENO(pid, pfs_type);
-
-       switch (pfs_type) {
-       case Proot:     /* /proc = dr-xr-xr-x */
-               vsetflags(vp, VROOT);
-               /* fallthrough */
-       case Pnet:
-       case Psys:
-       case Psyskernel:
-               pfs->pfs_mode = (VREAD|VEXEC) |
-                               (VREAD|VEXEC) >> 3 |
-                               (VREAD|VEXEC) >> 6;
-               vp->v_type = VDIR;
-               break;
-
-       case Pself:     /* /proc/self = lr--r--r-- */
-               pfs->pfs_mode = (VREAD) |
-                               (VREAD >> 3) |
-                               (VREAD >> 6);
-               vp->v_type = VLNK;
-               break;
-
-       case Pproc:
-               pfs->pfs_mode = (VREAD|VEXEC) |
-                               (VREAD|VEXEC) >> 3 |
-                               (VREAD|VEXEC) >> 6;
-               vp->v_type = VDIR;
-               break;
-
-       case Pexe:
-       case Pcwd:
-       case Pprocroot:
-       case Pfd:
-               pfs->pfs_mode = (VREAD|VEXEC) |
-                               (VREAD|VEXEC) >> 3 |
-                               (VREAD|VEXEC) >> 6;
-               vp->v_type = VLNK;
-               break;
-
-       case Pmem:
-               pfs->pfs_mode = (VREAD|VWRITE) |
-                               (VREAD) >> 3;
-               vp->v_type = VREG;
-               break;
-
-       case Pprocstat:
-       case Pprocstatus:
-       case Pcmdline:
-       case Penviron:
-       case Pstatm:
-               /* fallthrough */
-       case Pmaps:
-       case Pmeminfo:
-       case Pcpuinfo:
-       case Pmounts:
-       case Pstat:
-       case Puptime:
-       case Pversion:
-       case Ploadavg:
-       case Pdevices:
-       case Pnetdev:
-       case Posrelease:
-       case Postype:
-       case Ppidmax:
-               pfs->pfs_mode = (VREAD) |
-                               (VREAD >> 3) |
-                               (VREAD >> 6);
-               vp->v_type = VREG;
-               break;
-
-       default:
-               panic("linprocfs_allocvp");
-       }
-
-       /* add to procfs vnode list */
-       for (pp = &pfshead[pid & PFSHMASK]; *pp; pp = &(*pp)->pfs_next)
-               continue;
-       *pp = pfs;
-
-out:
-       pfsvplock &= ~PROCFS_LOCKED;
-
-       if (pfsvplock & PROCFS_WANT) {
-               pfsvplock &= ~PROCFS_WANT;
-               wakeup((caddr_t) &pfsvplock);
-       }
-       lwkt_reltoken(&pfs_token);
-
-       return (error);
-}
-
-int
-linprocfs_freevp(struct vnode *vp)
-{
-       struct pfsnode **pfspp;
-       struct pfsnode *pfs = VTOPFS(vp);
-
-       lwkt_gettoken(&pfs_token);
-       pfspp = &pfshead[pfs->pfs_pid & PFSHMASK]; 
-       while (*pfspp != pfs) {
-               KKASSERT(*pfspp != NULL);
-               pfspp = &(*pfspp)->pfs_next;
-       }
-       *pfspp = pfs->pfs_next;
-       lwkt_reltoken(&pfs_token);
-       kfree(vp->v_data, M_TEMP);
-       vp->v_data = NULL;
-       return (0);
-}
-
-/*
- * Try to find the calling pid. Note that pfind()
- * now references the proc structure to be returned
- * and needs to be released later with PRELE().
- */
-struct proc *
-linprocfs_pfind(pid_t pfs_pid)
-{
-       struct proc *p = NULL;
-
-       if (pfs_pid == 0) {
-               p = &proc0;
-               PHOLD(p);
-       } else {
-               p = pfind(pfs_pid);
-       }
-
-       return p;
-}
-
-int
-linprocfs_rw(struct vop_read_args *ap)
-{
-       struct vnode *vp = ap->a_vp;
-       struct uio *uio = ap->a_uio;
-       struct thread *td = uio->uio_td;
-       struct pfsnode *pfs = VTOPFS(vp);
-       struct proc *p;
-       struct proc *curp;
-       struct lwp *lp;
-       int rtval;
-
-       curp = td->td_proc;
-       KKASSERT(curp);
-
-       p = linprocfs_pfind(pfs->pfs_pid);
-       if (p == NULL) {
-               rtval = EINVAL;
-               goto out;
-       }
-       if (p->p_pid == 1 && securelevel > 0 && uio->uio_rw == UIO_WRITE) {
-               rtval = EACCES;
-               goto out;
-       }
-       lp = FIRST_LWP_IN_PROC(p);
-       LWPHOLD(lp);
-
-       lwkt_gettoken(&pfs_token);
-       while (pfs->pfs_lockowner) {
-               tsleep(&pfs->pfs_lockowner, 0, "pfslck", 0);
-       }
-       pfs->pfs_lockowner = curthread;
-       lwkt_reltoken(&pfs_token);
-
-       switch (pfs->pfs_type) {
-       case Pmem:
-               rtval = procfs_domem(curp, lp, pfs, uio);
-               break;
-       case Pprocstat:
-               rtval = linprocfs_doprocstat(curp, p, pfs, uio);
-               break;
-       case Pprocstatus:
-               rtval = linprocfs_doprocstatus(curp, p, pfs, uio);
-               break;
-       case Pmeminfo:
-               rtval = linprocfs_domeminfo(curp, p, pfs, uio);
-               break;
-       case Pcpuinfo:
-               rtval = linprocfs_docpuinfo(curp, p, pfs, uio);
-               break;
-       case Pmounts:
-               rtval = linprocfs_domounts(curp, p, pfs, uio);
-               break;
-       case Pstat:
-               rtval = linprocfs_dostat(curp, p, pfs, uio);
-               break;
-       case Puptime:
-               rtval = linprocfs_douptime(curp, p, pfs, uio);
-               break;
-       case Pversion:
-               rtval = linprocfs_doversion(curp, p, pfs, uio);
-               break;
-       case Ploadavg:
-               rtval = linprocfs_doloadavg(curp, p, pfs, uio);
-               break;
-       case Pnetdev:
-               rtval = linprocfs_donetdev(curp, p, pfs, uio);
-               break;
-       case Pdevices:
-               rtval = linprocfs_dodevices(curp, p, pfs, uio);
-               break;
-       case Posrelease:
-               rtval = linprocfs_doosrelease(curp, p, pfs, uio);
-               break;
-       case Postype:
-               rtval = linprocfs_doostype(curp, p, pfs, uio);
-               break;
-       case Ppidmax:
-               rtval = linprocfs_dopidmax(curp, p, pfs, uio);
-               break;
-       case Pmaps:
-               rtval = linprocfs_domaps(curp, p, pfs, uio);
-               break;
-       case Pstatm:
-               rtval = linprocfs_dostatm(curp, p, pfs, uio);
-               break;
-       default:
-               rtval = EOPNOTSUPP;
-               break;
-       }
-       LWPRELE(lp);
-
-       lwkt_gettoken(&pfs_token);
-       pfs->pfs_lockowner = NULL;
-       wakeup(&pfs->pfs_lockowner);
-       lwkt_reltoken(&pfs_token);
-out:
-       if (p)
-               PRELE(p);
-
-       return rtval;
-}
-
-#if 0
-/*
- * Get a string from userland into (buf).  Strip a trailing
- * nl character (to allow easy access from the shell).
- * The buffer should be *buflenp + 1 chars long.  vfs_getuserstr
- * will automatically add a nul char at the end.
- *
- * Returns 0 on success or the following errors
- *
- * EINVAL:    file offset is non-zero.
- * EMSGSIZE:  message is longer than kernel buffer
- * EFAULT:    user i/o buffer is not addressable
- */
-int
-vfs_getuserstr(struct uio *uio, char *buf, int *buflenp)
-{
-       int xlen;
-       int error;
-
-       if (uio->uio_offset != 0)
-               return (EINVAL);
-
-       xlen = *buflenp;
-
-       /* must be able to read the whole string in one go */
-       if (xlen < uio->uio_resid)
-               return (EMSGSIZE);
-       xlen = uio->uio_resid;
-
-       if ((error = uiomove(buf, xlen, uio)) != 0)
-               return (error);
-
-       /* allow multiple writes without seeks */
-       uio->uio_offset = 0;
-
-       /* cleanup string and remove trailing newline */
-       buf[xlen] = '\0';
-       xlen = strlen(buf);
-       if (xlen > 0 && buf[xlen-1] == '\n')
-               buf[--xlen] = '\0';
-       *buflenp = xlen;
-
-       return (0);
-}
-
-vfs_namemap_t *
-vfs_findname(vfs_namemap_t *nm, char *buf, int buflen)
-{
-
-       for (; nm->nm_name; nm++)
-               if (bcmp(buf, nm->nm_name, buflen+1) == 0)
-                       return (nm);
-
-       return (0);
-}
-#endif
-
-static void
-linprocfs_init(void *arg __unused)
-{
-       lwkt_token_init(&pfs_token, "linprocfs");
-} 
-SYSINIT(linprocfs_init, SI_SUB_PRE_DRIVERS, SI_ORDER_FIRST,
-       linprocfs_init, NULL);
-
-void
-linprocfs_exit(struct thread *td)
-{
-       struct pfsnode *pfs;
-       struct vnode *vp;
-       pid_t pid;
-
-       KKASSERT(td->td_proc);
-       pid = td->td_proc->p_pid;
-
-       /*
-        * Remove all the procfs vnodes associated with an exiting process.
-        */
-       lwkt_gettoken(&pfs_token);
-restart:
-       for (pfs = pfshead[pid & PFSHMASK]; pfs; pfs = pfs->pfs_next) {
-               if (pfs->pfs_pid == pid) {
-                       vp = PFSTOV(pfs);
-                       vx_get(vp);
-                       pfs->pfs_pid |= PFS_DEAD;
-                       vx_put(vp);
-                       goto restart;
-               }
-       }
-       lwkt_reltoken(&pfs_token);
-       lwkt_token_uninit(&pfs_token);
-}
-
diff --git a/sys/emulation/linux/i386/linprocfs/linprocfs_vfsops.c b/sys/emulation/linux/i386/linprocfs/linprocfs_vfsops.c
deleted file mode 100644 (file)
index d5450ae..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (c) 2000 Dag-Erling Coïdan Smørgrav
- * Copyright (c) 1999 Pierre Beyssac
- * Copyright (c) 1993 Jan-Simon Pendry
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Jan-Simon Pendry.
- *
- * 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.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
- *
- *     @(#)procfs_vfsops.c     8.7 (Berkeley) 5/10/95
- *
- * $FreeBSD: src/sys/i386/linux/linprocfs/linprocfs_vfsops.c,v 1.2.2.3 2001/10/15 20:42:01 des Exp $
- */
-
-/*
- * procfs VFS interface
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/proc.h>
-#include <sys/syslog.h>
-#include <sys/mount.h>
-#include <sys/vnode.h>
-#include "linprocfs.h"
-
-extern struct vop_ops linprocfs_vnode_vops;
-
-static int     linprocfs_mount (struct mount *mp, char *path, caddr_t data,
-                                 struct ucred *cred);
-static int     linprocfs_statfs (struct mount *mp, struct statfs *sbp,
-                                  struct ucred *cred);
-static int     linprocfs_unmount (struct mount *mp, int mntflags);
-
-/*
- * VFS Operations.
- *
- * mount system call
- */
-/* ARGSUSED */
-static int
-linprocfs_mount(struct mount *mp, char *path, caddr_t data, struct ucred *cred)
-{
-       size_t size;
-       int error;
-
-       if (mp->mnt_flag & MNT_UPDATE)
-               return (EOPNOTSUPP);
-
-       if (mp->mnt_vfc->vfc_refcount == 1 && (error = at_exit(linprocfs_exit))) {
-               kprintf("linprocfs:  cannot register linprocfs_exit with at_exit\n");
-               return(error);
-       }
-
-       mp->mnt_flag |= MNT_LOCAL;
-       mp->mnt_kern_flag |= MNTK_NOSTKMNT;
-       mp->mnt_data = 0;
-       vfs_getnewfsid(mp);
-
-       vfs_add_vnodeops(mp, &linprocfs_vnode_vops, &mp->mnt_vn_norm_ops);
-
-       size = sizeof("linprocfs") - 1;
-       bcopy("linprocfs", mp->mnt_stat.f_mntfromname, size);
-       bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size);
-       (void)linprocfs_statfs(mp, &mp->mnt_stat, cred);
-
-       return (0);
-}
-
-/*
- * unmount system call
- */
-static int
-linprocfs_unmount(struct mount *mp, int mntflags)
-{
-       int error;
-       int flags = 0;
-
-       if (mntflags & MNT_FORCE)
-               flags |= FORCECLOSE;
-
-       error = vflush(mp, 0, flags);
-       if (error)
-               return (error);
-
-       if (mp->mnt_vfc->vfc_refcount == 1)
-               rm_at_exit(linprocfs_exit);
-
-       return (0);
-}
-
-int
-linprocfs_root(struct mount *mp, struct vnode **vpp)
-{
-
-       return (linprocfs_allocvp(mp, vpp, 0, Proot));
-}
-
-/*
- * Get file system statistics.
- */
-static int
-linprocfs_statfs(struct mount *mp, struct statfs *sbp, struct ucred *cred)
-{
-       sbp->f_bsize = PAGE_SIZE;
-       sbp->f_iosize = PAGE_SIZE;
-       sbp->f_blocks = 1;      /* avoid divide by zero in some df's */
-       sbp->f_bfree = 0;
-       sbp->f_bavail = 0;
-       sbp->f_files = maxproc;                 /* approx */
-       sbp->f_ffree = maxproc - nprocs;        /* approx */
-
-       if (sbp != &mp->mnt_stat) {
-               sbp->f_type = mp->mnt_vfc->vfc_typenum;
-               bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid));
-               bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
-       }
-
-       return (0);
-}
-
-static struct vfsops linprocfs_vfsops = {
-       linprocfs_mount,
-       vfs_stdstart,
-       linprocfs_unmount,
-       linprocfs_root,
-       vfs_stdquotactl,
-       linprocfs_statfs,
-       vfs_stdsync,
-       vfs_stdvget,
-       vfs_stdfhtovp,
-       vfs_stdcheckexp,
-       vfs_stdvptofh,
-       vfs_stdinit,
-};
-
-VFS_SET(linprocfs_vfsops, linprocfs, VFCF_SYNTHETIC);
-MODULE_VERSION(linprocfs, 1);
-MODULE_DEPEND(linprocfs, linux, 1, 1, 1);
-MODULE_DEPEND(linprocfs, procfs, 1, 1, 1);
diff --git a/sys/emulation/linux/i386/linprocfs/linprocfs_vnops.c b/sys/emulation/linux/i386/linprocfs/linprocfs_vnops.c
deleted file mode 100644 (file)
index 3a4171d..0000000
+++ /dev/null
@@ -1,1664 +0,0 @@
-/*
- * Copyright (c) 2000 Dag-Erling Coïdan Smørgrav
- * Copyright (c) 1999 Pierre Beyssac
- * Copyright (c) 1993, 1995 Jan-Simon Pendry
- * Copyright (c) 1993, 1995
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Jan-Simon Pendry.
- *
- * 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.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
- *
- *     @(#)procfs_vnops.c      8.18 (Berkeley) 5/21/95
- *
- * $FreeBSD: src/sys/i386/linux/linprocfs/linprocfs_vnops.c,v 1.3.2.5 2001/08/12 14:29:19 rwatson Exp $
- */
-
-/*
- * procfs vnode interface
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/time.h>
-#include <sys/kernel.h>
-#include <sys/lock.h>
-#include <sys/fcntl.h>
-#include <sys/proc.h>
-#include <sys/priv.h>
-#include <sys/signalvar.h>
-#include <sys/vnode.h>
-#include <sys/mount.h>
-#include <sys/namei.h>
-#include <sys/dirent.h>
-#include <sys/malloc.h>
-#include <sys/reg.h>
-#include <sys/jail.h>
-#include <vm/vm_zone.h>
-#include "linprocfs.h"
-#include <sys/pioctl.h>
-#include <sys/spinlock2.h>
-
-#include <machine/limits.h>
-
-extern struct vnode *procfs_findtextvp (struct proc *);
-
-static int     linprocfs_access (struct vop_access_args *);
-static int     linprocfs_badop (struct vop_generic_args *);
-static int     linprocfs_bmap (struct vop_bmap_args *);
-static int     linprocfs_close (struct vop_close_args *);
-static int     linprocfs_getattr (struct vop_getattr_args *);
-static int     linprocfs_inactive (struct vop_inactive_args *);
-static int     linprocfs_ioctl (struct vop_ioctl_args *);
-static int     linprocfs_lookup (struct vop_old_lookup_args *);
-static int     linprocfs_open (struct vop_open_args *);
-static int     linprocfs_print (struct vop_print_args *);
-static int     linprocfs_readdir (struct vop_readdir_args *);
-static int     linprocfs_readlink (struct vop_readlink_args *);
-static int     linprocfs_reclaim (struct vop_reclaim_args *);
-static int     linprocfs_setattr (struct vop_setattr_args *);
-
-static int     linprocfs_readdir_proc(struct vop_readdir_args *);
-static int     linprocfs_readdir_root(struct vop_readdir_args *);
-static int     linprocfs_readdir_net(struct vop_readdir_args *ap);
-static int     linprocfs_readdir_sys(struct vop_readdir_args *ap);
-static int     linprocfs_readdir_syskernel(struct vop_readdir_args *ap);
-
-/*
- * procfs vnode operations.
- */
-struct vop_ops linprocfs_vnode_vops = {
-       .vop_default =          vop_defaultop,
-       .vop_access =           linprocfs_access,
-       .vop_advlock =          (void *)linprocfs_badop,
-       .vop_bmap =             linprocfs_bmap,
-       .vop_close =            linprocfs_close,
-       .vop_old_create =       (void *)linprocfs_badop,
-       .vop_getattr =          linprocfs_getattr,
-       .vop_inactive =         linprocfs_inactive,
-       .vop_old_link =         (void *)linprocfs_badop,
-       .vop_old_lookup =       linprocfs_lookup,
-       .vop_old_mkdir =        (void *)linprocfs_badop,
-       .vop_old_mknod =        (void *)linprocfs_badop,
-       .vop_open =             linprocfs_open,
-       .vop_pathconf =         vop_stdpathconf,
-       .vop_print =            linprocfs_print,
-       .vop_read =             (void *)linprocfs_rw,
-       .vop_readdir =          linprocfs_readdir,
-       .vop_readlink =         linprocfs_readlink,
-       .vop_reclaim =          linprocfs_reclaim,
-       .vop_old_remove =       (void *)linprocfs_badop,
-       .vop_old_rename =       (void *)linprocfs_badop,
-       .vop_old_rmdir =        (void *)linprocfs_badop,
-       .vop_setattr =          linprocfs_setattr,
-       .vop_old_symlink =      (void *)linprocfs_badop,
-       .vop_write =            (void *)linprocfs_rw,
-       .vop_ioctl =            linprocfs_ioctl
-};
-
-/*
- * This is a list of the valid names in the
- * process-specific sub-directories.  It is
- * used in linprocfs_lookup and linprocfs_readdir
- */
-static struct proc_target {
-       u_char  pt_type;
-       u_char  pt_namlen;
-       char    *pt_name;
-       pfstype pt_pfstype;
-       int     (*pt_valid) (struct proc *p);
-} proc_targets[] = {
-#define N(s) sizeof(s)-1, s
-       /*        name          type            validp */
-       { DT_DIR, N("."),       Pproc,          NULL },
-       { DT_DIR, N(".."),      Proot,          NULL },
-       { DT_REG, N("mem"),     Pmem,           NULL },
-
-       { DT_LNK, N("exe"),     Pexe,           NULL },
-       { DT_LNK, N("cwd"),     Pcwd,           NULL },
-       { DT_LNK, N("root"),    Pprocroot,      NULL },
-       { DT_LNK, N("fd"),      Pfd,            NULL },
-
-       { DT_REG, N("stat"),    Pprocstat,      NULL },
-       { DT_REG, N("status"),  Pprocstatus,    NULL },
-       { DT_REG, N("maps"),    Pmaps,          NULL },
-       { DT_REG, N("statm"),   Pstatm,         NULL },
-#if 0
-       { DT_REG, N("cmdline"), Pcmdline,       NULL },
-       { DT_REG, N("environ"), Penviron,       NULL },
-#endif
-#undef N
-};
-static const int nproc_targets = NELEM(proc_targets);
-
-static pid_t atopid (const char *, u_int);
-
-/*
- * set things up for doing i/o on
- * the pfsnode (vp).  (vp) is locked
- * on entry, and should be left locked
- * on exit.
- *
- * for procfs we don't need to do anything
- * in particular for i/o.  all that is done
- * is to support exclusive open on process
- * memory images.
- */
-static int
-linprocfs_open(struct vop_open_args *ap)
-{
-       struct pfsnode *pfs = VTOPFS(ap->a_vp);
-       struct proc *p2;
-       int error;
-
-       p2 = linprocfs_pfind(pfs->pfs_pid);
-       if (p2 == NULL) {
-               error = ENOENT;
-       } else if (pfs->pfs_pid && !PRISON_CHECK(ap->a_cred, p2->p_ucred)) {
-               error = ENOENT;
-       } else {
-               error = 0;
-
-               switch (pfs->pfs_type) {
-               case Pmem:
-                       if (((pfs->pfs_flags & FWRITE) &&
-                            (ap->a_mode & O_EXCL)) ||
-                           ((pfs->pfs_flags & O_EXCL) &&
-                            (ap->a_mode & FWRITE))) {
-                               error = EBUSY;
-                               break;
-                       }
-
-                       if (p_trespass(ap->a_cred, p2->p_ucred)) {
-                               error = EPERM;
-                               break;
-                       }
-                       if (ap->a_mode & FWRITE)
-                               pfs->pfs_flags = ap->a_mode & (FWRITE|O_EXCL);
-                       break;
-               default:
-                       break;
-               }
-       }
-       if (error == 0)
-               error = vop_stdopen(ap);
-       if (p2)
-               PRELE(p2);
-       return error;
-}
-
-/*
- * close the pfsnode (vp) after doing i/o.
- * (vp) is not locked on entry or exit.
- *
- * nothing to do for procfs other than undo
- * any exclusive open flag (see _open above).
- */
-static int
-linprocfs_close(struct vop_close_args *ap)
-{
-       struct pfsnode *pfs = VTOPFS(ap->a_vp);
-       struct proc *p;
-
-       switch (pfs->pfs_type) {
-       case Pmem:
-               if ((ap->a_fflag & FWRITE) && (pfs->pfs_flags & O_EXCL))
-                       pfs->pfs_flags &= ~(FWRITE|O_EXCL);
-               /*
-                * If this is the last close, then it checks to see if
-                * the target process has PF_LINGER set in p_pfsflags,
-                * if this is *not* the case, then the process' stop flags
-                * are cleared, and the process is woken up.  This is
-                * to help prevent the case where a process has been
-                * told to stop on an event, but then the requesting process
-                * has gone away or forgotten about it.
-                */
-               p = NULL;
-               if ((ap->a_vp->v_opencount < 2)
-                   && (p = linprocfs_pfind(pfs->pfs_pid))
-                   && !(p->p_pfsflags & PF_LINGER)) {
-                       spin_lock(&p->p_spin);
-                       p->p_stops = 0;
-                       p->p_step = 0;
-                       spin_unlock(&p->p_spin);
-                       wakeup(&p->p_stype);
-               }
-               if (p)
-                       PRELE(p);
-               break;
-       default:
-               break;
-       }
-       return (vop_stdclose(ap));
-}
-
-/*
- * do an ioctl operation on a pfsnode (vp).
- * (vp) is not locked on entry or exit.
- */
-static int
-linprocfs_ioctl(struct vop_ioctl_args *ap)
-{
-       struct pfsnode *pfs = VTOPFS(ap->a_vp);
-       struct proc *procp;
-       int error;
-       int signo;
-       struct procfs_status *psp;
-       unsigned char flags;
-
-       procp = linprocfs_pfind(pfs->pfs_pid);
-       if (procp == NULL)
-               return ENOTTY;
-
-       if (p_trespass(ap->a_cred, procp->p_ucred)) {
-               error = EPERM;
-               goto done;
-       }
-
-       switch (ap->a_command) {
-       case PIOCBIS:
-         procp->p_stops |= *(unsigned int*)ap->a_data;
-         break;
-       case PIOCBIC:
-         procp->p_stops &= ~*(unsigned int*)ap->a_data;
-         break;
-       case PIOCSFL:
-         /*
-          * NFLAGS is "non-suser_xxx flags" -- currently, only
-          * PFS_ISUGID ("ignore set u/g id");
-          */
-#define NFLAGS (PF_ISUGID)
-         flags = (unsigned char)*(unsigned int*)ap->a_data;
-         if (flags & NFLAGS && (error = priv_check_cred(ap->a_cred, PRIV_ROOT, 0)))
-           goto done;
-         procp->p_pfsflags = flags;
-         break;
-       case PIOCGFL:
-         *(unsigned int*)ap->a_data = (unsigned int)procp->p_pfsflags;
-       case PIOCSTATUS:
-         psp = (struct procfs_status *)ap->a_data;
-         psp->flags = procp->p_pfsflags;
-         psp->events = procp->p_stops;
-         spin_lock(&procp->p_spin);
-         if (procp->p_step) {
-           psp->state = 0;
-           psp->why = procp->p_stype;
-           psp->val = procp->p_xstat;
-           spin_unlock(&procp->p_spin);
-         } else {
-           psp->state = 1;
-           spin_unlock(&procp->p_spin);
-           psp->why = 0;       /* Not defined values */
-           psp->val = 0;       /* Not defined values */
-         }
-         break;
-       case PIOCWAIT:
-         psp = (struct procfs_status *)ap->a_data;
-         spin_lock(&procp->p_spin);
-         if (procp->p_step == 0) {
-           tsleep_interlock(&procp->p_stype, PCATCH);
-           spin_unlock(&procp->p_spin);
-           if (procp->p_stops == 0) {
-               error = EINVAL;
-               goto done;
-           }
-           if (procp->p_flags & P_POSTEXIT) {
-               error = EINVAL;
-               goto done;
-           }
-           if (procp->p_flags & P_INEXEC) {
-               error = EAGAIN;
-               goto done;
-           }
-           error = tsleep(&procp->p_stype, PCATCH | PINTERLOCKED,
-                          "piocwait", 0);
-           if (error)
-             goto done;
-         } else {
-           spin_unlock(&procp->p_spin);
-         }
-         psp->state = 1;       /* It stopped */
-         psp->flags = procp->p_pfsflags;
-         psp->events = procp->p_stops;
-         psp->why = procp->p_stype;    /* why it stopped */
-         psp->val = procp->p_xstat;    /* any extra info */
-         break;
-       case PIOCCONT:  /* Restart a proc */
-         if (procp->p_step == 0) {
-           error = EINVAL;     /* Can only start a stopped process */
-           goto done;
-         }
-         if ((signo = *(int*)ap->a_data) != 0) {
-           if (signo >= NSIG || signo <= 0) {
-             error = EINVAL;
-             goto done;
-           }
-           ksignal(procp, signo);
-         }
-         procp->p_step = 0;
-         wakeup(&procp->p_step);
-         break;
-       default:
-         error = ENOTTY;
-         goto done;
-       }
-       error = 0;
-done:
-       if (procp)
-               PRELE(procp);
-       return error;
-}
-
-/*
- * do block mapping for pfsnode (vp).
- * since we don't use the buffer cache
- * for procfs this function should never
- * be called.  in any case, it's not clear
- * what part of the kernel ever makes use
- * of this function.  for sanity, this is the
- * usual no-op bmap, although returning
- * (EIO) would be a reasonable alternative.
- */
-static int
-linprocfs_bmap(struct vop_bmap_args *ap)
-{
-       if (ap->a_doffsetp != NULL)
-               *ap->a_doffsetp = ap->a_loffset;
-       if (ap->a_runp != NULL)
-               *ap->a_runp = 0;
-       if (ap->a_runb != NULL)
-               *ap->a_runb = 0;
-       return (0);
-}
-
-/*
- * linprocfs_inactive is called when the pfsnode
- * is vrele'd and the reference count is about
- * to go to zero.  (vp) will be on the vnode free
- * list, so to get it back vget() must be
- * used.
- *
- * (vp) is locked on entry and must remain locked
- *      on exit.
- */
-static int
-linprocfs_inactive(struct vop_inactive_args *ap)
-{
-       struct pfsnode *pfs = VTOPFS(ap->a_vp);
-
-       if (pfs->pfs_pid & PFS_DEAD)
-               vrecycle(ap->a_vp);
-       return (0);
-}
-
-/*
- * _reclaim is called when getnewvnode()
- * wants to make use of an entry on the vnode
- * free list.  at this time the filesystem needs
- * to free any private data and remove the node
- * from any private lists.
- */
-static int
-linprocfs_reclaim(struct vop_reclaim_args *ap)
-{
-       return (linprocfs_freevp(ap->a_vp));
-}
-
-/*
- * _print is used for debugging.
- * just print a readable description
- * of (vp).
- */
-static int
-linprocfs_print(struct vop_print_args *ap)
-{
-       struct pfsnode *pfs = VTOPFS(ap->a_vp);
-
-       kprintf("tag VT_PROCFS, type %d, pid %ld, mode %x, flags %lx\n",
-           pfs->pfs_type, (long)pfs->pfs_pid, pfs->pfs_mode, pfs->pfs_flags);
-       return (0);
-}
-
-/*
- * generic entry point for unsupported operations
- */
-static int
-linprocfs_badop(struct vop_generic_args *ap __unused)
-{
-
-       return (EIO);
-}
-
-/*
- * Invent attributes for pfsnode (vp) and store
- * them in (vap).
- * Directories lengths are returned as zero since
- * any real length would require the genuine size
- * to be computed, and nothing cares anyway.
- *
- * this is relatively minimal for procfs.
- */
-static int
-linprocfs_getattr(struct vop_getattr_args *ap)
-{
-       struct pfsnode *pfs = VTOPFS(ap->a_vp);
-       struct vattr *vap = ap->a_vap;
-       struct proc *procp;
-       int error;
-
-       /*
-        * First make sure that the process and its credentials 
-        * still exist.
-        */
-       switch (pfs->pfs_type) {
-       case Proot:
-       case Pself:
-               procp = NULL;
-               break;
-
-       default:
-               procp = linprocfs_pfind(pfs->pfs_pid);
-               if (procp == NULL || procp->p_ucred == NULL) {
-                       error = ENOENT;
-                       goto done;
-               }
-       }
-
-       error = 0;
-
-       /* start by zeroing out the attributes */
-       VATTR_NULL(vap);
-
-       /* next do all the common fields */
-       vap->va_type = ap->a_vp->v_type;
-       vap->va_mode = pfs->pfs_mode;
-       vap->va_fileid = pfs->pfs_fileno;
-       vap->va_flags = 0;
-       vap->va_blocksize = PAGE_SIZE;
-       vap->va_bytes = vap->va_size = 0;
-       vap->va_fsid = ap->a_vp->v_mount->mnt_stat.f_fsid.val[0];
-
-       /*
-        * Make all times be current TOD.
-        * It would be possible to get the process start
-        * time from the p_stat structure, but there's
-        * no "file creation" time stamp anyway, and the
-        * p_stat structure is not addressible if u. gets
-        * swapped out for that process.
-        */
-       nanotime(&vap->va_ctime);
-       vap->va_atime = vap->va_mtime = vap->va_ctime;
-
-       /*
-        * now do the object specific fields
-        *
-        * The size could be set from struct reg, but it's hardly
-        * worth the trouble, and it puts some (potentially) machine
-        * dependent data into this machine-independent code.  If it
-        * becomes important then this function should break out into
-        * a per-file stat function in the corresponding .c file.
-        */
-
-       vap->va_nlink = 1;
-       if (procp) {
-               vap->va_uid = procp->p_ucred->cr_uid;
-               vap->va_gid = procp->p_ucred->cr_gid;
-       }
-
-       switch (pfs->pfs_type) {
-       case Proot:
-       case Pnet:
-       case Psys:
-       case Psyskernel:
-               /*
-                * Set nlink to 1 to tell fts(3) we don't actually know.
-                */
-               vap->va_nlink = 1;
-               vap->va_uid = 0;
-               vap->va_gid = 0;
-               vap->va_size = vap->va_bytes = DEV_BSIZE;
-               break;
-
-       case Pself: {
-               char buf[16];           /* should be enough */
-               vap->va_uid = 0;
-               vap->va_gid = 0;
-               vap->va_size = vap->va_bytes =
-                   ksnprintf(buf, sizeof(buf), "%ld", (long)curproc->p_pid);
-               break;
-       }
-
-       case Pproc:
-               vap->va_nlink = nproc_targets;
-               vap->va_size = vap->va_bytes = DEV_BSIZE;
-               break;
-
-       case Pexe: {
-               char *fullpath, *freepath;
-               error = cache_fullpath(procp, &procp->p_textnch, NULL,
-                                      &fullpath, &freepath, 0);
-               /* error = vn_fullpath(procp, NULL, &fullpath, &freepath); */
-               if (error == 0) {
-                       vap->va_size = strlen(fullpath);
-                       kfree(freepath, M_TEMP);
-               } else {
-                       vap->va_size = sizeof("unknown") - 1;
-                       error = 0;
-               }
-               vap->va_bytes = vap->va_size;
-               break;
-       }
-       case Pcwd: {
-               char *fullpath, *freepath;
-               error = cache_fullpath(procp, &procp->p_fd->fd_ncdir, NULL,
-                                      &fullpath, &freepath, 0);
-               if (error == 0) {
-                       vap->va_size = strlen(fullpath);
-                       kfree(freepath, M_TEMP);
-               } else {
-                       vap->va_size = sizeof("unknown") - 1;
-                       error = 0;
-               }
-               vap->va_bytes = vap->va_size;
-               break;
-       }
-       case Pprocroot: {
-               struct nchandle *nchp;
-               char *fullpath, *freepath;
-               nchp = jailed(procp->p_ucred) ? &procp->p_fd->fd_njdir : &procp->p_fd->fd_nrdir;
-               error = cache_fullpath(procp, nchp, NULL,
-                                      &fullpath, &freepath, 0);
-               if (error == 0) {
-                       vap->va_size = strlen(fullpath);
-                       kfree(freepath, M_TEMP);
-               } else {
-                       vap->va_size = sizeof("unknown") - 1;
-                       error = 0;
-               }
-               vap->va_bytes = vap->va_size;
-               break;
-       }
-       case Pfd: {
-               if (procp == curproc) {
-                       vap->va_size = sizeof("/dev/fd") - 1;
-                       error = 0;      
-               } else {
-                       vap->va_size = sizeof("unknown") - 1;
-                       error = 0;
-               }
-               vap->va_bytes = vap->va_size;
-               break;
-       }
-
-       case Pmeminfo:
-       case Pcpuinfo:
-       case Pmounts:
-       case Pstat:
-       case Puptime:
-       case Pversion:
-       case Ploadavg:
-       case Pnetdev:
-       case Pdevices:
-       case Posrelease:
-       case Postype:
-       case Ppidmax:
-               vap->va_bytes = vap->va_size = 0;
-               vap->va_uid = 0;
-               vap->va_gid = 0;
-               break;
-               
-       case Pmem:
-               /*
-                * If we denied owner access earlier, then we have to
-                * change the owner to root - otherwise 'ps' and friends
-                * will break even though they are setgid kmem. *SIGH*
-                */
-               if (procp->p_flags & P_SUGID)
-                       vap->va_uid = 0;
-               else
-                       vap->va_uid = procp->p_ucred->cr_uid;
-               break;
-
-       case Pprocstat:
-       case Pprocstatus:
-       case Pcmdline:
-       case Penviron:
-       case Pmaps:
-       case Pstatm:
-               vap->va_bytes = vap->va_size = 0;
-               /* uid, gid are already set */
-               break;
-
-       default:
-               panic("linprocfs_getattr");
-       }
-done:
-       if (procp)
-               PRELE(procp);
-       return (error);
-}
-
-static int
-linprocfs_setattr(struct vop_setattr_args *ap)
-{
-
-       if (ap->a_vap->va_flags != VNOVAL)
-               return (EOPNOTSUPP);
-
-       /*
-        * just fake out attribute setting
-        * it's not good to generate an error
-        * return, otherwise things like creat()
-        * will fail when they try to set the
-        * file length to 0.  worse, this means
-        * that echo $note > /proc/$pid/note will fail.
-        */
-
-       return (0);
-}
-
-/*
- * implement access checking.
- *
- * something very similar to this code is duplicated
- * throughout the 4bsd kernel and should be moved
- * into kern/vfs_subr.c sometime.
- *
- * actually, the check for super-user is slightly
- * broken since it will allow read access to write-only
- * objects.  this doesn't cause any particular trouble
- * but does mean that the i/o entry points need to check
- * that the operation really does make sense.
- */
-static int
-linprocfs_access(struct vop_access_args *ap)
-{
-       struct vattr *vap;
-       struct vattr vattr;
-       int error;
-
-       /*
-        * If you're the super-user,
-        * you always get access.
-        */
-       if (ap->a_cred->cr_uid == 0)
-               return (0);
-
-       vap = &vattr;
-       error = VOP_GETATTR(ap->a_vp, vap);
-       if (error)
-               return (error);
-
-       /*
-        * Access check is based on only one of owner, group, public.
-        * If not owner, then check group. If not a member of the
-        * group, then check public access.
-        */
-       if (ap->a_cred->cr_uid != vap->va_uid) {
-               gid_t *gp;
-               int i;
-
-               ap->a_mode >>= 3;
-               gp = ap->a_cred->cr_groups;
-               for (i = 0; i < ap->a_cred->cr_ngroups; i++, gp++)
-                       if (vap->va_gid == *gp)
-                               goto found;
-               ap->a_mode >>= 3;
-found:
-               ;
-       }
-
-       if ((vap->va_mode & ap->a_mode) == ap->a_mode)
-               return (0);
-
-       return (EACCES);
-}
-
-/*
- * lookup.  this is incredibly complicated in the general case, however
- * for most pseudo-filesystems very little needs to be done.
- */
-static int
-linprocfs_lookup(struct vop_old_lookup_args *ap)
-{
-       struct componentname *cnp = ap->a_cnp;
-       struct vnode **vpp = ap->a_vpp;
-       struct vnode *dvp = ap->a_dvp;
-       char *pname = cnp->cn_nameptr;
-       struct proc_target *pt;
-       pid_t pid;
-       struct pfsnode *pfs;
-       struct proc *p;
-       int i;
-       int error;
-
-       *vpp = NULL;
-       p = NULL;
-
-       if (cnp->cn_nameiop == NAMEI_DELETE || 
-           cnp->cn_nameiop == NAMEI_RENAME ||
-           cnp->cn_nameiop == NAMEI_CREATE) {
-               return (EROFS);
-       }
-
-       error = 0;
-
-       if (cnp->cn_namelen == 1 && *pname == '.') {
-               *vpp = dvp;
-               vref(*vpp);
-               goto out;
-       }
-
-       pfs = VTOPFS(dvp);
-       switch (pfs->pfs_type) {
-       case Psys:
-               if (cnp->cn_flags & CNP_ISDOTDOT) {
-                       error = linprocfs_root(dvp->v_mount, vpp);
-                       goto out;
-               }
-               if (CNEQ(cnp, "kernel", 6)) {
-                       error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Psyskernel);
-                       goto out;
-               }               
-               break;
-       case Pnet:
-               if (cnp->cn_flags & CNP_ISDOTDOT) {
-                       error = linprocfs_root(dvp->v_mount, vpp);
-                       goto out;
-               }
-               if (CNEQ(cnp, "dev", 3)) {
-                       error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Pnetdev);
-                       goto out;
-               }               
-               break;
-       case Psyskernel:
-               if (cnp->cn_flags & CNP_ISDOTDOT) {
-                       /* XXX: this is wrong, wrong, wrong. */
-                       error = linprocfs_root(dvp->v_mount, vpp);
-                       goto out;
-               }
-               if (CNEQ(cnp, "osrelease", 9)) {
-                       error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Posrelease);
-                       goto out;
-               }
-               if (CNEQ(cnp, "ostype", 6)) {
-                       error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Postype);
-                       goto out;
-               }
-               if (CNEQ(cnp, "pid_max", 7)) {
-                       error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Ppidmax);
-                       goto out;
-               }
-               if (CNEQ(cnp, "version", 7)) {
-                       error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Pversion);
-                       goto out;
-               }
-               break;
-               
-       case Proot:
-               if (cnp->cn_flags & CNP_ISDOTDOT)
-                       return (EIO);
-
-               if (CNEQ(cnp, "self", 4)) {
-                       error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Pself);
-                       goto out;
-               }
-               if (CNEQ(cnp, "meminfo", 7)) {
-                       error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Pmeminfo);
-                       goto out;
-               }
-               if (CNEQ(cnp, "cpuinfo", 7)) {
-                       error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Pcpuinfo);
-                       goto out;
-               }
-               if (CNEQ(cnp, "mounts", 6)) {
-                       error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Pmounts);
-                       goto out;
-               }
-               if (CNEQ(cnp, "stat", 4)) {
-                       error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Pstat);
-                       goto out;
-               }
-               if (CNEQ(cnp, "uptime", 6)) {
-                       error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Puptime);
-                       goto out;
-               }
-               if (CNEQ(cnp, "version", 7)) {
-                       error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Pversion);
-                       goto out;
-               }
-               if (CNEQ(cnp, "loadavg", 7)) {
-                       error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Ploadavg);
-                       goto out;
-               }
-               if (CNEQ(cnp, "net", 3)) {
-                       error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Pnet);
-                       goto out;
-               }
-               if (CNEQ(cnp, "sys", 3)) {
-                       error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Psys);
-                       goto out;
-               }
-               if (CNEQ(cnp, "devices", 7)) {
-                       error = linprocfs_allocvp(dvp->v_mount, vpp, 0, Pdevices);
-                       goto out;
-               }
-
-               pid = atopid(pname, cnp->cn_namelen);
-               if (pid == NO_PID)
-                       break;
-
-               p = linprocfs_pfind(pid);
-               if (p == NULL)
-                       break;
-
-               if (!PRISON_CHECK(ap->a_cnp->cn_cred, p->p_ucred))
-                       break;
-
-               if (ps_showallprocs == 0 && ap->a_cnp->cn_cred->cr_uid != 0 &&
-                   ap->a_cnp->cn_cred->cr_uid != p->p_ucred->cr_uid)
-                       break;
-
-               error = linprocfs_allocvp(dvp->v_mount, vpp, pid, Pproc);
-               goto out;
-
-       case Pproc:
-               if (cnp->cn_flags & CNP_ISDOTDOT) {
-                       error = linprocfs_root(dvp->v_mount, vpp);
-                       goto out;
-               }
-
-               p = linprocfs_pfind(pfs->pfs_pid);
-               if (p == NULL)
-                       break;
-
-               if (!PRISON_CHECK(ap->a_cnp->cn_cred, p->p_ucred))
-                       break;
-
-               if (ps_showallprocs == 0 && ap->a_cnp->cn_cred->cr_uid != 0 &&
-                   ap->a_cnp->cn_cred->cr_uid != p->p_ucred->cr_uid)
-                       break;
-
-               for (pt = proc_targets, i = 0; i < nproc_targets; pt++, i++) {
-                       if (cnp->cn_namelen == pt->pt_namlen &&
-                           bcmp(pt->pt_name, pname, cnp->cn_namelen) == 0 &&
-                           (pt->pt_valid == NULL || (*pt->pt_valid)(p)))
-                               goto found;
-               }
-               break;
-
-       found:
-               error = linprocfs_allocvp(dvp->v_mount, vpp, pfs->pfs_pid,
-                                       pt->pt_pfstype);
-               goto out;
-
-       default:
-               error = ENOTDIR;
-               goto out;
-       }
-
-       if (cnp->cn_nameiop == NAMEI_LOOKUP)
-               error = ENOENT;
-       else
-               error = EROFS;
-
-       /*
-        * If no error occured *vpp will hold a referenced locked vnode.
-        * dvp was passed to us locked and *vpp must be returned locked
-        * so if dvp != *vpp and CNP_LOCKPARENT is not set, unlock dvp.
-        */
-out:
-       if (p)
-               PRELE(p);
-       if (error == 0) {
-               if (*vpp != dvp && (cnp->cn_flags & CNP_LOCKPARENT) == 0) {
-                       cnp->cn_flags |= CNP_PDIRUNLOCK;
-                       vn_unlock(dvp);
-               }
-       }
-       return (error);
-}
-
-/*
- * Does this process have a text file?
- */
-int
-linprocfs_validfile(struct proc *p)
-{
-
-       return (procfs_findtextvp(p) != NULLVP);
-}
-
-/*
- * readdir() returns directory entries from pfsnode (vp).
- *
- * We generate just one directory entry at a time, as it would probably
- * not pay off to buffer several entries locally to save uiomove calls.
- *
- * linprocfs_readdir(struct vnode *a_vp, struct uio *a_uio,
- *                  struct ucred *a_cred, int *a_eofflag,
- *                  int *a_ncookies, off_t **a_cookies)
- */
-static int
-linprocfs_readdir(struct vop_readdir_args *ap)
-{
-       struct pfsnode *pfs;
-       int error;
-
-       if (ap->a_uio->uio_offset < 0 || ap->a_uio->uio_offset > INT_MAX)
-               return (EINVAL);
-
-       pfs = VTOPFS(ap->a_vp);
-       error = vn_lock(ap->a_vp, LK_EXCLUSIVE | LK_RETRY | LK_FAILRECLAIM);
-       if (error)
-               return (error);
-
-       switch (pfs->pfs_type) {
-       case Pproc:
-               /*
-                * This is for the process-specific sub-directories.
-                * all that is needed to is copy out all the entries
-                * from the procent[] table (top of this file).
-                */
-               error = linprocfs_readdir_proc(ap);
-               break;
-       case Proot:
-               /*
-                * This is for the root of the procfs filesystem
-                * what is needed is a special entry for "self"
-                * followed by an entry for each process on allproc
-                */
-               error = linprocfs_readdir_root(ap);
-               break;
-       case Pnet:
-               error = linprocfs_readdir_net(ap);
-               break;
-       case Psys:
-               error = linprocfs_readdir_sys(ap);
-               break;
-       case Psyskernel:
-               error = linprocfs_readdir_syskernel(ap);
-               break;
-       default:
-               error = ENOTDIR;
-               break;
-       }
-       vn_unlock(ap->a_vp);
-
-       return (error);
-}
-
-static int
-linprocfs_readdir_proc(struct vop_readdir_args *ap)
-{
-       struct pfsnode *pfs;
-       int error, i, retval;
-       struct proc *p;
-       struct proc_target *pt;
-       struct uio *uio = ap->a_uio;
-
-       pfs = VTOPFS(ap->a_vp);
-       p = linprocfs_pfind(pfs->pfs_pid);
-       if (p == NULL)
-               return(0);
-       if (!PRISON_CHECK(ap->a_cred, p->p_ucred)) {
-               PRELE(p);
-               return(0);
-       }
-
-       error = 0;
-       i = uio->uio_offset;
-
-       for (pt = &proc_targets[i];
-            !error && uio->uio_resid > 0 && i < nproc_targets; pt++, i++) {
-               if (pt->pt_valid && (*pt->pt_valid)(p) == 0)
-                       continue;
-
-               retval = vop_write_dirent(&error, uio,
-                   PROCFS_FILENO(pfs->pfs_pid, pt->pt_pfstype), pt->pt_type,
-                   pt->pt_namlen, pt->pt_name);
-               if (retval)
-                       break;
-       }
-
-       uio->uio_offset = i;
-       PRELE(p);
-
-       return(error);
-}
-
-struct linprocfs_readdir_root_info {
-       int error;
-       int pcnt;
-       int i;
-       struct uio *uio;
-       struct ucred *cred;
-};
-
-/*
- * Scan the root directory by scanning all process
- */
-static int linprocfs_readdir_root_callback(struct proc *p, void *data);
-
-static int
-linprocfs_readdir_root(struct vop_readdir_args *ap)
-{
-       struct linprocfs_readdir_root_info info;
-       struct uio *uio = ap->a_uio;
-       int res = 0;
-
-       info.error = 0;
-       info.i = uio->uio_offset;
-       info.pcnt = 0;
-       info.uio = uio;
-       info.cred = ap->a_cred;
-
-       while (info.pcnt < 13) {
-               res = linprocfs_readdir_root_callback(NULL, &info);
-               if (res < 0)
-                       break;
-       }
-       if (res >= 0)
-               allproc_scan(linprocfs_readdir_root_callback, &info);
-
-       uio->uio_offset = info.i;
-       return(info.error);
-}
-
-static int
-linprocfs_readdir_root_callback(struct proc *p, void *data)
-{
-       struct linprocfs_readdir_root_info *info = data;
-       int retval;
-       struct uio *uio = info->uio;
-       ino_t d_ino;
-       const char *d_name;
-       char d_name_pid[20];
-       size_t d_namlen;
-       uint8_t d_type;
-
-       switch (info->pcnt) {
-       case 0:         /* `.' */
-               d_ino = PROCFS_FILENO(0, Proot);
-               d_name = ".";
-               d_namlen = 1;
-               d_type = DT_DIR;
-               break;
-       case 1:         /* `..' */
-               d_ino = PROCFS_FILENO(0, Proot);
-               d_name = "..";
-               d_namlen = 2;
-               d_type = DT_DIR;
-               break;
-
-       case 2:
-               d_ino = PROCFS_FILENO(0, Proot);
-               d_namlen = 4;
-               d_name = "self";
-               d_type = DT_LNK;
-               break;
-
-       case 3:
-               d_ino = PROCFS_FILENO(0, Pmeminfo);
-               d_namlen = 7;
-               d_name = "meminfo";
-               d_type = DT_REG;
-               break;
-
-       case 4:
-               d_ino = PROCFS_FILENO(0, Pcpuinfo);
-               d_namlen = 7;
-               d_name = "cpuinfo";
-               d_type = DT_REG;
-               break;
-
-       case 5:
-               d_ino = PROCFS_FILENO(0, Pstat);
-               d_namlen = 4;
-               d_name = "stat";
-               d_type = DT_REG;
-               break;
-                   
-       case 6:
-               d_ino = PROCFS_FILENO(0, Puptime);
-               d_namlen = 6;
-               d_name = "uptime";
-               d_type = DT_REG;
-               break;
-
-       case 7:
-               d_ino = PROCFS_FILENO(0, Pversion);
-               d_namlen = 7;
-               d_name = "version";
-               d_type = DT_REG;
-               break;
-
-       case 8:
-               d_ino = PROCFS_FILENO(0, Ploadavg);
-               d_namlen = 7;
-               d_name = "loadavg";
-               d_type = DT_REG;
-               break;
-       case 9:
-               d_ino = PROCFS_FILENO(0, Pnet);
-               d_namlen = 3;
-               d_name = "net";
-               d_type = DT_DIR;
-               break;
-       case 10:
-               d_ino = PROCFS_FILENO(0, Psys);
-               d_namlen = 3;
-               d_name = "sys";
-               d_type = DT_DIR;
-               break;
-       case 11:
-               d_ino = PROCFS_FILENO(0, Pmounts);
-               d_namlen = 6;
-               d_name = "mounts";
-               d_type = DT_DIR;
-               break;
-       case 12:
-               d_ino = PROCFS_FILENO(0, Pdevices);
-               d_namlen = 7;
-               d_name = "devices";
-               d_type = DT_REG;
-               break;          
-       default:
-               /*
-                * Ignore processes that aren't in our prison
-                */
-               if (PRISON_CHECK(info->cred, p->p_ucred) == 0)
-                       return(0);
-
-               /*
-                * Ignore processes that we do not want to be visible.
-                */
-               if (ps_showallprocs == 0 && 
-                   info->cred->cr_uid != 0 &&
-                   info->cred->cr_uid != p->p_ucred->cr_uid) {
-                       return(0);
-               }
-
-               /*
-                * Skip processes we have already read (optimization)
-                */
-               if (info->pcnt < info->i) {
-                       ++info->pcnt;
-                       return(0);
-               }
-               d_ino = PROCFS_FILENO(p->p_pid, Pproc);
-               d_namlen = ksnprintf(d_name_pid, sizeof(d_name_pid),
-                   "%ld", (long)p->p_pid);
-               d_name = d_name_pid;
-               d_type = DT_DIR;
-               break;
-       }
-
-       /*
-        * Skip processes we have already read
-        */
-       if (info->pcnt < info->i) {
-               ++info->pcnt;
-               return(0);
-       }
-       retval = vop_write_dirent(&info->error, info->uio, 
-                                 d_ino, d_type, d_namlen, d_name);
-       if (retval == 0) {
-               ++info->pcnt;   /* iterate proc candidates scanned */
-               ++info->i;      /* iterate entries written */
-       }
-       if (retval || info->error || uio->uio_resid <= 0)
-               return(-1);
-       return(0);
-}
-
-/*
- * Scan the root directory by scanning all process
- */
-static int linprocfs_readdir_net_callback(struct proc *p, void *data);
-
-static int
-linprocfs_readdir_net(struct vop_readdir_args *ap)
-{
-       struct linprocfs_readdir_root_info info;
-       struct uio *uio = ap->a_uio;
-       int res;
-
-       info.error = 0;
-       info.i = uio->uio_offset;
-       info.pcnt = 0;
-       info.uio = uio;
-       info.cred = ap->a_cred;
-
-       while (info.pcnt < 3) {
-               res = linprocfs_readdir_net_callback(NULL, &info);
-               if (res < 0)
-                       break;
-       }
-
-       uio->uio_offset = info.i;
-       return(info.error);
-}
-
-static int
-linprocfs_readdir_net_callback(struct proc *p, void *data)
-{
-       struct linprocfs_readdir_root_info *info = data;
-       int retval;
-       struct uio *uio = info->uio;
-       ino_t d_ino;
-       const char *d_name;
-       size_t d_namlen;
-       uint8_t d_type;
-
-       switch (info->pcnt) {
-       case 0:         /* `.' */
-               d_ino = PROCFS_FILENO(0, Pnet);
-               d_name = ".";
-               d_namlen = 1;
-               d_type = DT_DIR;
-               break;
-       case 1:         /* `..' */
-               d_ino = PROCFS_FILENO(0, Proot);
-               d_name = "..";
-               d_namlen = 2;
-               d_type = DT_DIR;
-               break;
-
-       case 2:
-               d_ino = PROCFS_FILENO(0, Pnet);
-               d_namlen = 3;
-               d_name = "dev";
-               d_type = DT_REG;
-               break;
-       default:
-               d_ino = 0;
-               d_namlen = 0;
-               d_name = NULL;
-               d_type = DT_REG;
-               break;
-       }
-
-       /*
-        * Skip processes we have already read
-        */
-       if (info->pcnt < info->i) {
-               ++info->pcnt;
-               return(0);
-       }
-       retval = vop_write_dirent(&info->error, info->uio, 
-                                 d_ino, d_type, d_namlen, d_name);
-       if (retval == 0) {
-               ++info->pcnt;   /* iterate proc candidates scanned */
-               ++info->i;      /* iterate entries written */
-       }
-       if (retval || info->error || uio->uio_resid <= 0)
-               return(-1);
-       return(0);
-}
-
-
-
-
-
-
-
-/*
- * Scan the root directory by scanning all process
- */
-static int linprocfs_readdir_sys_callback(struct proc *p, void *data);
-
-static int
-linprocfs_readdir_sys(struct vop_readdir_args *ap)
-{
-       struct linprocfs_readdir_root_info info;
-       struct uio *uio = ap->a_uio;
-       int res;
-
-       info.error = 0;
-       info.i = uio->uio_offset;
-       info.pcnt = 0;
-       info.uio = uio;
-       info.cred = ap->a_cred;
-
-       while (info.pcnt < 3) {
-               res = linprocfs_readdir_sys_callback(NULL, &info);
-               if (res < 0)
-                       break;
-       }
-
-       uio->uio_offset = info.i;
-       return(info.error);
-}
-
-static int
-linprocfs_readdir_sys_callback(struct proc *p, void *data)
-{
-       struct linprocfs_readdir_root_info *info = data;
-       int retval;
-       struct uio *uio = info->uio;
-       ino_t d_ino;
-       const char *d_name;
-       size_t d_namlen;
-       uint8_t d_type;
-
-       switch (info->pcnt) {
-       case 0:         /* `.' */
-               d_ino = PROCFS_FILENO(0, Psys);
-               d_name = ".";
-               d_namlen = 1;
-               d_type = DT_DIR;
-               break;
-       case 1:         /* `..' */
-               d_ino = PROCFS_FILENO(0, Proot);
-               d_name = "..";
-               d_namlen = 2;
-               d_type = DT_DIR;
-               break;
-
-       case 2:
-               d_ino = PROCFS_FILENO(0, Psyskernel);
-               d_namlen = 6;
-               d_name = "kernel";
-               d_type = DT_DIR;
-               break;
-       default:
-               d_ino = 0;
-               d_namlen = 0;
-               d_name = NULL;
-               d_type = DT_REG;
-               break;
-       }
-
-       /*
-        * Skip processes we have already read
-        */
-       if (info->pcnt < info->i) {
-               ++info->pcnt;
-               return(0);
-       }
-       retval = vop_write_dirent(&info->error, info->uio, 
-                                 d_ino, d_type, d_namlen, d_name);
-       if (retval == 0) {
-               ++info->pcnt;   /* iterate proc candidates scanned */
-               ++info->i;      /* iterate entries written */
-       }
-       if (retval || info->error || uio->uio_resid <= 0)
-               return(-1);
-       return(0);
-}
-
-
-
-
-
-/*
- * Scan the root directory by scanning all process
- */
-static int linprocfs_readdir_syskernel_callback(struct proc *p, void *data);
-
-static int
-linprocfs_readdir_syskernel(struct vop_readdir_args *ap)
-{
-       struct linprocfs_readdir_root_info info;
-       struct uio *uio = ap->a_uio;
-       int res;
-
-       info.error = 0;
-       info.i = uio->uio_offset;
-       info.pcnt = 0;
-       info.uio = uio;
-       info.cred = ap->a_cred;
-
-       while (info.pcnt < 6) {
-               res = linprocfs_readdir_syskernel_callback(NULL, &info);
-               if (res < 0)
-                       break;
-       }
-
-       uio->uio_offset = info.i;
-       return(info.error);
-}
-
-static int
-linprocfs_readdir_syskernel_callback(struct proc *p, void *data)
-{
-       struct linprocfs_readdir_root_info *info = data;
-       int retval;
-       struct uio *uio = info->uio;
-       ino_t d_ino;
-       const char *d_name;
-       size_t d_namlen;
-       uint8_t d_type;
-
-       switch (info->pcnt) {
-       case 0:         /* `.' */
-               d_ino = PROCFS_FILENO(0, Psyskernel);
-               d_name = ".";
-               d_namlen = 1;
-               d_type = DT_DIR;
-               break;
-       case 1:         /* `..' */
-               d_ino = PROCFS_FILENO(0, Psys);
-               d_name = "..";
-               d_namlen = 2;
-               d_type = DT_DIR;
-               break;
-
-       case 2:
-               d_ino = PROCFS_FILENO(0, Posrelease);
-               d_namlen = 9;
-               d_name = "osrelease";
-               d_type = DT_REG;
-               break;
-
-       case 3:
-               d_ino = PROCFS_FILENO(0, Postype);
-               d_namlen = 4;
-               d_name = "ostype";
-               d_type = DT_REG;
-               break;
-
-       case 4:
-               d_ino = PROCFS_FILENO(0, Pversion);
-               d_namlen = 7;
-               d_name = "version";
-               d_type = DT_REG;
-               break;
-
-       case 5:
-               d_ino = PROCFS_FILENO(0, Ppidmax);
-               d_namlen = 7;
-               d_name = "pid_max";
-               d_type = DT_REG;
-               break;
-       default:
-               d_ino = 0;
-               d_namlen = 0;
-               d_name = NULL;
-               d_type = DT_REG;
-               break;
-       }
-
-       /*
-        * Skip processes we have already read
-        */
-       if (info->pcnt < info->i) {
-               ++info->pcnt;
-               return(0);
-       }
-       retval = vop_write_dirent(&info->error, info->uio, 
-                                 d_ino, d_type, d_namlen, d_name);
-       if (retval == 0) {
-               ++info->pcnt;   /* iterate proc candidates scanned */
-               ++info->i;      /* iterate entries written */
-       }
-       if (retval || info->error || uio->uio_resid <= 0)
-               return(-1);
-       return(0);
-}
-
-/*
- * readlink reads the link of `self' or `exe'
- */
-static int
-linprocfs_readlink(struct vop_readlink_args *ap)
-{
-       char buf[16];           /* should be enough */
-       struct proc *procp;
-       struct vnode *vp = ap->a_vp;
-       struct nchandle *nchp;
-       struct pfsnode *pfs = VTOPFS(vp);
-       char *fullpath, *freepath;
-       int error, len;
-
-       error = 0;
-       procp = NULL;
-
-       switch (pfs->pfs_type) {
-       case Pself:
-               if (pfs->pfs_fileno != PROCFS_FILENO(0, Pself))
-                       return (EINVAL);
-
-               len = ksnprintf(buf, sizeof(buf), "%ld", (long)curproc->p_pid);
-
-               error = uiomove(buf, len, ap->a_uio);
-               break;
-       /*
-        * There _should_ be no way for an entire process to disappear
-        * from under us...
-        */
-       case Pexe:
-               procp = linprocfs_pfind(pfs->pfs_pid);
-               if (procp == NULL || procp->p_ucred == NULL) {
-                       kprintf("linprocfs_readlink: pid %d disappeared\n",
-                           pfs->pfs_pid);
-                       error = uiomove("unknown", sizeof("unknown") - 1,
-                                       ap->a_uio);
-                       break;
-               }
-               error = cache_fullpath(procp, &procp->p_textnch, NULL,
-                                      &fullpath, &freepath, 0);
-               if (error != 0) {
-                       error = uiomove("unknown", sizeof("unknown") - 1,
-                                       ap->a_uio);
-                       break;
-               }
-               error = uiomove(fullpath, strlen(fullpath), ap->a_uio);
-               kfree(freepath, M_TEMP);
-               break;
-       case Pcwd:
-               procp = linprocfs_pfind(pfs->pfs_pid);
-               if (procp == NULL || procp->p_ucred == NULL) {
-                       kprintf("linprocfs_readlink: pid %d disappeared\n",
-                               pfs->pfs_pid);
-                       error = uiomove("unknown", sizeof("unknown") - 1,
-                                       ap->a_uio);
-                       break;
-               }
-               error = cache_fullpath(procp, &procp->p_fd->fd_ncdir, NULL,
-                                      &fullpath, &freepath, 0);
-               if (error != 0) {
-                       error = uiomove("unknown", sizeof("unknown") - 1,
-                                       ap->a_uio);
-                       break;
-               }
-               error = uiomove(fullpath, strlen(fullpath), ap->a_uio);
-               kfree(freepath, M_TEMP);
-               break;
-       case Pprocroot:
-               procp = linprocfs_pfind(pfs->pfs_pid);
-               if (procp == NULL || procp->p_ucred == NULL) {
-                       kprintf("linprocfs_readlink: pid %d disappeared\n",
-                           pfs->pfs_pid);
-                       error = uiomove("unknown", sizeof("unknown") - 1,
-                                       ap->a_uio);
-                       break;
-               }
-               nchp = jailed(procp->p_ucred) ? &procp->p_fd->fd_njdir : &procp->p_fd->fd_nrdir;
-               error = cache_fullpath(procp, nchp, NULL,
-                                      &fullpath, &freepath, 0);
-               if (error != 0) {
-                       error = uiomove("unknown", sizeof("unknown") - 1,
-                                       ap->a_uio);
-                       break;
-               }
-               error = uiomove(fullpath, strlen(fullpath), ap->a_uio);
-               kfree(freepath, M_TEMP);
-               break;
-       case Pfd:
-               procp = linprocfs_pfind(pfs->pfs_pid);
-               if (procp == NULL || procp->p_ucred == NULL) {
-                       kprintf("linprocfs_readlink: pid %d disappeared\n",
-                           pfs->pfs_pid);
-                       error = uiomove("unknown", sizeof("unknown") - 1,
-                                       ap->a_uio);
-                       break;
-               }
-               if (procp == curproc) {
-                       error = uiomove("/dev/fd", sizeof("/dev/fd") - 1,
-                                       ap->a_uio);
-                       break;
-               } else {
-                       error = uiomove("unknown", sizeof("unknown") - 1,
-                                       ap->a_uio);
-                       break;
-               }
-               /* notreached */
-               break;
-       default:
-               error = EINVAL;
-               break;
-       }
-       if (procp)
-               PRELE(procp);
-       return error;
-}
-
-/*
- * convert decimal ascii to pid_t
- */
-static pid_t
-atopid(const char *b, u_int len)
-{
-       pid_t p = 0;
-
-       while (len--) {
-               char c = *b++;
-               if (c < '0' || c > '9')
-                       return (NO_PID);
-               p = 10 * p + (c - '0');
-               if (p > PID_MAX)
-                       return (NO_PID);
-       }
-
-       return (p);
-}
-
diff --git a/sys/emulation/linux/i386/linux.h b/sys/emulation/linux/i386/linux.h
deleted file mode 100644 (file)
index 5d89de9..0000000
+++ /dev/null
@@ -1,821 +0,0 @@
-/*-
- * Copyright (c) 1994-1996 Søren Schmidt
- * 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 
- *    in this position and unchanged.
- * 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.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission
- *
- * 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.
- *
- * $FreeBSD: src/sys/i386/linux/linux.h,v 1.41.2.4 2003/01/06 09:19:43 fjoe Exp $
- * $DragonFly: src/sys/emulation/linux/i386/linux.h,v 1.9 2006/10/23 21:50:32 dillon Exp $
- */
-
-#ifndef _EMULATION_LINUX_ARCH_LINUX_H_
-#define        _EMULATION_LINUX_ARCH_LINUX_H_
-
-#include <sys/signal.h> /* for sigval union */
-
-#include "linux_syscall.h"
-
-/*
- * debugging support
- */
-extern u_char linux_debug_map[];
-#define ldebug(name)   isclr(linux_debug_map, LINUX_SYS_linux_ ## name)
-#define ARGS(nm, fmt)  "linux(%ld): "#nm"("fmt")\n", (long)(curthread->td_proc ? curthread->td_proc->p_pid : -1)
-#define LMSG(fmt)      "linux(%ld): "fmt"\n", (long)(curthread->td_proc ? curthread->td_proc->p_pid : -1)
-
-#if 0
-#define LINUX_DEBUG    1
-#endif
-
-#ifdef MALLOC_DECLARE
-MALLOC_DECLARE(M_LINUX);
-#endif
-
-#define        PTRIN(v)        (void *)(v)
-#define        PTROUT(v)       (l_uintptr_t)(v)
-
-/*
- * Provide a separate set of types for the Linux types.
- */
-typedef int            l_int;
-typedef int32_t                l_long;
-typedef int64_t                l_longlong;
-typedef short          l_short;
-typedef unsigned int   l_uint;
-typedef uint32_t       l_ulong;
-typedef uint64_t       l_ulonglong;
-typedef unsigned short l_ushort;
-
-typedef l_ulong                l_uintptr_t;
-typedef char           *l_caddr_t;
-typedef l_long         l_clock_t;
-typedef l_int          l_daddr_t;
-typedef l_ushort       l_dev_t;
-typedef l_uint         l_gid_t;
-typedef l_ushort       l_gid16_t;
-typedef l_ulong                l_ino_t;
-typedef l_int          l_key_t;
-typedef l_longlong     l_loff_t;
-typedef l_ushort       l_mode_t;
-typedef l_long         l_off_t;
-typedef l_int          l_pid_t;
-typedef l_uint         l_size_t;
-typedef l_long         l_suseconds_t;
-typedef l_long         l_time_t;
-typedef l_uint         l_uid_t;
-typedef l_ushort       l_uid16_t;
-typedef l_int          l_timer_t;
-typedef l_int          l_mqd_t;
-
-typedef struct {
-       l_int           val[2];
-} l_fsid_t;
-
-typedef struct {
-       l_time_t        tv_sec;
-       l_suseconds_t   tv_usec;
-} l_timeval;
-
-#define        l_fd_set        fd_set
-
-/*
- * Miscellaneous
- */
-#define        LINUX_NAME_MAX          255
-#define        LINUX_MAX_UTSNAME       65
-
-#define        LINUX_CTL_MAXNAME       10
-
-struct l___sysctl_args
-{
-       l_int           *name;
-       l_int           nlen;
-       void            *oldval;
-       l_size_t        *oldlenp;
-       void            *newval;
-       l_size_t        newlen;
-       l_ulong         __spare[4];
-};
-
-/* Scheduling policies */
-#define        LINUX_SCHED_OTHER       0
-#define        LINUX_SCHED_FIFO        1
-#define        LINUX_SCHED_RR          2
-
-/* Resource limits */
-#define        LINUX_RLIMIT_CPU        0
-#define        LINUX_RLIMIT_FSIZE      1
-#define        LINUX_RLIMIT_DATA       2
-#define        LINUX_RLIMIT_STACK      3
-#define        LINUX_RLIMIT_CORE       4
-#define        LINUX_RLIMIT_RSS        5
-#define        LINUX_RLIMIT_NPROC      6
-#define        LINUX_RLIMIT_NOFILE     7
-#define        LINUX_RLIMIT_MEMLOCK    8
-#define        LINUX_RLIMIT_AS         9       /* address space limit */
-
-#define        LINUX_RLIM_NLIMITS      10
-
-struct l_rlimit {
-       l_ulong rlim_cur;
-       l_ulong rlim_max;
-};
-
-/* mmap options */
-#define        LINUX_MAP_SHARED        0x0001
-#define        LINUX_MAP_PRIVATE       0x0002
-#define        LINUX_MAP_FIXED         0x0010
-#define        LINUX_MAP_ANON          0x0020
-#define        LINUX_MAP_GROWSDOWN     0x0100
-
-/*
- * stat family of syscalls
- */
-struct l_timespec {
-       l_time_t        tv_sec;
-       l_long          tv_nsec;
-};
-
-struct l_newstat {
-       l_ushort        st_dev;
-       l_ushort        __pad1;
-       l_ulong         st_ino;
-       l_ushort        st_mode;
-       l_ushort        st_nlink;
-       l_ushort        st_uid;
-       l_ushort        st_gid;
-       l_ushort        st_rdev;
-       l_ushort        __pad2;
-       l_ulong         st_size;
-       l_ulong         st_blksize;
-       l_ulong         st_blocks;
-       struct l_timespec       st_atimespec;
-       struct l_timespec       st_mtimespec;
-       struct l_timespec       st_ctimespec;
-       l_ulong         __unused4;
-       l_ulong         __unused5;
-};
-
-struct l_stat64 {
-       l_ushort        st_dev;
-       u_char          __pad0[10];
-       l_ulong         __st_ino;
-       l_uint          st_mode;
-       l_uint          st_nlink;
-       l_ulong         st_uid;
-       l_ulong         st_gid;
-       l_ushort        st_rdev;
-       u_char          __pad3[10];
-       l_longlong      st_size;
-       l_ulong         st_blksize;
-       l_ulong         st_blocks;
-       l_ulong         __pad4;
-       struct l_timespec       st_atimespec;
-       struct l_timespec       st_mtimespec;
-       struct l_timespec       st_ctimespec;
-       l_ulonglong     st_ino;
-};
-
-struct l_statfs64 {
-        l_int           f_type;
-        l_int           f_bsize;
-        uint64_t        f_blocks;
-        uint64_t        f_bfree;
-        uint64_t        f_bavail;
-        uint64_t        f_files;
-        uint64_t        f_ffree;
-        l_fsid_t        f_fsid;
-        l_int           f_namelen;
-        l_int           f_spare[6];
-};
-
-struct l_new_utsname {
-       char    sysname[LINUX_MAX_UTSNAME];
-       char    nodename[LINUX_MAX_UTSNAME];
-       char    release[LINUX_MAX_UTSNAME];
-       char    version[LINUX_MAX_UTSNAME];
-       char    machine[LINUX_MAX_UTSNAME];
-       char    domainname[LINUX_MAX_UTSNAME];
-};
-
-/*
- * Signalling
- */
-#define        LINUX_SIGHUP            1
-#define        LINUX_SIGINT            2
-#define        LINUX_SIGQUIT           3
-#define        LINUX_SIGILL            4
-#define        LINUX_SIGTRAP           5
-#define        LINUX_SIGABRT           6
-#define        LINUX_SIGIOT            LINUX_SIGABRT
-#define        LINUX_SIGBUS            7
-#define        LINUX_SIGFPE            8
-#define        LINUX_SIGKILL           9
-#define        LINUX_SIGUSR1           10
-#define        LINUX_SIGSEGV           11
-#define        LINUX_SIGUSR2           12
-#define        LINUX_SIGPIPE           13
-#define        LINUX_SIGALRM           14
-#define        LINUX_SIGTERM           15
-#define        LINUX_SIGSTKFLT         16
-#define        LINUX_SIGCHLD           17
-#define        LINUX_SIGCONT           18
-#define        LINUX_SIGSTOP           19
-#define        LINUX_SIGTSTP           20
-#define        LINUX_SIGTTIN           21
-#define        LINUX_SIGTTOU           22
-#define        LINUX_SIGURG            23
-#define        LINUX_SIGXCPU           24
-#define        LINUX_SIGXFSZ           25
-#define        LINUX_SIGVTALRM         26
-#define        LINUX_SIGPROF           27
-#define        LINUX_SIGWINCH          28
-#define        LINUX_SIGIO             29
-#define        LINUX_SIGPOLL           LINUX_SIGIO
-#define        LINUX_SIGPWR            30
-#define        LINUX_SIGSYS            31
-
-#define        LINUX_SIGTBLSZ          31
-#define        LINUX_NSIG_WORDS        2
-#define        LINUX_NBPW              32
-#define        LINUX_NSIG              (LINUX_NBPW * LINUX_NSIG_WORDS)
-
-/* sigaction flags */
-#define        LINUX_SA_NOCLDSTOP      0x00000001
-#define        LINUX_SA_NOCLDWAIT      0x00000002
-#define        LINUX_SA_SIGINFO        0x00000004
-#define        LINUX_SA_RESTORER       0x04000000
-#define        LINUX_SA_ONSTACK        0x08000000
-#define        LINUX_SA_RESTART        0x10000000
-#define        LINUX_SA_INTERRUPT      0x20000000
-#define        LINUX_SA_NOMASK         0x40000000
-#define        LINUX_SA_ONESHOT        0x80000000
-
-/* sigprocmask actions */
-#define        LINUX_SIG_BLOCK         0
-#define        LINUX_SIG_UNBLOCK       1
-#define        LINUX_SIG_SETMASK       2
-
-/* sigset_t macros */
-#define        LINUX_SIGEMPTYSET(set)          (set).__bits[0] = (set).__bits[1] = 0
-#define        LINUX_SIGISMEMBER(set, sig)     SIGISMEMBER(set, sig)
-#define        LINUX_SIGADDSET(set, sig)       SIGADDSET(set, sig)
-
-/* sigaltstack */
-#define LINUX_MINSIGSTKSZ      2048
-#define LINUX_SS_ONSTACK       1
-#define LINUX_SS_DISABLE       2
-
-int linux_to_bsd_sigaltstack(int lsa);
-int bsd_to_linux_sigaltstack(int bsa);
-
-typedef void   (*l_handler_t)(l_int);
-typedef l_ulong        l_osigset_t;
-
-typedef struct {
-       l_uint  __bits[LINUX_NSIG_WORDS];
-} l_sigset_t;
-
-typedef struct {
-       l_handler_t     lsa_handler;
-       l_osigset_t     lsa_mask;
-       l_ulong         lsa_flags;
-       void    (*lsa_restorer)(void);
-} l_osigaction_t;
-
-typedef struct {
-       l_handler_t     lsa_handler;
-       l_ulong         lsa_flags;
-       void    (*lsa_restorer)(void);
-       l_sigset_t      lsa_mask;
-} l_sigaction_t;
-
-typedef struct {
-       void            *ss_sp;
-       l_int           ss_flags;
-       l_size_t        ss_size;
-} l_stack_t;
-
-/* The Linux sigcontext, pretty much a standard 386 trapframe. */
-struct l_sigcontext {
-       l_int           sc_gs;
-       l_int           sc_fs;
-       l_int           sc_es;
-       l_int           sc_ds;
-       l_int           sc_edi;
-       l_int           sc_esi;
-       l_int           sc_ebp;
-       l_int           sc_esp;
-       l_int           sc_ebx;
-       l_int           sc_edx;
-       l_int           sc_ecx;
-       l_int           sc_eax;
-       l_int           sc_trapno;
-       l_int           sc_err;
-       l_int           sc_eip;
-       l_int           sc_cs;
-       l_int           sc_eflags;
-       l_int           sc_esp_at_signal;
-       l_int           sc_ss;
-       l_int           sc_387;
-       l_int           sc_mask;
-       l_int           sc_cr2;
-};
-
-struct l_ucontext {
-       l_ulong         uc_flags;
-       void            *uc_link;
-       l_stack_t       uc_stack;
-       struct l_sigcontext     uc_mcontext;
-        l_sigset_t     uc_sigmask;
-};
-
-#define LINUX_SI_MAX_SIZE     128
-#define LINUX_SI_PAD_SIZE     ((LINUX_SI_MAX_SIZE/sizeof(l_int)) - 3)
-
-typedef struct l_siginfo {
-       l_int           lsi_signo;
-       l_int           lsi_errno;
-       l_int           lsi_code;
-       union {
-               l_int   _pad[LINUX_SI_PAD_SIZE];
-
-               struct {
-                       l_pid_t         _pid;
-                       l_uid16_t       _uid;
-               } _kill;
-
-               struct {
-                       l_uint          _timer1;
-                       l_uint          _timer2;
-               } _timer;
-
-               struct {
-                       l_pid_t         _pid;           /* sender's pid */
-                       l_uid16_t       _uid;           /* sender's uid */
-                       union sigval _sigval;
-               } _rt;
-
-               struct {
-                       l_pid_t         _pid;           /* which child */
-                       l_uid16_t       _uid;           /* sender's uid */
-                       l_int           _status;        /* exit code */
-                       l_clock_t       _utime;
-                       l_clock_t       _stime;
-               } _sigchld;
-
-               struct {
-                       void            *_addr; /* faulting insn/memory ref. */
-               } _sigfault;
-
-               struct {
-                       l_int           _band;  /* POLL_IN,POLL_OUT,POLL_MSG */
-                       l_int           _fd;
-               } _sigpoll;
-       } _sifields;
-} l_siginfo_t;
-
-#define lsi_pid          _sifields._kill._pid
-#define lsi_uid          _sifields._kill._uid
-#define lsi_status       _sifields._sigchld._status
-#define lsi_utime        _sifields._sigchld._utime
-#define lsi_stime        _sifields._sigchld._stime
-#define lsi_value        _sifields._rt._sigval
-#define lsi_int          _sifields._rt._sigval.sival_int
-#define lsi_ptr          _sifields._rt._sigval.sival_ptr
-#define lsi_addr         _sifields._sigfault._addr
-#define lsi_band         _sifields._sigpoll._band
-#define lsi_fd           _sifields._sigpoll._fd
-
-struct l_fpreg {
-       u_int16_t significand[4];
-       u_int16_t exponent;
-};
-
-struct l_fpxreg {
-       u_int16_t significand[4];
-       u_int16_t exponent;
-       u_int16_t padding[3];
-};
-
-struct l_xmmreg {
-       u_int32_t element[4];
-};
-
-struct l_fpstate {
-       /* Regular FPU environment */
-       u_int32_t               cw;
-       u_int32_t               sw;
-       u_int32_t               tag;
-       u_int32_t               ipoff;
-       u_int32_t               cssel;
-       u_int32_t               dataoff;
-       u_int32_t               datasel;
-       struct l_fpreg          _st[8];
-       u_int16_t               status;
-       u_int16_t               magic;  /* 0xffff = regular FPU data */
-
-       /* FXSR FPU environment */
-       u_int32_t               _fxsr_env[6]; /* env is ignored */
-       u_int32_t               mxcsr;
-       u_int32_t               reserved;
-       struct l_fpxreg         _fxsr_st[8];  /* reg data is ignored */
-       struct l_xmmreg         _xmm[8];
-       u_int32_t               padding[56];
-};
-
-/*
- * We make the stack look like Linux expects it when calling a signal
- * handler, but use the BSD way of calling the handler and sigreturn().
- * This means that we need to pass the pointer to the handler too.
- * It is appended to the frame to not interfere with the rest of it.
- */
-struct l_sigframe {
-       l_int                   sf_sig;
-       struct l_sigcontext     sf_sc;
-       struct l_fpstate        sf_fpstate;
-       l_uint                  sf_extramask[LINUX_NSIG_WORDS-1];
-       l_handler_t             sf_handler;
-};
-
-struct l_rt_sigframe {
-       l_int                   sf_sig;
-       l_siginfo_t             *sf_siginfo;
-       struct l_ucontext       *sf_ucontext;
-       l_siginfo_t             sf_si;
-       struct l_ucontext       sf_sc;
-       l_handler_t             sf_handler;
-};
-
-extern int bsd_to_linux_signal[];
-extern int linux_to_bsd_signal[];
-extern struct sysentvec linux_sysvec;
-extern struct sysentvec elf_linux_sysvec;
-
-/*
- * Pluggable ioctl handlers
- */
-
-extern struct ioctl_map linux_ioctl_map;
-
-/*
- * open/fcntl flags
- */
-#define        LINUX_O_RDONLY          00
-#define        LINUX_O_WRONLY          01
-#define        LINUX_O_RDWR            02
-#define        LINUX_O_CREAT           0100
-#define        LINUX_O_EXCL            0200
-#define        LINUX_O_NOCTTY          0400
-#define        LINUX_O_TRUNC           01000
-#define        LINUX_O_APPEND          02000
-#define        LINUX_O_NONBLOCK        04000
-#define        LINUX_O_NDELAY          LINUX_O_NONBLOCK
-#define        LINUX_O_SYNC            010000
-#define        LINUX_FASYNC            020000
-#define        LINUX_O_DIRECTORY       00200000
-
-#define        LINUX_F_DUPFD           0
-#define        LINUX_F_GETFD           1
-#define        LINUX_F_SETFD           2
-#define        LINUX_F_GETFL           3
-#define        LINUX_F_SETFL           4
-#define        LINUX_F_GETLK           5
-#define        LINUX_F_SETLK           6
-#define        LINUX_F_SETLKW          7
-#define        LINUX_F_SETOWN          8
-#define        LINUX_F_GETOWN          9
-
-#define        LINUX_F_GETLK64         12
-#define        LINUX_F_SETLK64         13
-#define        LINUX_F_SETLKW64        14
-
-#define        LINUX_F_RDLCK           0
-#define        LINUX_F_WRLCK           1
-#define        LINUX_F_UNLCK           2
-
-/*
- * mount flags
- */
-#define LINUX_MS_RDONLY         0x0001
-#define LINUX_MS_NOSUID         0x0002
-#define LINUX_MS_NODEV          0x0004
-#define LINUX_MS_NOEXEC         0x0008
-#define LINUX_MS_REMOUNT        0x0020
-        
-/*
- * SystemV IPC defines
- */
-#define        LINUX_SEMOP             1
-#define        LINUX_SEMGET            2
-#define        LINUX_SEMCTL            3
-#define        LINUX_MSGSND            11
-#define        LINUX_MSGRCV            12
-#define        LINUX_MSGGET            13
-#define        LINUX_MSGCTL            14
-#define        LINUX_SHMAT             21
-#define        LINUX_SHMDT             22
-#define        LINUX_SHMGET            23
-#define        LINUX_SHMCTL            24
-
-#define        LINUX_IPC_RMID          0
-#define        LINUX_IPC_SET           1
-#define        LINUX_IPC_STAT          2
-#define        LINUX_IPC_INFO          3
-
-#define        LINUX_SHM_LOCK          11
-#define        LINUX_SHM_UNLOCK        12
-#define        LINUX_SHM_STAT          13
-#define        LINUX_SHM_INFO          14
-
-#define        LINUX_SHM_RDONLY        0x1000
-#define        LINUX_SHM_RND           0x2000
-#define        LINUX_SHM_REMAP         0x4000
-
-/* semctl commands */
-#define        LINUX_GETPID            11
-#define        LINUX_GETVAL            12
-#define        LINUX_GETALL            13
-#define        LINUX_GETNCNT           14
-#define        LINUX_GETZCNT           15
-#define        LINUX_SETVAL            16
-#define        LINUX_SETALL            17
-#define        LINUX_SEM_STAT          18
-#define        LINUX_SEM_INFO          19
-
-union l_semun {
-       l_int           val;
-       struct l_semid_ds       *buf;
-       l_ushort        *array;
-       struct l_seminfo        *__buf;
-       void            *__pad;
-};
-
-/*
- * Socket defines
- */
-#define        LINUX_SOCKET            1
-#define        LINUX_BIND              2
-#define        LINUX_CONNECT           3
-#define        LINUX_LISTEN            4
-#define        LINUX_ACCEPT            5
-#define        LINUX_GETSOCKNAME       6
-#define        LINUX_GETPEERNAME       7
-#define        LINUX_SOCKETPAIR        8
-#define        LINUX_SEND              9
-#define        LINUX_RECV              10
-#define        LINUX_SENDTO            11
-#define        LINUX_RECVFROM          12
-#define        LINUX_SHUTDOWN          13
-#define        LINUX_SETSOCKOPT        14
-#define        LINUX_GETSOCKOPT        15
-#define        LINUX_SENDMSG           16
-#define        LINUX_RECVMSG           17
-
-#define        LINUX_AF_UNSPEC         0
-#define        LINUX_AF_UNIX           1
-#define        LINUX_AF_INET           2
-#define        LINUX_AF_AX25           3
-#define        LINUX_AF_IPX            4
-#define        LINUX_AF_APPLETALK      5
-
-#define        LINUX_SOL_SOCKET        1
-#define        LINUX_SOL_IP            0
-#define        LINUX_SOL_IPX           256
-#define        LINUX_SOL_AX25          257
-#define        LINUX_SOL_TCP           6
-#define        LINUX_SOL_UDP           17
-
-#define        LINUX_SO_DEBUG          1
-#define        LINUX_SO_REUSEADDR      2
-#define        LINUX_SO_TYPE           3
-#define        LINUX_SO_ERROR          4
-#define        LINUX_SO_DONTROUTE      5
-#define        LINUX_SO_BROADCAST      6
-#define        LINUX_SO_SNDBUF         7
-#define        LINUX_SO_RCVBUF         8
-#define        LINUX_SO_KEEPALIVE      9
-#define        LINUX_SO_OOBINLINE      10
-#define        LINUX_SO_NO_CHECK       11
-#define        LINUX_SO_PRIORITY       12
-#define        LINUX_SO_LINGER         13
-#define        LINUX_SO_PEERCRED       17
-#define        LINUX_SO_RCVLOWAT       18
-#define        LINUX_SO_SNDLOWAT       19
-#define        LINUX_SO_RCVTIMEO       20
-#define        LINUX_SO_SNDTIMEO       21
-#define        LINUX_SO_TIMESTAMP      29
-#define        LINUX_SO_ACCEPTCONN     30
-
-#define        LINUX_IP_TOS            1
-#define        LINUX_IP_TTL            2
-#define        LINUX_IP_HDRINCL        3
-#define        LINUX_IP_OPTIONS        4
-
-#define        LINUX_IP_MULTICAST_IF           32
-#define        LINUX_IP_MULTICAST_TTL          33
-#define        LINUX_IP_MULTICAST_LOOP         34
-#define        LINUX_IP_ADD_MEMBERSHIP         35
-#define        LINUX_IP_DROP_MEMBERSHIP        36
-
-struct l_sockaddr {
-       l_ushort        sa_family;
-       char            sa_data[14];
-};
-
-struct l_ifmap {
-       l_ulong         mem_start;
-       l_ulong         mem_end;
-       l_ushort        base_addr;
-       u_char          irq;
-       u_char          dma;
-       u_char          port;
-};
-
-#define        LINUX_IFHWADDRLEN       6
-#define        LINUX_IFNAMSIZ          16
-
-struct l_ifreq {
-       union {
-               char    ifrn_name[LINUX_IFNAMSIZ];
-       } ifr_ifrn;
-
-       union {
-               struct l_sockaddr       ifru_addr;
-               struct l_sockaddr       ifru_dstaddr;
-               struct l_sockaddr       ifru_broadaddr;
-               struct l_sockaddr       ifru_netmask;
-               struct l_sockaddr       ifru_hwaddr;
-               l_short         ifru_flags[1];
-               l_int           ifru_metric;
-               l_int           ifru_ivalue;
-               l_int           ifru_mtu;
-               struct l_ifmap  ifru_map;
-               char            ifru_slave[LINUX_IFNAMSIZ];
-               l_caddr_t       ifru_data;
-       } ifr_ifru;
-};
-
-#define        ifr_name        ifr_ifrn.ifrn_name      /* interface name */
-#define        ifr_hwaddr      ifr_ifru.ifru_hwaddr    /* MAC address */
-#define        ifr_ifindex     ifr_ifru.ifru_ivalue    /* Interface index */
-#define        ifr_ifmetric    ifr_ifru.ifru_metric    /* Interface index */
-
-/*
- * poll()
- */
-#define        LINUX_POLLIN            0x0001
-#define        LINUX_POLLPRI           0x0002
-#define        LINUX_POLLOUT           0x0004
-#define        LINUX_POLLERR           0x0008
-#define        LINUX_POLLHUP           0x0010
-#define        LINUX_POLLNVAL          0x0020
-#define        LINUX_POLLRDNORM        0x0040
-#define        LINUX_POLLRDBAND        0x0080
-#define        LINUX_POLLWRNORM        0x0100
-#define        LINUX_POLLWRBAND        0x0200
-#define        LINUX_POLLMSG           0x0400
-
-struct l_pollfd {
-       l_int           fd;
-       l_short         events;
-       l_short         revents;
-};
-
-struct l_user_desc {
-       l_uint          entry_number;
-       l_uint          base_addr;
-       l_uint          limit;
-       l_uint          seg_32bit:1;
-       l_uint          contents:2;
-       l_uint          read_exec_only:1;
-       l_uint          limit_in_pages:1;
-       l_uint          seg_not_present:1;
-       l_uint          useable:1;
-};
-
-struct l_desc_struct {
-       unsigned long   a, b;
-};
-
-
-#define        LINUX_LOWERWORD 0x0000ffff
-
-/*
- * Macros which does the same thing as those in Linux include/asm-um/ldt-i386.h.
- * These convert Linux user space descriptor to machine one.
- */
-#define        LINUX_LDT_entry_a(info)                                 \
-       ((((info)->base_addr & LINUX_LOWERWORD) << 16) |        \
-       ((info)->limit & LINUX_LOWERWORD))
-
-#define        LINUX_ENTRY_B_READ_EXEC_ONLY    9
-#define        LINUX_ENTRY_B_CONTENTS          10
-#define        LINUX_ENTRY_B_SEG_NOT_PRESENT   15
-#define        LINUX_ENTRY_B_BASE_ADDR         16
-#define        LINUX_ENTRY_B_USEABLE           20
-#define        LINUX_ENTRY_B_SEG32BIT          22
-#define        LINUX_ENTRY_B_LIMIT             23
-
-#define        LINUX_LDT_entry_b(info)                                                 \
-       (((info)->base_addr & 0xff000000) |                                     \
-       ((info)->limit & 0xf0000) |                                             \
-       ((info)->contents << LINUX_ENTRY_B_CONTENTS) |                          \
-       (((info)->seg_not_present == 0) << LINUX_ENTRY_B_SEG_NOT_PRESENT) |     \
-       (((info)->base_addr & 0x00ff0000) >> LINUX_ENTRY_B_BASE_ADDR) |         \
-       (((info)->read_exec_only == 0) << LINUX_ENTRY_B_READ_EXEC_ONLY) |       \
-       ((info)->seg_32bit << LINUX_ENTRY_B_SEG32BIT) |                         \
-       ((info)->useable << LINUX_ENTRY_B_USEABLE) |                            \
-       ((info)->limit_in_pages << LINUX_ENTRY_B_LIMIT) | 0x7000)
-
-#define        LINUX_LDT_empty(info)           \
-       ((info)->base_addr == 0 &&      \
-       (info)->limit == 0 &&           \
-       (info)->contents == 0 &&        \
-       (info)->seg_not_present == 1 && \
-       (info)->read_exec_only == 1 &&  \
-       (info)->seg_32bit == 0 &&       \
-       (info)->limit_in_pages == 0 &&  \
-       (info)->useable == 0)
-
-/*
- * Macros for converting segments.
- * They do the same as those in arch/i386/kernel/process.c in Linux.
- */
-#define        LINUX_GET_BASE(desc)                            \
-       ((((desc)->a >> 16) & LINUX_LOWERWORD) |        \
-       (((desc)->b << 16) & 0x00ff0000) |              \
-       ((desc)->b & 0xff000000))
-
-#define        LINUX_GET_LIMIT(desc)                   \
-       (((desc)->a & LINUX_LOWERWORD) |        \
-       ((desc)->b & 0xf0000))
-
-#define        LINUX_GET_32BIT(desc)           \
-       (((desc)->b >> LINUX_ENTRY_B_SEG32BIT) & 1)
-#define        LINUX_GET_CONTENTS(desc)        \
-       (((desc)->b >> LINUX_ENTRY_B_CONTENTS) & 3)
-#define        LINUX_GET_WRITABLE(desc)        \
-       (((desc)->b >> LINUX_ENTRY_B_READ_EXEC_ONLY) & 1)
-#define        LINUX_GET_LIMIT_PAGES(desc)     \
-       (((desc)->b >> LINUX_ENTRY_B_LIMIT) & 1)
-#define        LINUX_GET_PRESENT(desc)         \
-       (((desc)->b >> LINUX_ENTRY_B_SEG_NOT_PRESENT) & 1)
-#define        LINUX_GET_USEABLE(desc)         \
-       (((desc)->b >> LINUX_ENTRY_B_USEABLE) & 1)
-
-#define        LINUX_CLOCK_REALTIME            0
-#define        LINUX_CLOCK_MONOTONIC           1
-#define        LINUX_CLOCK_PROCESS_CPUTIME_ID  2
-#define        LINUX_CLOCK_THREAD_CPUTIME_ID   3
-#define        LINUX_CLOCK_REALTIME_HR         4
-#define        LINUX_CLOCK_MONOTONIC_HR        5
-
-#define        LINUX_CLONE_VM                  0x00000100
-#define        LINUX_CLONE_FS                  0x00000200
-#define        LINUX_CLONE_FILES               0x00000400
-#define        LINUX_CLONE_SIGHAND             0x00000800
-#define        LINUX_CLONE_PID                 0x00001000      /* No longer exist in Linux */
-#define        LINUX_CLONE_VFORK               0x00004000
-#define        LINUX_CLONE_PARENT              0x00008000
-#define        LINUX_CLONE_THREAD              0x00010000
-#define        LINUX_CLONE_SETTLS              0x00080000
-#define        LINUX_CLONE_PARENT_SETTID       0x00100000
-#define        LINUX_CLONE_CHILD_CLEARTID      0x00200000
-#define        LINUX_CLONE_CHILD_SETTID        0x01000000
-
-#define        LINUX_THREADING_FLAGS                                   \
-       (LINUX_CLONE_VM | LINUX_CLONE_FS | LINUX_CLONE_FILES |  \
-       LINUX_CLONE_SIGHAND | LINUX_CLONE_THREAD)
-
-#define        LINUX_AT_FDCWD                  -100
-#define        LINUX_AT_SYMLINK_NOFOLLOW       0x100
-#define        LINUX_AT_REMOVEDIR              0x200
-
-#define LINUX_MREMAP_MAYMOVE    1
-#define LINUX_MREMAP_FIXED      2
-
-#define LINUX_UTIME_NOW (-1)
-#define LINUX_UTIME_OMIT (-2)
-#endif /* !_EMULATION_LINUX_ARCH_LINUX_H_ */
diff --git a/sys/emulation/linux/i386/linux_dummy.c b/sys/emulation/linux/i386/linux_dummy.c
deleted file mode 100644 (file)
index d559338..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*-
- * Copyright (c) 1994-1995 Søren Schmidt
- * 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 
- *    in this position and unchanged.
- * 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.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission
- *
- * 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.
- *
- * $FreeBSD: src/sys/i386/linux/linux_dummy.c,v 1.21.2.7 2003/01/02 20:41:33 kan Exp $
- * $DragonFly: src/sys/emulation/linux/i386/linux_dummy.c,v 1.7 2006/06/05 07:26:10 dillon Exp $
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/proc.h>
-
-#include "linux.h"
-#include "linux_proto.h"
-#include "../linux_util.h"
-
-DUMMY(stat);
-DUMMY(mount);
-DUMMY(stime);
-DUMMY(fstat);
-DUMMY(olduname);
-DUMMY(syslog);
-DUMMY(uname);
-DUMMY(vhangup);
-DUMMY(vm86old);
-DUMMY(swapoff);
-DUMMY(adjtimex);
-DUMMY(create_module);
-DUMMY(init_module);
-DUMMY(delete_module);
-DUMMY(get_kernel_syms);
-DUMMY(quotactl);
-DUMMY(bdflush);
-DUMMY(sysfs);
-DUMMY(vm86);
-DUMMY(query_module);
-DUMMY(nfsservctl);
-DUMMY(prctl);
-DUMMY(rt_sigpending);
-DUMMY(rt_sigtimedwait);
-DUMMY(rt_sigqueueinfo);
-DUMMY(capget);
-DUMMY(capset);
-DUMMY(sendfile);
-DUMMY(setfsuid);
-DUMMY(setfsgid);
-DUMMY(pivot_root);
-DUMMY(mincore);
-DUMMY(fadvise64);
-DUMMY(statfs64);
-DUMMY(fstatfs64);
-DUMMY(fadvise64_64);
-DUMMY(mbind);
-DUMMY(get_mempolicy);
-DUMMY(set_mempolicy);
-DUMMY(kexec_load);
-DUMMY(waitid);
-DUMMY(add_key);
-DUMMY(request_key);
-DUMMY(keyctl);
-DUMMY(ioprio_set);
-DUMMY(ioprio_get);
-DUMMY(inotify_init);
-DUMMY(inotify_add_watch);
-DUMMY(inotify_rm_watch);
-DUMMY(migrate_pages);
-DUMMY(pselect6);
-DUMMY(ppoll);
-DUMMY(unshare);
-DUMMY(splice);
-DUMMY(sync_file_range);
-DUMMY(tee);
-DUMMY(vmsplice);
-DUMMY(move_pages);
-DUMMY(epoll_pwait);
-DUMMY(signalfd);
-DUMMY(timerfd);
-DUMMY(eventfd);
-
-#define DUMMY_XATTR(s)                                         \
-int                                                            \
-sys_linux_ ## s ## xattr( struct linux_ ## s ## xattr_args *arg)       \
-{                                                              \
-       return (ENOATTR);                                       \
-}
-
-DUMMY_XATTR(set);
-DUMMY_XATTR(lset);
-DUMMY_XATTR(fset);
-DUMMY_XATTR(get);
-DUMMY_XATTR(lget);
-DUMMY_XATTR(fget);
-DUMMY_XATTR(list);
-DUMMY_XATTR(llist);
-DUMMY_XATTR(flist);
-DUMMY_XATTR(remove);
-DUMMY_XATTR(lremove);
-DUMMY_XATTR(fremove);
diff --git a/sys/emulation/linux/i386/linux_genassym.c b/sys/emulation/linux/i386/linux_genassym.c
deleted file mode 100644 (file)
index 9a85b1f..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/* $FreeBSD: src/sys/i386/linux/linux_genassym.c,v 1.13.2.3 2001/11/05 19:08:23 marcel Exp $ */
-/* $DragonFly: src/sys/emulation/linux/i386/linux_genassym.c,v 1.3 2003/08/07 21:17:18 dillon Exp $ */
-
-#include <sys/param.h>
-#include <sys/assym.h>
-
-#include "linux.h"
-
-ASSYM(LINUX_SIGF_HANDLER, offsetof(struct l_sigframe, sf_handler));
-ASSYM(LINUX_SIGF_SC, offsetof(struct l_sigframe, sf_sc));
-ASSYM(LINUX_SC_GS, offsetof(struct l_sigcontext, sc_gs));
-ASSYM(LINUX_SC_EFLAGS, offsetof(struct l_sigcontext, sc_eflags));
-ASSYM(LINUX_RT_SIGF_HANDLER, offsetof(struct l_rt_sigframe, sf_handler));
-ASSYM(LINUX_RT_SIGF_UC, offsetof(struct l_rt_sigframe, sf_sc));
-ASSYM(LINUX_RT_SIGF_SC, offsetof(struct l_ucontext, uc_mcontext));
diff --git a/sys/emulation/linux/i386/linux_locore.s b/sys/emulation/linux/i386/linux_locore.s
deleted file mode 100644 (file)
index 1f20d9c..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/* $FreeBSD: src/sys/i386/linux/linux_locore.s,v 1.5.2.3 2001/11/05 19:08:23 marcel Exp $ */
-/* $DragonFly: src/sys/emulation/linux/i386/linux_locore.s,v 1.4 2007/04/13 12:12:27 corecode Exp $ */
-
-#include "linux_assym.h"                       /* system definitions */
-#include <machine/asmacros.h>                  /* miscellaneous asm macros */
-#include "linux_syscall.h"                     /* system call numbers */
-
-NON_GPROF_ENTRY(linux_sigcode)
-       call    *LINUX_SIGF_HANDLER(%esp)
-       leal    LINUX_SIGF_SC(%esp),%ebx        /* linux scp */
-       mov     LINUX_SC_GS(%ebx),%gs
-       movl    %esp, %ebx                      /* pass sigframe */
-       push    %eax                            /* fake ret addr */
-       movl    $LINUX_SYS_linux_sigreturn,%eax /* linux_sigreturn() */
-       int     $0x80                           /* enter kernel with args */
-0:     jmp     0b
-       ALIGN_TEXT
-/* XXXXX */
-linux_rt_sigcode:
-       call    *LINUX_RT_SIGF_HANDLER(%esp)
-       leal    LINUX_RT_SIGF_UC(%esp),%ebx     /* linux ucp */
-       leal    LINUX_RT_SIGF_SC(%ebx),%ecx     /* linux sigcontext */
-       mov     LINUX_SC_GS(%ecx),%gs
-       push    %eax                            /* fake ret addr */
-       movl    $LINUX_SYS_linux_rt_sigreturn,%eax   /* linux_rt_sigreturn() */
-       int     $0x80                           /* enter kernel with args */
-0:     jmp     0b
-       ALIGN_TEXT
-/* XXXXX */
-linux_esigcode:
-
-       .data
-       .globl  linux_szsigcode, linux_sznonrtsigcode
-linux_szsigcode:
-       .long   linux_esigcode-linux_sigcode
-linux_sznonrtsigcode:
-       .long   linux_rt_sigcode-linux_sigcode
diff --git a/sys/emulation/linux/i386/linux_machdep.c b/sys/emulation/linux/i386/linux_machdep.c
deleted file mode 100644 (file)
index 8df21ac..0000000
+++ /dev/null
@@ -1,1294 +0,0 @@
-/*-
- * Copyright (c) 2000 Marcel Moolenaar
- * 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 
- *    in this position and unchanged.
- * 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.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * 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.
- *
- * $FreeBSD: src/sys/i386/linux/linux_machdep.c,v 1.6.2.4 2001/11/05 19:08:23 marcel Exp $
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/imgact.h>
-#include <sys/kern_syscall.h>
-#include <sys/lock.h>
-#include <sys/mman.h>
-#include <sys/nlookup.h>
-#include <sys/proc.h>
-#include <sys/priv.h>
-#include <sys/resource.h>
-#include <sys/resourcevar.h>
-#include <sys/ptrace.h>
-#include <sys/sysproto.h>
-#include <sys/thread2.h>
-#include <sys/unistd.h>
-#include <sys/wait.h>
-
-#include <machine/frame.h>
-#include <machine/psl.h>
-#include <machine/segments.h>
-#include <machine/sysarch.h>
-
-#include <vm/vm.h>
-#include <vm/pmap.h>
-#include <vm/vm_map.h>
-
-#include <sys/mplock2.h>
-
-#include "linux.h"
-#include "linux_proto.h"
-#include "../linux_ipc.h"
-#include "../linux_signal.h"
-#include "../linux_util.h"
-#include "../linux_emuldata.h"
-
-struct l_descriptor {
-       l_uint          entry_number;
-       l_ulong         base_addr;
-       l_uint          limit;
-       l_uint          seg_32bit:1;
-       l_uint          contents:2;
-       l_uint          read_exec_only:1;
-       l_uint          limit_in_pages:1;
-       l_uint          seg_not_present:1;
-       l_uint          useable:1;
-};
-
-struct l_old_select_argv {
-       l_int           nfds;
-       l_fd_set        *readfds;
-       l_fd_set        *writefds;
-       l_fd_set        *exceptfds;
-       struct l_timeval        *timeout;
-};
-
-int
-linux_to_bsd_sigaltstack(int lsa)
-{
-       int bsa = 0;
-
-       if (lsa & LINUX_SS_DISABLE)
-               bsa |= SS_DISABLE;
-       if (lsa & LINUX_SS_ONSTACK)
-               bsa |= SS_ONSTACK;
-       return (bsa);
-}
-
-int
-bsd_to_linux_sigaltstack(int bsa)
-{
-       int lsa = 0;
-
-       if (bsa & SS_DISABLE)
-               lsa |= LINUX_SS_DISABLE;
-       if (bsa & SS_ONSTACK)
-               lsa |= LINUX_SS_ONSTACK;
-       return (lsa);
-}
-
-/*
- * MPALMOSTSAFE
- */
-int
-sys_linux_execve(struct linux_execve_args *args)
-{
-       struct nlookupdata nd;
-       struct image_args exec_args;
-       char *path;
-       int error;
-
-       error = linux_copyin_path(args->path, &path, LINUX_PATH_EXISTS);
-       if (error)
-               return (error);
-#ifdef DEBUG
-       if (ldebug(execve))
-               kprintf(ARGS(execve, "%s"), path);
-#endif
-       get_mplock();
-       error = nlookup_init(&nd, path, UIO_SYSSPACE, NLC_FOLLOW);
-       bzero(&exec_args, sizeof(exec_args));
-       if (error == 0) {
-               error = exec_copyin_args(&exec_args, path, PATH_SYSSPACE,
-                                       args->argp, args->envp);
-       }
-       if (error == 0)
-               error = kern_execve(&nd, &exec_args);
-       nlookup_done(&nd);
-
-       /*
-        * The syscall result is returned in registers to the new program.
-        * Linux will register %edx as an atexit function and we must be
-        * sure to set it to 0.  XXX
-        */
-       if (error == 0) {
-               args->sysmsg_result64 = 0;
-               if (curproc->p_sysent == &elf_linux_sysvec)
-                       error = emuldata_init(curproc, NULL, 0);
-       }
-
-       exec_free_args(&exec_args);
-       linux_free_path(&path);
-
-       if (error < 0) {
-               /* We hit a lethal error condition.  Let's die now. */
-               exit1(W_EXITCODE(0, SIGABRT));
-               /* NOTREACHED */
-       }
-       rel_mplock();
-
-       return(error);
-}
-
-struct l_ipc_kludge {
-       struct l_msgbuf *msgp;
-       l_long msgtyp;
-};
-
-/*
- * MPALMOSTSAFE
- */
-int
-sys_linux_ipc(struct linux_ipc_args *args)
-{
-       int error = 0;
-
-       get_mplock();
-
-       switch (args->what & 0xFFFF) {
-       case LINUX_SEMOP: {
-               struct linux_semop_args a;
-
-               a.semid = args->arg1;
-               a.tsops = args->ptr;
-               a.nsops = args->arg2;
-               a.sysmsg_lresult = 0;
-               error = linux_semop(&a);
-               args->sysmsg_lresult = a.sysmsg_lresult;
-               break;
-       }
-       case LINUX_SEMGET: {
-               struct linux_semget_args a;
-
-               a.key = args->arg1;
-               a.nsems = args->arg2;
-               a.semflg = args->arg3;
-               a.sysmsg_lresult = 0;
-               error = linux_semget(&a);
-               args->sysmsg_lresult = a.sysmsg_lresult;
-               break;
-       }
-       case LINUX_SEMCTL: {
-               struct linux_semctl_args a;
-               int error;
-
-               a.semid = args->arg1;
-               a.semnum = args->arg2;
-               a.cmd = args->arg3;
-               a.sysmsg_lresult = 0;
-               error = copyin((caddr_t)args->ptr, &a.arg, sizeof(a.arg));
-               if (error)
-                       break;
-               error = linux_semctl(&a);
-               args->sysmsg_lresult = a.sysmsg_lresult;
-               break;
-       }
-       case LINUX_MSGSND: {
-               struct linux_msgsnd_args a;
-
-               a.msqid = args->arg1;
-               a.msgp = args->ptr;
-               a.msgsz = args->arg2;
-               a.msgflg = args->arg3;
-               a.sysmsg_lresult = 0;
-               error = linux_msgsnd(&a);
-               args->sysmsg_lresult = a.sysmsg_lresult;
-               break;
-       }
-       case LINUX_MSGRCV: {
-               struct linux_msgrcv_args a;
-
-               a.msqid = args->arg1;
-               a.msgsz = args->arg2;
-               if (a.msgsz < 0) {
-                       error = EINVAL;
-                       break;
-               }
-               a.msgflg = args->arg3;
-               a.sysmsg_lresult = 0;
-               if ((args->what >> 16) == 0) {
-                       struct l_ipc_kludge tmp;
-                       int error;
-
-                       if (args->ptr == NULL) {
-                               error = EINVAL;
-                               break;
-                       }
-                       error = copyin((caddr_t)args->ptr, &tmp, sizeof(tmp));
-                       if (error)
-                               break;
-                       a.msgp = tmp.msgp;
-                       a.msgtyp = tmp.msgtyp;
-               } else {
-                       a.msgp = args->ptr;
-                       a.msgtyp = args->arg5;
-               }
-               error = linux_msgrcv(&a);
-               args->sysmsg_lresult = a.sysmsg_lresult;
-               break;
-       }
-       case LINUX_MSGGET: {
-               struct linux_msgget_args a;
-
-               a.key = args->arg1;
-               a.msgflg = args->arg2;
-               a.sysmsg_lresult = 0;
-               error = linux_msgget(&a);
-               args->sysmsg_lresult = a.sysmsg_lresult;
-               break;
-       }
-       case LINUX_MSGCTL: {
-               struct linux_msgctl_args a;
-
-               a.msqid = args->arg1;
-               a.cmd = args->arg2;
-               a.buf = args->ptr;
-               a.sysmsg_lresult = 0;
-               error = linux_msgctl(&a);
-               args->sysmsg_lresult = a.sysmsg_lresult;
-               break;
-       }
-       case LINUX_SHMAT: {
-               struct linux_shmat_args a;
-
-               a.shmid = args->arg1;
-               a.shmaddr = args->ptr;
-               a.shmflg = args->arg2;
-               a.raddr = (l_ulong *)args->arg3;
-               a.sysmsg_lresult = 0;
-               error = linux_shmat(&a);
-               args->sysmsg_lresult = a.sysmsg_lresult;
-               break;
-       }
-       case LINUX_SHMDT: {
-               struct linux_shmdt_args a;
-
-               a.shmaddr = args->ptr;
-               a.sysmsg_lresult = 0;
-               error = linux_shmdt(&a);
-               args->sysmsg_lresult = a.sysmsg_lresult;
-               break;
-       }
-       case LINUX_SHMGET: {
-               struct linux_shmget_args a;
-
-               a.key = args->arg1;
-               a.size = args->arg2;
-               a.shmflg = args->arg3;
-               a.sysmsg_lresult = 0;
-               error = linux_shmget(&a);
-               args->sysmsg_lresult = a.sysmsg_lresult;
-               break;
-       }
-       case LINUX_SHMCTL: {
-               struct linux_shmctl_args a;
-
-               a.shmid = args->arg1;
-               a.cmd = args->arg2;
-               a.buf = args->ptr;
-               a.sysmsg_lresult = 0;
-               error = linux_shmctl(&a);
-               args->sysmsg_lresult = a.sysmsg_lresult;
-               break;
-       }
-       default:
-               error = EINVAL;
-               break;
-       }
-       rel_mplock();
-       return(error);
-}
-
-/*
- * MPSAFE
- */
-int
-sys_linux_old_select(struct linux_old_select_args *args)
-{
-       struct l_old_select_argv linux_args;
-       struct linux_select_args newsel;
-       int error;
-
-#ifdef DEBUG
-       if (ldebug(old_select))
-               kprintf(ARGS(old_select, "%p"), args->ptr);
-#endif
-
-       error = copyin((caddr_t)args->ptr, &linux_args, sizeof(linux_args));
-       if (error)
-               return (error);
-
-       newsel.sysmsg_iresult = 0;
-       newsel.nfds = linux_args.nfds;
-       newsel.readfds = linux_args.readfds;
-       newsel.writefds = linux_args.writefds;
-       newsel.exceptfds = linux_args.exceptfds;
-       newsel.timeout = linux_args.timeout;
-       error = sys_linux_select(&newsel);
-       args->sysmsg_iresult = newsel.sysmsg_iresult;
-       return(error);
-}
-
-/*
- * MPSAFE
- */
-int
-sys_linux_fork(struct linux_fork_args *args)
-{
-       struct lwp *lp = curthread->td_lwp;
-       struct proc *p2;
-       int error;
-
-       get_mplock();
-       error = fork1(lp, RFFDG | RFPROC | RFPGLOCK, &p2);
-       if (error == 0) {
-               emuldata_init(curproc, p2, 0);
-
-               start_forked_proc(lp, p2);
-               args->sysmsg_fds[0] = p2->p_pid;
-               args->sysmsg_fds[1] = 0;
-       }
-       rel_mplock();
-
-       /* Are we the child? */
-       if (args->sysmsg_iresult == 1)
-               args->sysmsg_iresult = 0;
-
-       return (error);
-}
-
-/*
- * MPALMOSTSAFE
- */
-int
-sys_linux_exit_group(struct linux_exit_group_args *args)
-{
-       struct linux_emuldata *em, *e;
-       struct proc *p;
-       int rval;
-
-       rval = args->rval;
-       EMUL_LOCK();
-
-       em = emuldata_get(curproc);
-
-       if (em->s->refs == 1) {
-               EMUL_UNLOCK();
-               exit1(W_EXITCODE(rval, 0));
-               /* NOTREACHED */
-               return (0);
-       }
-       KKASSERT(em->proc == curproc);
-       em->flags |= EMUL_DIDKILL;
-       em->s->flags |= LINUX_LES_INEXITGROUP;
-       em->s->xstat = W_EXITCODE(rval, 0);
-
-       LIST_REMOVE(em, threads);
-       LIST_INSERT_HEAD(&em->s->threads, em, threads);
-
-       while ((e = LIST_NEXT(em, threads)) != NULL) {
-               LIST_REMOVE(em, threads);
-               LIST_INSERT_AFTER(e, em, threads);
-               if ((e->flags & EMUL_DIDKILL) == 0) {
-                       e->flags |= EMUL_DIDKILL;
-                       p = e->proc;
-                       PHOLD(p);
-                       ksignal(p, SIGKILL);
-                       PRELE(p);
-               }
-       }
-
-       EMUL_UNLOCK();
-       exit1(W_EXITCODE(rval, 0));
-       /* NOTREACHED */
-
-       return (0);
-}
-
-/*
- * MPSAFE
- */
-int
-sys_linux_vfork(struct linux_vfork_args *args)
-{
-       struct lwp *lp = curthread->td_lwp;
-       struct proc *p2;
-       int error;
-
-       get_mplock();
-       error = fork1(lp, RFFDG | RFPROC | RFPPWAIT | RFMEM | RFPGLOCK, &p2);
-       if (error == 0) {
-               emuldata_init(curproc, p2, 0);
-
-               start_forked_proc(lp, p2);
-               args->sysmsg_fds[0] = p2->p_pid;
-               args->sysmsg_fds[1] = 0;
-       }
-       rel_mplock();
-
-       if (args->sysmsg_iresult == 1)
-               args->sysmsg_iresult = 0;
-
-       return (error);
-}
-
-/*
- * MPALMOSTSAFE
- */
-int
-sys_linux_clone(struct linux_clone_args *args)
-{
-       struct segment_descriptor *desc;
-       struct l_user_desc info;
-       int idx;
-       int a[2];
-
-       struct lwp *lp = curthread->td_lwp;
-       int error, ff = RFPROC;
-       struct proc *p2 = NULL;
-       int exit_signal;
-
-       exit_signal = args->flags & 0x000000ff;
-       if (exit_signal >= LINUX_NSIG)
-               return (EINVAL);
-       if (exit_signal <= LINUX_SIGTBLSZ)
-               exit_signal = linux_to_bsd_signal[_SIG_IDX(exit_signal)];
-
-       if (args->flags & LINUX_CLONE_VM)
-               ff |= RFMEM;
-       if (args->flags & LINUX_CLONE_SIGHAND)
-               ff |= RFSIGSHARE;
-       if (!(args->flags & (LINUX_CLONE_FILES | LINUX_CLONE_FS)))
-               ff |= RFFDG;
-       if ((args->flags & 0xffffff00) == LINUX_THREADING_FLAGS)
-               ff |= RFTHREAD;
-       if (args->flags & LINUX_CLONE_VFORK)
-               ff |= RFPPWAIT;
-       if (args->flags & LINUX_CLONE_PARENT_SETTID) {
-               if (args->parent_tidptr == NULL)
-                       return (EINVAL);
-       }
-
-       error = 0;
-
-       get_mplock();
-       error = fork1(lp, ff | RFPGLOCK, &p2);
-       if (error) {
-               rel_mplock();
-               return error;
-       }
-
-       args->sysmsg_fds[0] = p2 ? p2->p_pid : 0;
-       args->sysmsg_fds[1] = 0;
-       
-       if (args->flags & (LINUX_CLONE_PARENT | LINUX_CLONE_THREAD)) {
-               lwkt_gettoken(&curproc->p_token);
-               while (p2->p_pptr != curproc->p_pptr)
-                       proc_reparent(p2, curproc->p_pptr);
-               lwkt_reltoken(&curproc->p_token);
-       }
-
-       emuldata_init(curproc, p2, args->flags);
-       linux_proc_fork(p2, curproc, args->child_tidptr);
-       /*
-        * XXX: this can't happen, p2 is never NULL, or else we'd have
-        *      other problems, too (see p2->p_sigparent == ...,
-        *      linux_proc_fork and emuldata_init.
-        */
-       if (p2 == NULL) {
-               error = ESRCH;
-       } else {
-               if (args->flags & LINUX_CLONE_PARENT_SETTID) {
-                       error = copyout(&p2->p_pid, args->parent_tidptr, sizeof(p2->p_pid));
-               }
-       }
-
-       p2->p_sigparent = exit_signal;
-       if (args->stack) {
-               ONLY_LWP_IN_PROC(p2)->lwp_md.md_regs->tf_esp =
-                                       (unsigned long)args->stack;
-       }
-
-       if (args->flags & LINUX_CLONE_SETTLS) {
-               error = copyin((void *)curthread->td_lwp->lwp_md.md_regs->tf_esi, &info, sizeof(struct l_user_desc));
-               if (error) {
-                       kprintf("copyin of tf_esi to info failed\n");
-               } else {
-                       idx = info.entry_number;
-                       /*
-                        * We understand both our own entries such as the ones
-                        * we provide on linux_set_thread_area, as well as the
-                        * linux-type entries 6-8.
-                        */
-                       if ((idx < 6 || idx > 8) && (idx < GTLS_START)) {
-                               kprintf("LINUX_CLONE_SETTLS, invalid idx requested: %d\n", idx);
-                               goto out;
-                       }
-                       if (idx < GTLS_START) {
-                               idx -= 6;
-                       } else {
-#if 0 /* was SMP */
-                               idx -= (GTLS_START + mycpu->gd_cpuid * NGDT);
-#endif
-                               idx -= GTLS_START;
-                       }
-                       KKASSERT(idx >= 0);
-
-                       a[0] = LINUX_LDT_entry_a(&info);
-                       a[1] = LINUX_LDT_entry_b(&info);
-                       if (p2) {
-                               desc = &FIRST_LWP_IN_PROC(p2)->lwp_thread->td_tls.tls[idx];
-                               memcpy(desc, &a, sizeof(a));
-                       } else {
-                               kprintf("linux_clone... we don't have a p2\n");
-                       }
-               }
-       }
-out:
-       if (p2)
-               start_forked_proc(lp, p2);
-
-       rel_mplock();
-#ifdef DEBUG
-       if (ldebug(clone))
-               kprintf(LMSG("clone: successful rfork to %ld"),
-                   (long)p2->p_pid);
-#endif
-
-       return (error);
-}
-
-/* XXX move */
-struct l_mmap_argv {
-       l_caddr_t       addr;
-       l_int           len;
-       l_int           prot;
-       l_int           flags;
-       l_int           fd;
-       l_int           pos;
-};
-
-#define STACK_SIZE  (2 * 1024 * 1024)
-#define GUARD_SIZE  (4 * PAGE_SIZE)
-
-/*
- * MPALMOSTSAFE
- */
-static int
-linux_mmap_common(caddr_t linux_addr, size_t linux_len, int linux_prot,
-                 int linux_flags, int linux_fd, off_t pos, void **res)
-{
-       struct thread *td = curthread;
-       struct proc *p = td->td_proc;
-       caddr_t addr;
-       void *new;
-       int error, flags, len, prot, fd;
-
-       flags = 0;
-       if (linux_flags & LINUX_MAP_SHARED)
-               flags |= MAP_SHARED;
-       if (linux_flags & LINUX_MAP_PRIVATE)
-               flags |= MAP_PRIVATE;
-       if (linux_flags & LINUX_MAP_FIXED)
-               flags |= MAP_FIXED;
-       if (linux_flags & LINUX_MAP_ANON) {
-               flags |= MAP_ANON;
-       } else {
-               flags |= MAP_NOSYNC;
-       }
-
-       lwkt_gettoken(&curproc->p_vmspace->vm_map.token);
-
-       if (linux_flags & LINUX_MAP_GROWSDOWN) {
-               flags |= MAP_STACK;
-               /* The linux MAP_GROWSDOWN option does not limit auto
-                * growth of the region.  Linux mmap with this option
-                * takes as addr the inital BOS, and as len, the initial
-                * region size.  It can then grow down from addr without
-                * limit.  However, linux threads has an implicit internal
-                * limit to stack size of STACK_SIZE.  Its just not
-                * enforced explicitly in linux.  But, here we impose
-                * a limit of (STACK_SIZE - GUARD_SIZE) on the stack
-                * region, since we can do this with our mmap.
-                *
-                * Our mmap with MAP_STACK takes addr as the maximum
-                * downsize limit on BOS, and as len the max size of
-                * the region.  It them maps the top SGROWSIZ bytes,
-                * and autgrows the region down, up to the limit
-                * in addr.
-                *
-                * If we don't use the MAP_STACK option, the effect
-                * of this code is to allocate a stack region of a
-                * fixed size of (STACK_SIZE - GUARD_SIZE).
-                */
-
-               /* This gives us TOS */
-               addr = linux_addr + linux_len;
-
-               if (addr > p->p_vmspace->vm_maxsaddr) {
-                       /* Some linux apps will attempt to mmap
-                        * thread stacks near the top of their
-                        * address space.  If their TOS is greater
-                        * than vm_maxsaddr, vm_map_growstack()
-                        * will confuse the thread stack with the
-                        * process stack and deliver a SEGV if they
-                        * attempt to grow the thread stack past their
-                        * current stacksize rlimit.  To avoid this,
-                        * adjust vm_maxsaddr upwards to reflect
-                        * the current stacksize rlimit rather
-                        * than the maximum possible stacksize.
-                        * It would be better to adjust the
-                        * mmap'ed region, but some apps do not check
-                        * mmap's return value.
-                        */
-                       p->p_vmspace->vm_maxsaddr = (char *)USRSTACK -
-                           p->p_rlimit[RLIMIT_STACK].rlim_cur;
-               }
-
-               /* This gives us our maximum stack size */
-               if (linux_len > STACK_SIZE - GUARD_SIZE) {
-                       len = linux_len;
-               } else {
-                       len = STACK_SIZE - GUARD_SIZE;
-               }
-               /* This gives us a new BOS.  If we're using VM_STACK, then
-                * mmap will just map the top SGROWSIZ bytes, and let
-                * the stack grow down to the limit at BOS.  If we're
-                * not using VM_STACK we map the full stack, since we
-                * don't have a way to autogrow it.
-                */
-               addr -= len;
-       } else {
-               addr = linux_addr;
-               len = linux_len;
-       }
-
-       prot = linux_prot;
-
-       if (prot & (PROT_READ | PROT_WRITE | PROT_EXEC))
-               prot |= PROT_READ | PROT_EXEC;
-
-       if (linux_flags & LINUX_MAP_ANON) {
-               fd = -1;
-       } else {
-               fd = linux_fd;
-       }
-       
-#ifdef DEBUG
-       if (ldebug(mmap) || ldebug(mmap2))
-               kprintf("-> (%p, %d, %d, 0x%08x, %d, %lld)\n",
-                   addr, len, prot, flags, fd, pos);
-#endif
-       error = kern_mmap(curproc->p_vmspace, addr, len,
-                         prot, flags, fd, pos, &new);
-
-       lwkt_reltoken(&curproc->p_vmspace->vm_map.token);
-
-       if (error == 0)
-               *res = new;
-       return (error);
-}
-
-/*
- * MPSAFE
- */
-int
-sys_linux_mmap(struct linux_mmap_args *args)
-{
-       struct l_mmap_argv linux_args;
-       int error;
-
-       error = copyin((caddr_t)args->ptr, &linux_args, sizeof(linux_args));
-       if (error)
-               return (error);
-
-#ifdef DEBUG
-       if (ldebug(mmap))
-               kprintf(ARGS(mmap, "%p, %d, %d, 0x%08x, %d, %d"),
-                   (void *)linux_args.addr, linux_args.len, linux_args.prot,
-                   linux_args.flags, linux_args.fd, linux_args.pos);
-#endif
-       error = linux_mmap_common(linux_args.addr, linux_args.len,
-           linux_args.prot, linux_args.flags, linux_args.fd,
-           linux_args.pos, &args->sysmsg_resultp);
-#ifdef DEBUG
-       if (ldebug(mmap))
-               kprintf("-> %p\n", args->sysmsg_resultp);
-#endif
-       return(error);
-}
-
-/*
- * MPSAFE
- */
-int
-sys_linux_mmap2(struct linux_mmap2_args *args)
-{
-       int error;
-
-#ifdef DEBUG
-       if (ldebug(mmap2))
-               kprintf(ARGS(mmap2, "%p, %d, %d, 0x%08x, %d, %d"),
-                   (void *)args->addr, args->len, args->prot, args->flags,
-                   args->fd, args->pgoff);
-#endif
-       error = linux_mmap_common((void *)args->addr, args->len, args->prot,
-           args->flags, args->fd, args->pgoff * PAGE_SIZE,
-           &args->sysmsg_resultp);
-#ifdef DEBUG
-       if (ldebug(mmap2))
-               kprintf("-> %p\n", args->sysmsg_resultp);
-#endif
-       return (error);
-}
-
-/*
- * MPSAFE
- */
-int
-sys_linux_pipe(struct linux_pipe_args *args)
-{
-       int error;
-       int reg_edx;
-       struct pipe_args bsd_args;
-
-#ifdef DEBUG
-       if (ldebug(pipe))
-               kprintf(ARGS(pipe, "*"));
-#endif
-
-       reg_edx = args->sysmsg_fds[1];
-       error = sys_pipe(&bsd_args);
-       if (error) {
-               args->sysmsg_fds[1] = reg_edx;
-               return (error);
-       }
-
-       error = copyout(bsd_args.sysmsg_fds, args->pipefds, 2*sizeof(int));
-       if (error) {
-               args->sysmsg_fds[1] = reg_edx;
-               return (error);
-       }
-
-       args->sysmsg_fds[1] = reg_edx;
-       args->sysmsg_fds[0] = 0;
-       return (0);
-}
-
-/*
- * XXX: Preliminary
- */
-int
-sys_linux_pipe2(struct linux_pipe2_args *args)
-{
-       struct thread *td = curthread;
-       int error;
-       int reg_edx;
-       struct pipe_args bsd_args;
-       union fcntl_dat dat;
-
-       reg_edx = args->sysmsg_fds[1];
-       error = sys_pipe(&bsd_args);
-       if (error) {
-               args->sysmsg_fds[1] = reg_edx;
-               return (error);
-       }
-
-//     if (args->flags & LINUX_O_CLOEXEC) {
-//     }
-
-       if (args->flags & LINUX_O_NONBLOCK) {
-               dat.fc_flags = O_NONBLOCK;
-               kern_fcntl(bsd_args.sysmsg_fds[0], F_SETFL, &dat, td->td_ucred);
-               kern_fcntl(bsd_args.sysmsg_fds[1], F_SETFL, &dat, td->td_ucred);
-       }
-
-       error = copyout(bsd_args.sysmsg_fds, args->pipefds, 2*sizeof(int));
-       if (error) {
-               args->sysmsg_fds[1] = reg_edx;
-               return (error);
-       }
-
-       args->sysmsg_fds[1] = reg_edx;
-       args->sysmsg_fds[0] = 0;
-       return (0);
-}
-
-/*
- * MPSAFE
- */
-int
-sys_linux_ioperm(struct linux_ioperm_args *args)
-{
-       struct sysarch_args sa;
-       struct i386_ioperm_args *iia;
-       caddr_t sg;
-       int error;
-
-       sg = stackgap_init();
-       iia = stackgap_alloc(&sg, sizeof(struct i386_ioperm_args));
-       iia->start = args->start;
-       iia->length = args->length;
-       iia->enable = args->enable;
-       sa.sysmsg_resultp = NULL;
-       sa.op = I386_SET_IOPERM;
-       sa.parms = (char *)iia;
-       error = sys_sysarch(&sa);
-       args->sysmsg_resultp = sa.sysmsg_resultp;
-       return(error);
-}
-
-/*
- * MPSAFE
- */
-int
-sys_linux_iopl(struct linux_iopl_args *args)
-{
-       struct thread *td = curthread;
-       struct lwp *lp = td->td_lwp;
-       int error;
-
-       if (args->level < 0 || args->level > 3)
-               return (EINVAL);
-       if ((error = priv_check(td, PRIV_ROOT)) != 0)
-               return (error);
-       if (securelevel > 0)
-               return (EPERM);
-       lp->lwp_md.md_regs->tf_eflags =
-           (lp->lwp_md.md_regs->tf_eflags & ~PSL_IOPL) |
-           (args->level * (PSL_IOPL / 3));
-       return (0);
-}
-
-/*
- * MPSAFE
- */
-int
-sys_linux_modify_ldt(struct linux_modify_ldt_args *uap)
-{
-       int error;
-       caddr_t sg;
-       struct sysarch_args args;
-       struct i386_ldt_args *ldt;
-       struct l_descriptor ld;
-       union descriptor *desc;
-       int size, written;
-
-       sg = stackgap_init();
-
-       if (uap->ptr == NULL)
-               return (EINVAL);
-
-       switch (uap->func) {
-       case 0x00: /* read_ldt */
-               ldt = stackgap_alloc(&sg, sizeof(*ldt));
-               ldt->start = 0;
-               ldt->descs = uap->ptr;
-               ldt->num = uap->bytecount / sizeof(union descriptor);
-               args.op = I386_GET_LDT;
-               args.parms = (char*)ldt;
-               args.sysmsg_iresult = 0;
-               error = sys_sysarch(&args);
-               uap->sysmsg_iresult = args.sysmsg_iresult *
-                                     sizeof(union descriptor);
-               break;
-       case 0x02: /* read_default_ldt = 0 */
-               size = 5*sizeof(struct l_desc_struct);
-               if (size > uap->bytecount)
-                       size = uap->bytecount;
-               for (written = error = 0; written < size && error == 0; written++)
-                       error = subyte((char *)uap->ptr + written, 0);
-               uap->sysmsg_iresult = written;
-               break;
-       case 0x01: /* write_ldt */
-       case 0x11: /* write_ldt */
-               if (uap->bytecount != sizeof(ld))
-                       return (EINVAL);
-
-               error = copyin(uap->ptr, &ld, sizeof(ld));
-               if (error)
-                       return (error);
-
-               ldt = stackgap_alloc(&sg, sizeof(*ldt));
-               desc = stackgap_alloc(&sg, sizeof(*desc));
-               ldt->start = ld.entry_number;
-               ldt->descs = desc;
-               ldt->num = 1;
-               desc->sd.sd_lolimit = (ld.limit & 0x0000ffff);
-               desc->sd.sd_hilimit = (ld.limit & 0x000f0000) >> 16;
-               desc->sd.sd_lobase = (ld.base_addr & 0x00ffffff);
-               desc->sd.sd_hibase = (ld.base_addr & 0xff000000) >> 24;
-               desc->sd.sd_type = SDT_MEMRO | ((ld.read_exec_only ^ 1) << 1) |
-                       (ld.contents << 2);
-               desc->sd.sd_dpl = 3;
-               desc->sd.sd_p = (ld.seg_not_present ^ 1);
-               desc->sd.sd_xx = 0;
-               desc->sd.sd_def32 = ld.seg_32bit;
-               desc->sd.sd_gran = ld.limit_in_pages;
-               args.op = I386_SET_LDT;
-               args.parms = (char*)ldt;
-               args.sysmsg_iresult = 0;
-               error = sys_sysarch(&args);
-               uap->sysmsg_iresult = args.sysmsg_iresult;
-               break;
-       default:
-               error = EINVAL;
-               break;
-       }
-
-       return (error);
-}
-
-/*
- * MPALMOSTSAFE
- */
-int
-sys_linux_sigaction(struct linux_sigaction_args *args)
-{
-       l_osigaction_t osa;
-       l_sigaction_t linux_act, linux_oact;
-       struct sigaction act, oact;
-       int error, sig;
-
-#ifdef DEBUG
-       if (ldebug(sigaction))
-               kprintf(ARGS(sigaction, "%d, %p, %p"),
-                   args->sig, (void *)args->nsa, (void *)args->osa);
-#endif
-
-       if (args->nsa) {
-               error = copyin(args->nsa, &osa, sizeof(l_osigaction_t));
-               if (error)
-                       return (error);
-               linux_act.lsa_handler = osa.lsa_handler;
-               linux_act.lsa_flags = osa.lsa_flags;
-               linux_act.lsa_restorer = osa.lsa_restorer;
-               LINUX_SIGEMPTYSET(linux_act.lsa_mask);
-               linux_act.lsa_mask.__bits[0] = osa.lsa_mask;
-               linux_to_bsd_sigaction(&linux_act, &act);
-       }
-
-       if (args->sig <= LINUX_SIGTBLSZ)
-               sig = linux_to_bsd_signal[_SIG_IDX(args->sig)];
-       else
-               sig = args->sig;
-
-       get_mplock();
-       error = kern_sigaction(sig, args->nsa ? &act : NULL,
-                              args->osa ? &oact : NULL);
-       rel_mplock();
-
-       if (args->osa != NULL && !error) {
-               bsd_to_linux_sigaction(&oact, &linux_oact);
-               osa.lsa_handler = linux_oact.lsa_handler;
-               osa.lsa_flags = linux_oact.lsa_flags;
-               osa.lsa_restorer = linux_oact.lsa_restorer;
-               osa.lsa_mask = linux_oact.lsa_mask.__bits[0];
-               error = copyout(&osa, args->osa, sizeof(l_osigaction_t));
-       }
-       return (error);
-}
-
-/*
- * Linux has two extra args, restart and oldmask.  We dont use these,
- * but it seems that "restart" is actually a context pointer that
- * enables the signal to happen with a different register set.
- *
- * MPALMOSTSAFE
- */
-int
-sys_linux_sigsuspend(struct linux_sigsuspend_args *args)
-{
-       l_sigset_t linux_mask;
-       sigset_t mask;
-       int error;
-
-#ifdef DEBUG
-       if (ldebug(sigsuspend))
-               kprintf(ARGS(sigsuspend, "%08lx"), (unsigned long)args->mask);
-#endif
-
-       LINUX_SIGEMPTYSET(mask);
-       mask.__bits[0] = args->mask;
-       linux_to_bsd_sigset(&linux_mask, &mask);
-
-       get_mplock();
-       error = kern_sigsuspend(&mask);
-       rel_mplock();
-
-       return(error);
-}
-
-/*
- * MPALMOSTSAFE
- */
-int
-sys_linux_rt_sigsuspend(struct linux_rt_sigsuspend_args *uap)
-{
-       l_sigset_t linux_mask;
-       sigset_t mask;
-       int error;
-
-#ifdef DEBUG
-       if (ldebug(rt_sigsuspend))
-               kprintf(ARGS(rt_sigsuspend, "%p, %d"),
-                   (void *)uap->newset, uap->sigsetsize);
-#endif
-
-       if (uap->sigsetsize != sizeof(l_sigset_t))
-               return (EINVAL);
-
-       error = copyin(uap->newset, &linux_mask, sizeof(l_sigset_t));
-       if (error)
-               return (error);
-
-       linux_to_bsd_sigset(&linux_mask, &mask);
-
-       get_mplock();
-       error = kern_sigsuspend(&mask);
-       rel_mplock();
-
-       return(error);
-}
-
-/*
- * MPALMOSTSAFE
- */
-int
-sys_linux_pause(struct linux_pause_args *args)
-{
-       struct thread *td = curthread;
-       struct lwp *lp = td->td_lwp;
-       sigset_t mask;
-       int error;
-
-#ifdef DEBUG
-       if (ldebug(pause))
-               kprintf(ARGS(pause, ""));
-#endif
-
-       mask = lp->lwp_sigmask;
-
-       get_mplock();
-       error = kern_sigsuspend(&mask);
-       rel_mplock();
-
-       return(error);
-}
-
-/*
- * MPALMOSTSAFE
- */
-int
-sys_linux_sigaltstack(struct linux_sigaltstack_args *uap)
-{
-       stack_t ss, oss;
-       l_stack_t linux_ss;
-       int error;
-
-#ifdef DEBUG
-       if (ldebug(sigaltstack))
-               kprintf(ARGS(sigaltstack, "%p, %p"), uap->uss, uap->uoss);
-#endif
-
-       if (uap->uss) {
-               error = copyin(uap->uss, &linux_ss, sizeof(l_stack_t));
-               if (error)
-                       return (error);
-
-               ss.ss_sp = linux_ss.ss_sp;
-               ss.ss_size = linux_ss.ss_size;
-               ss.ss_flags = linux_to_bsd_sigaltstack(linux_ss.ss_flags);
-       }
-
-       get_mplock();
-       error = kern_sigaltstack(uap->uss ? &ss : NULL,
-                                uap->uoss ? &oss : NULL);
-       rel_mplock();
-
-       if (error == 0 && uap->uoss) {
-               linux_ss.ss_sp = oss.ss_sp;
-               linux_ss.ss_size = oss.ss_size;
-               linux_ss.ss_flags = bsd_to_linux_sigaltstack(oss.ss_flags);
-               error = copyout(&linux_ss, uap->uoss, sizeof(l_stack_t));
-       }
-
-       return (error);
-}
-
-int
-sys_linux_set_thread_area(struct linux_set_thread_area_args *args)
-{
-       struct segment_descriptor *desc;
-       struct l_user_desc info;
-       int error;
-       int idx;
-       int a[2];
-       int i;
-
-       error = copyin(args->desc, &info, sizeof(struct l_user_desc));
-       if (error)
-               return (EFAULT);
-
-#ifdef DEBUG
-       if (ldebug(set_thread_area))
-               kprintf(ARGS(set_thread_area, "%i, %x, %x, %i, %i, %i, %i, %i, %i\n"),
-                     info.entry_number,
-                     info.base_addr,
-                     info.limit,
-                     info.seg_32bit,
-                     info.contents,
-                     info.read_exec_only,
-                     info.limit_in_pages,
-                     info.seg_not_present,
-                     info.useable);
-#endif
-
-       idx = info.entry_number;
-       if (idx != -1 && (idx < 6 || idx > 8))
-               return (EINVAL);
-
-       if (idx == -1) {
-               /* -1 means finding the first free TLS entry */
-               for (i = 0; i < NGTLS; i++) {
-                       /*
-                        * try to determine if the TLS entry is empty by looking
-                        * at the lolimit entry.
-                        */
-                       if (curthread->td_tls.tls[idx].sd_lolimit == 0) {
-                               idx = i;
-                               break;
-                       }
-               }
-
-               if (idx == -1) {
-                       /*
-                        * By now we should have an index. If not, it means
-                        * that no entry is free, so return ESRCH.
-                        */
-                       return (ESRCH);
-               }
-       } else {
-               /* translate the index from Linux to ours */
-               idx -= 6;
-               KKASSERT(idx >= 0);
-       }
-
-       /* Tell the caller about the allocated entry number */
-#if 0 /* was SMP */
-       info.entry_number = GTLS_START + mycpu->gd_cpuid * NGDT + idx;
-#endif
-       info.entry_number = GTLS_START + idx;
-
-
-       error = copyout(&info, args->desc, sizeof(struct l_user_desc));
-       if (error)
-               return (error);
-
-       if (LINUX_LDT_empty(&info)) {
-               a[0] = 0;
-               a[1] = 0;
-       } else {
-               a[0] = LINUX_LDT_entry_a(&info);
-               a[1] = LINUX_LDT_entry_b(&info);
-       }
-
-       /*
-        * Update the TLS and the TLS entries in the GDT, but hold a critical
-        * section as required by set_user_TLS().
-        */
-       crit_enter();
-       desc = &curthread->td_tls.tls[idx];
-       memcpy(desc, &a, sizeof(a));
-       set_user_TLS();
-       crit_exit();
-
-       return (0);
-}
-
-int
-sys_linux_get_thread_area(struct linux_get_thread_area_args *args)
-{
-       struct segment_descriptor *sd;
-       struct l_desc_struct desc;
-       struct l_user_desc info;
-       int error;
-       int idx;
-
-#ifdef DEBUG
-       if (ldebug(get_thread_area))
-               kprintf(ARGS(get_thread_area, "%p"), args->desc);
-#endif
-
-       error = copyin(args->desc, &info, sizeof(struct l_user_desc));
-       if (error)
-               return (EFAULT);
-               
-       idx = info.entry_number;
-       if ((idx < 6 || idx > 8) && (idx < GTLS_START)) {
-               kprintf("sys_linux_get_thread_area, invalid idx requested: %d\n", idx);
-               return (EINVAL);
-       }
-
-       memset(&info, 0, sizeof(info));
-
-       /* translate the index from Linux to ours */
-       info.entry_number = idx;
-       if (idx < GTLS_START) {
-               idx -= 6;
-       } else {
-#if 0 /* was SMP */
-               idx -= (GTLS_START + mycpu->gd_cpuid * NGDT);
-#endif
-               idx -= GTLS_START;
-
-       }
-       KKASSERT(idx >= 0);
-
-       sd = &curthread->td_tls.tls[idx];
-       memcpy(&desc, sd, sizeof(desc));
-       info.base_addr = LINUX_GET_BASE(&desc);
-       info.limit = LINUX_GET_LIMIT(&desc);
-       info.seg_32bit = LINUX_GET_32BIT(&desc);
-       info.contents = LINUX_GET_CONTENTS(&desc);
-       info.read_exec_only = !LINUX_GET_WRITABLE(&desc);
-       info.limit_in_pages = LINUX_GET_LIMIT_PAGES(&desc);
-       info.seg_not_present = !LINUX_GET_PRESENT(&desc);
-       info.useable = LINUX_GET_USEABLE(&desc);
-
-       error = copyout(&info, args->desc, sizeof(struct l_user_desc));
-       if (error)
-               return (EFAULT);
-
-       return (0);
-}
diff --git a/sys/emulation/linux/i386/linux_proto.h b/sys/emulation/linux/i386/linux_proto.h
deleted file mode 100644 (file)
index 382db81..0000000
+++ /dev/null
@@ -1,1951 +0,0 @@
-/*
- * System call prototypes.
- *
- * DO NOT EDIT-- To regenerate this file, edit syscalls.master followed
- *               by running make sysent in the same directory.
- */
-
-#ifndef _LINUX_SYSPROTO_H_
-#define        _LINUX_SYSPROTO_H_
-
-#include <sys/select.h>
-
-#include <sys/signal.h>
-
-#include <sys/acl.h>
-
-#include <sys/msgport.h>
-
-#include <sys/sysmsg.h>
-
-#include <sys/syslink.h>
-
-#define        PAD_(t) (sizeof(register_t) <= sizeof(t) ? \
-               0 : sizeof(register_t) - sizeof(t))
-
-#define        nosys   linux_nosys
-struct linux_fork_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_open_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       l_int   flags;  char flags_[PAD_(l_int)];
-       l_int   mode;   char mode_[PAD_(l_int)];
-};
-struct linux_waitpid_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_pid_t pid;    char pid_[PAD_(l_pid_t)];
-       l_int * status; char status_[PAD_(l_int *)];
-       l_int   options;        char options_[PAD_(l_int)];
-};
-struct linux_creat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       l_int   mode;   char mode_[PAD_(l_int)];
-};
-struct linux_link_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       char *  to;     char to_[PAD_(char *)];
-};
-struct linux_unlink_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-};
-struct linux_execve_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       char ** argp;   char argp_[PAD_(char **)];
-       char ** envp;   char envp_[PAD_(char **)];
-};
-struct linux_chdir_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-};
-struct linux_time_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_time_t *      tm;     char tm_[PAD_(l_time_t *)];
-};
-struct linux_mknod_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       l_int   mode;   char mode_[PAD_(l_int)];
-       l_dev_t dev;    char dev_[PAD_(l_dev_t)];
-};
-struct linux_chmod_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       l_mode_t        mode;   char mode_[PAD_(l_mode_t)];
-};
-struct linux_lchown16_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       l_uid16_t       uid;    char uid_[PAD_(l_uid16_t)];
-       l_gid16_t       gid;    char gid_[PAD_(l_gid16_t)];
-};
-struct linux_stat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       struct ostat *  statbuf;        char statbuf_[PAD_(struct ostat *)];
-};
-struct linux_lseek_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  fdes;   char fdes_[PAD_(l_uint)];
-       l_off_t off;    char off_[PAD_(l_off_t)];
-       l_int   whence; char whence_[PAD_(l_int)];
-};
-struct linux_getpid_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_mount_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  specialfile;    char specialfile_[PAD_(char *)];
-       char *  dir;    char dir_[PAD_(char *)];
-       char *  filesystemtype; char filesystemtype_[PAD_(char *)];
-       l_ulong rwflag; char rwflag_[PAD_(l_ulong)];
-       void *  data;   char data_[PAD_(void *)];
-};
-struct linux_oldumount_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-};
-struct linux_setuid16_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uid16_t       uid;    char uid_[PAD_(l_uid16_t)];
-};
-struct linux_getuid16_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_stime_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_ptrace_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_long  req;    char req_[PAD_(l_long)];
-       l_long  pid;    char pid_[PAD_(l_long)];
-       l_long  addr;   char addr_[PAD_(l_long)];
-       l_long  data;   char data_[PAD_(l_long)];
-};
-struct linux_alarm_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  secs;   char secs_[PAD_(l_uint)];
-};
-struct linux_fstat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  fd;     char fd_[PAD_(l_uint)];
-       struct ostat *  up;     char up_[PAD_(struct ostat *)];
-};
-struct linux_pause_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_utime_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  fname;  char fname_[PAD_(char *)];
-       struct l_utimbuf *      times;  char times_[PAD_(struct l_utimbuf *)];
-};
-struct linux_access_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       l_int   flags;  char flags_[PAD_(l_int)];
-};
-struct linux_nice_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   inc;    char inc_[PAD_(l_int)];
-};
-struct linux_kill_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   pid;    char pid_[PAD_(l_int)];
-       l_int   signum; char signum_[PAD_(l_int)];
-};
-struct linux_rename_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  from;   char from_[PAD_(char *)];
-       char *  to;     char to_[PAD_(char *)];
-};
-struct linux_mkdir_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       l_int   mode;   char mode_[PAD_(l_int)];
-};
-struct linux_rmdir_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-};
-struct linux_pipe_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_ulong *       pipefds;        char pipefds_[PAD_(l_ulong *)];
-};
-struct linux_times_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       struct l_times_argv *   buf;    char buf_[PAD_(struct l_times_argv *)];
-};
-struct linux_brk_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_ulong dsend;  char dsend_[PAD_(l_ulong)];
-};
-struct linux_setgid16_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_gid16_t       gid;    char gid_[PAD_(l_gid16_t)];
-};
-struct linux_getgid16_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_signal_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   sig;    char sig_[PAD_(l_int)];
-       l_handler_t     handler;        char handler_[PAD_(l_handler_t)];
-};
-struct linux_geteuid16_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_getegid16_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_umount_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       l_int   flags;  char flags_[PAD_(l_int)];
-};
-struct linux_ioctl_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  fd;     char fd_[PAD_(l_uint)];
-       l_uint  cmd;    char cmd_[PAD_(l_uint)];
-       l_ulong arg;    char arg_[PAD_(l_ulong)];
-};
-struct linux_fcntl_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  fd;     char fd_[PAD_(l_uint)];
-       l_uint  cmd;    char cmd_[PAD_(l_uint)];
-       l_ulong arg;    char arg_[PAD_(l_ulong)];
-};
-struct linux_olduname_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_ustat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_dev_t dev;    char dev_[PAD_(l_dev_t)];
-       struct l_ustat *        ubuf;   char ubuf_[PAD_(struct l_ustat *)];
-};
-struct linux_getppid_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_sigaction_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   sig;    char sig_[PAD_(l_int)];
-       l_osigaction_t *        nsa;    char nsa_[PAD_(l_osigaction_t *)];
-       l_osigaction_t *        osa;    char osa_[PAD_(l_osigaction_t *)];
-};
-struct linux_sgetmask_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_ssetmask_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_osigset_t     mask;   char mask_[PAD_(l_osigset_t)];
-};
-struct linux_setreuid16_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uid16_t       ruid;   char ruid_[PAD_(l_uid16_t)];
-       l_uid16_t       euid;   char euid_[PAD_(l_uid16_t)];
-};
-struct linux_setregid16_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_gid16_t       rgid;   char rgid_[PAD_(l_gid16_t)];
-       l_gid16_t       egid;   char egid_[PAD_(l_gid16_t)];
-};
-struct linux_sigsuspend_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   hist0;  char hist0_[PAD_(l_int)];
-       l_int   hist1;  char hist1_[PAD_(l_int)];
-       l_osigset_t     mask;   char mask_[PAD_(l_osigset_t)];
-};
-struct linux_sigpending_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_osigset_t *   mask;   char mask_[PAD_(l_osigset_t *)];
-};
-struct linux_sethostname_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  hostname;       char hostname_[PAD_(char *)];
-       u_int   len;    char len_[PAD_(u_int)];
-};
-struct linux_setrlimit_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  resource;       char resource_[PAD_(l_uint)];
-       struct l_rlimit *       rlim;   char rlim_[PAD_(struct l_rlimit *)];
-};
-struct linux_old_getrlimit_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  resource;       char resource_[PAD_(l_uint)];
-       struct l_rlimit *       rlim;   char rlim_[PAD_(struct l_rlimit *)];
-};
-struct linux_getgroups16_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  gidsetsize;     char gidsetsize_[PAD_(l_uint)];
-       l_gid16_t *     gidset; char gidset_[PAD_(l_gid16_t *)];
-};
-struct linux_setgroups16_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  gidsetsize;     char gidsetsize_[PAD_(l_uint)];
-       l_gid16_t *     gidset; char gidset_[PAD_(l_gid16_t *)];
-};
-struct linux_old_select_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       struct l_old_select_argv *      ptr;    char ptr_[PAD_(struct l_old_select_argv *)];
-};
-struct linux_symlink_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       char *  to;     char to_[PAD_(char *)];
-};
-struct linux_ostat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       struct ostat *  statbuf;        char statbuf_[PAD_(struct ostat *)];
-};
-struct linux_readlink_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  name;   char name_[PAD_(char *)];
-       char *  buf;    char buf_[PAD_(char *)];
-       l_int   count;  char count_[PAD_(l_int)];
-};
-struct linux_uselib_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  library;        char library_[PAD_(char *)];
-};
-struct linux_reboot_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   magic1; char magic1_[PAD_(l_int)];
-       l_int   magic2; char magic2_[PAD_(l_int)];
-       l_uint  cmd;    char cmd_[PAD_(l_uint)];
-       void *  arg;    char arg_[PAD_(void *)];
-};
-struct linux_readdir_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  fd;     char fd_[PAD_(l_uint)];
-       struct l_dirent *       dent;   char dent_[PAD_(struct l_dirent *)];
-       l_uint  count;  char count_[PAD_(l_uint)];
-};
-struct linux_mmap_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       struct l_mmap_argv *    ptr;    char ptr_[PAD_(struct l_mmap_argv *)];
-};
-struct linux_truncate_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       l_ulong length; char length_[PAD_(l_ulong)];
-};
-struct linux_ftruncate_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       int     fd;     char fd_[PAD_(int)];
-       long    length; char length_[PAD_(long)];
-};
-struct linux_statfs_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       struct l_statfs_buf *   buf;    char buf_[PAD_(struct l_statfs_buf *)];
-};
-struct linux_fstatfs_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  fd;     char fd_[PAD_(l_uint)];
-       struct l_statfs_buf *   buf;    char buf_[PAD_(struct l_statfs_buf *)];
-};
-struct linux_ioperm_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_ulong start;  char start_[PAD_(l_ulong)];
-       l_ulong length; char length_[PAD_(l_ulong)];
-       l_int   enable; char enable_[PAD_(l_int)];
-};
-struct linux_socketcall_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   what;   char what_[PAD_(l_int)];
-       l_ulong args;   char args_[PAD_(l_ulong)];
-};
-struct linux_syslog_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   type;   char type_[PAD_(l_int)];
-       char *  buf;    char buf_[PAD_(char *)];
-       l_int   len;    char len_[PAD_(l_int)];
-};
-struct linux_setitimer_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   which;  char which_[PAD_(l_int)];
-       struct l_itimerval *    itv;    char itv_[PAD_(struct l_itimerval *)];
-       struct l_itimerval *    oitv;   char oitv_[PAD_(struct l_itimerval *)];
-};
-struct linux_getitimer_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   which;  char which_[PAD_(l_int)];
-       struct l_itimerval *    itv;    char itv_[PAD_(struct l_itimerval *)];
-};
-struct linux_newstat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       struct l_newstat *      buf;    char buf_[PAD_(struct l_newstat *)];
-};
-struct linux_newlstat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       struct l_newstat *      buf;    char buf_[PAD_(struct l_newstat *)];
-};
-struct linux_newfstat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  fd;     char fd_[PAD_(l_uint)];
-       struct l_newstat *      buf;    char buf_[PAD_(struct l_newstat *)];
-};
-struct linux_uname_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_iopl_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_ulong level;  char level_[PAD_(l_ulong)];
-};
-struct linux_vhangup_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_vm86old_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_wait4_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_pid_t pid;    char pid_[PAD_(l_pid_t)];
-       l_uint *        status; char status_[PAD_(l_uint *)];
-       l_int   options;        char options_[PAD_(l_int)];
-       struct l_rusage *       rusage; char rusage_[PAD_(struct l_rusage *)];
-};
-struct linux_swapoff_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_sysinfo_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       struct l_sysinfo *      info;   char info_[PAD_(struct l_sysinfo *)];
-};
-struct linux_ipc_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  what;   char what_[PAD_(l_uint)];
-       l_int   arg1;   char arg1_[PAD_(l_int)];
-       l_int   arg2;   char arg2_[PAD_(l_int)];
-       l_int   arg3;   char arg3_[PAD_(l_int)];
-       void *  ptr;    char ptr_[PAD_(void *)];
-       l_long  arg5;   char arg5_[PAD_(l_long)];
-};
-struct linux_sigreturn_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       struct l_sigframe *     sfp;    char sfp_[PAD_(struct l_sigframe *)];
-};
-struct linux_clone_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   flags;  char flags_[PAD_(l_int)];
-       void *  stack;  char stack_[PAD_(void *)];
-       void *  parent_tidptr;  char parent_tidptr_[PAD_(void *)];
-       int     dummy;  char dummy_[PAD_(int)];
-       void *  child_tidptr;   char child_tidptr_[PAD_(void *)];
-};
-struct linux_newuname_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       struct l_new_utsname *  buf;    char buf_[PAD_(struct l_new_utsname *)];
-};
-struct linux_modify_ldt_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   func;   char func_[PAD_(l_int)];
-       void *  ptr;    char ptr_[PAD_(void *)];
-       l_ulong bytecount;      char bytecount_[PAD_(l_ulong)];
-};
-struct linux_adjtimex_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_sigprocmask_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   how;    char how_[PAD_(l_int)];
-       l_osigset_t *   mask;   char mask_[PAD_(l_osigset_t *)];
-       l_osigset_t *   omask;  char omask_[PAD_(l_osigset_t *)];
-};
-struct linux_create_module_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_init_module_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_delete_module_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_get_kernel_syms_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_quotactl_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_bdflush_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_sysfs_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   option; char option_[PAD_(l_int)];
-       l_ulong arg1;   char arg1_[PAD_(l_ulong)];
-       l_ulong arg2;   char arg2_[PAD_(l_ulong)];
-};
-struct linux_personality_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_ulong per;    char per_[PAD_(l_ulong)];
-};
-struct linux_setfsuid16_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uid16_t       uid;    char uid_[PAD_(l_uid16_t)];
-};
-struct linux_setfsgid16_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_gid16_t       gid;    char gid_[PAD_(l_gid16_t)];
-};
-struct linux_llseek_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   fd;     char fd_[PAD_(l_int)];
-       l_ulong ohigh;  char ohigh_[PAD_(l_ulong)];
-       l_ulong olow;   char olow_[PAD_(l_ulong)];
-       l_loff_t *      res;    char res_[PAD_(l_loff_t *)];
-       l_uint  whence; char whence_[PAD_(l_uint)];
-};
-struct linux_getdents_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  fd;     char fd_[PAD_(l_uint)];
-       void *  dent;   char dent_[PAD_(void *)];
-       l_uint  count;  char count_[PAD_(l_uint)];
-};
-struct linux_select_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   nfds;   char nfds_[PAD_(l_int)];
-       l_fd_set *      readfds;        char readfds_[PAD_(l_fd_set *)];
-       l_fd_set *      writefds;       char writefds_[PAD_(l_fd_set *)];
-       l_fd_set *      exceptfds;      char exceptfds_[PAD_(l_fd_set *)];
-       struct l_timeval *      timeout;        char timeout_[PAD_(struct l_timeval *)];
-};
-struct linux_msync_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_ulong addr;   char addr_[PAD_(l_ulong)];
-       l_size_t        len;    char len_[PAD_(l_size_t)];
-       l_int   fl;     char fl_[PAD_(l_int)];
-};
-struct linux_getsid_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_pid_t pid;    char pid_[PAD_(l_pid_t)];
-};
-struct linux_fdatasync_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  fd;     char fd_[PAD_(l_uint)];
-};
-struct linux_sysctl_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       struct l___sysctl_args *        args;   char args_[PAD_(struct l___sysctl_args *)];
-};
-struct linux_sched_setscheduler_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_pid_t pid;    char pid_[PAD_(l_pid_t)];
-       l_int   policy; char policy_[PAD_(l_int)];
-       struct l_sched_param *  param;  char param_[PAD_(struct l_sched_param *)];
-};
-struct linux_sched_getscheduler_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_pid_t pid;    char pid_[PAD_(l_pid_t)];
-};
-struct linux_sched_get_priority_max_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   policy; char policy_[PAD_(l_int)];
-};
-struct linux_sched_get_priority_min_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   policy; char policy_[PAD_(l_int)];
-};
-struct linux_mremap_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_ulong addr;   char addr_[PAD_(l_ulong)];
-       l_ulong old_len;        char old_len_[PAD_(l_ulong)];
-       l_ulong new_len;        char new_len_[PAD_(l_ulong)];
-       l_ulong flags;  char flags_[PAD_(l_ulong)];
-       l_ulong new_addr;       char new_addr_[PAD_(l_ulong)];
-};
-struct linux_setresuid16_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uid16_t       ruid;   char ruid_[PAD_(l_uid16_t)];
-       l_uid16_t       euid;   char euid_[PAD_(l_uid16_t)];
-       l_uid16_t       suid;   char suid_[PAD_(l_uid16_t)];
-};
-struct linux_getresuid16_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uid16_t *     ruid;   char ruid_[PAD_(l_uid16_t *)];
-       l_uid16_t *     euid;   char euid_[PAD_(l_uid16_t *)];
-       l_uid16_t *     suid;   char suid_[PAD_(l_uid16_t *)];
-};
-struct linux_vm86_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_query_module_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_nfsservctl_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_setresgid16_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_gid16_t       rgid;   char rgid_[PAD_(l_gid16_t)];
-       l_gid16_t       egid;   char egid_[PAD_(l_gid16_t)];
-       l_gid16_t       sgid;   char sgid_[PAD_(l_gid16_t)];
-};
-struct linux_getresgid16_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_gid16_t *     rgid;   char rgid_[PAD_(l_gid16_t *)];
-       l_gid16_t *     egid;   char egid_[PAD_(l_gid16_t *)];
-       l_gid16_t *     sgid;   char sgid_[PAD_(l_gid16_t *)];
-};
-struct linux_prctl_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_rt_sigreturn_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       struct l_ucontext *     ucp;    char ucp_[PAD_(struct l_ucontext *)];
-};
-struct linux_rt_sigaction_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   sig;    char sig_[PAD_(l_int)];
-       l_sigaction_t * act;    char act_[PAD_(l_sigaction_t *)];
-       l_sigaction_t * oact;   char oact_[PAD_(l_sigaction_t *)];
-       l_size_t        sigsetsize;     char sigsetsize_[PAD_(l_size_t)];
-};
-struct linux_rt_sigprocmask_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   how;    char how_[PAD_(l_int)];
-       l_sigset_t *    mask;   char mask_[PAD_(l_sigset_t *)];
-       l_sigset_t *    omask;  char omask_[PAD_(l_sigset_t *)];
-       l_size_t        sigsetsize;     char sigsetsize_[PAD_(l_size_t)];
-};
-struct linux_rt_sigpending_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_rt_sigtimedwait_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_rt_sigqueueinfo_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_rt_sigsuspend_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_sigset_t *    newset; char newset_[PAD_(l_sigset_t *)];
-       l_size_t        sigsetsize;     char sigsetsize_[PAD_(l_size_t)];
-};
-struct linux_pread_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  fd;     char fd_[PAD_(l_uint)];
-       char *  buf;    char buf_[PAD_(char *)];
-       l_size_t        nbyte;  char nbyte_[PAD_(l_size_t)];
-       l_loff_t        offset; char offset_[PAD_(l_loff_t)];
-};
-struct linux_pwrite_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  fd;     char fd_[PAD_(l_uint)];
-       char *  buf;    char buf_[PAD_(char *)];
-       l_size_t        nbyte;  char nbyte_[PAD_(l_size_t)];
-       l_loff_t        offset; char offset_[PAD_(l_loff_t)];
-};
-struct linux_chown16_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       l_uid16_t       uid;    char uid_[PAD_(l_uid16_t)];
-       l_gid16_t       gid;    char gid_[PAD_(l_gid16_t)];
-};
-struct linux_getcwd_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  buf;    char buf_[PAD_(char *)];
-       l_ulong bufsize;        char bufsize_[PAD_(l_ulong)];
-};
-struct linux_capget_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_capset_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_sigaltstack_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_stack_t *     uss;    char uss_[PAD_(l_stack_t *)];
-       l_stack_t *     uoss;   char uoss_[PAD_(l_stack_t *)];
-};
-struct linux_sendfile_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_vfork_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_getrlimit_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  resource;       char resource_[PAD_(l_uint)];
-       struct l_rlimit *       rlim;   char rlim_[PAD_(struct l_rlimit *)];
-};
-struct linux_mmap2_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_ulong addr;   char addr_[PAD_(l_ulong)];
-       l_ulong len;    char len_[PAD_(l_ulong)];
-       l_ulong prot;   char prot_[PAD_(l_ulong)];
-       l_ulong flags;  char flags_[PAD_(l_ulong)];
-       l_ulong fd;     char fd_[PAD_(l_ulong)];
-       l_ulong pgoff;  char pgoff_[PAD_(l_ulong)];
-};
-struct linux_truncate64_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       l_loff_t        length; char length_[PAD_(l_loff_t)];
-};
-struct linux_ftruncate64_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  fd;     char fd_[PAD_(l_uint)];
-       l_loff_t        length; char length_[PAD_(l_loff_t)];
-};
-struct linux_stat64_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  filename;       char filename_[PAD_(char *)];
-       struct l_stat64 *       statbuf;        char statbuf_[PAD_(struct l_stat64 *)];
-       l_long  flags;  char flags_[PAD_(l_long)];
-};
-struct linux_lstat64_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  filename;       char filename_[PAD_(char *)];
-       struct l_stat64 *       statbuf;        char statbuf_[PAD_(struct l_stat64 *)];
-       l_long  flags;  char flags_[PAD_(l_long)];
-};
-struct linux_fstat64_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_ulong fd;     char fd_[PAD_(l_ulong)];
-       struct l_stat64 *       statbuf;        char statbuf_[PAD_(struct l_stat64 *)];
-       l_long  flags;  char flags_[PAD_(l_long)];
-};
-struct linux_lchown_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       l_uid_t uid;    char uid_[PAD_(l_uid_t)];
-       l_gid_t gid;    char gid_[PAD_(l_gid_t)];
-};
-struct linux_getuid_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_getgid_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_getgroups_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   gidsetsize;     char gidsetsize_[PAD_(l_int)];
-       l_gid_t *       grouplist;      char grouplist_[PAD_(l_gid_t *)];
-};
-struct linux_setgroups_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   gidsetsize;     char gidsetsize_[PAD_(l_int)];
-       l_gid_t *       grouplist;      char grouplist_[PAD_(l_gid_t *)];
-};
-struct linux_chown_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       l_uid_t uid;    char uid_[PAD_(l_uid_t)];
-       l_gid_t gid;    char gid_[PAD_(l_gid_t)];
-};
-struct linux_setfsuid_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uid_t uid;    char uid_[PAD_(l_uid_t)];
-};
-struct linux_setfsgid_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_gid_t gid;    char gid_[PAD_(l_gid_t)];
-};
-struct linux_pivot_root_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  new_root;       char new_root_[PAD_(char *)];
-       char *  put_old;        char put_old_[PAD_(char *)];
-};
-struct linux_mincore_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_ulong start;  char start_[PAD_(l_ulong)];
-       l_size_t        len;    char len_[PAD_(l_size_t)];
-       u_char *        vec;    char vec_[PAD_(u_char *)];
-};
-struct linux_madvise_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_getdents64_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  fd;     char fd_[PAD_(l_uint)];
-       void *  dirent; char dirent_[PAD_(void *)];
-       l_uint  count;  char count_[PAD_(l_uint)];
-};
-struct linux_fcntl64_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint  fd;     char fd_[PAD_(l_uint)];
-       l_uint  cmd;    char cmd_[PAD_(l_uint)];
-       l_ulong arg;    char arg_[PAD_(l_ulong)];
-};
-struct linux_gettid_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_setxattr_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_lsetxattr_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_fsetxattr_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_getxattr_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_lgetxattr_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_fgetxattr_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_listxattr_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_llistxattr_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_flistxattr_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_removexattr_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_lremovexattr_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_fremovexattr_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_tkill_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       int     tid;    char tid_[PAD_(int)];
-       int     sig;    char sig_[PAD_(int)];
-};
-struct linux_sys_futex_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       void *  uaddr;  char uaddr_[PAD_(void *)];
-       int     op;     char op_[PAD_(int)];
-       int     val;    char val_[PAD_(int)];
-       struct l_timespec *     timeout;        char timeout_[PAD_(struct l_timespec *)];
-       void *  uaddr2; char uaddr2_[PAD_(void *)];
-       int     val3;   char val3_[PAD_(int)];
-};
-struct linux_sched_setaffinity_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_pid_t pid;    char pid_[PAD_(l_pid_t)];
-       l_uint  len;    char len_[PAD_(l_uint)];
-       l_ulong *       user_mask_ptr;  char user_mask_ptr_[PAD_(l_ulong *)];
-};
-struct linux_sched_getaffinity_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_pid_t pid;    char pid_[PAD_(l_pid_t)];
-       l_uint  len;    char len_[PAD_(l_uint)];
-       l_ulong *       user_mask_ptr;  char user_mask_ptr_[PAD_(l_ulong *)];
-};
-struct linux_set_thread_area_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       struct l_user_desc *    desc;   char desc_[PAD_(struct l_user_desc *)];
-};
-struct linux_get_thread_area_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       struct l_user_desc *    desc;   char desc_[PAD_(struct l_user_desc *)];
-};
-struct linux_fadvise64_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_exit_group_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       int     rval;   char rval_[PAD_(int)];
-};
-struct linux_epoll_create_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   size;   char size_[PAD_(l_int)];
-};
-struct linux_epoll_ctl_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   epfd;   char epfd_[PAD_(l_int)];
-       l_int   op;     char op_[PAD_(l_int)];
-       l_int   fd;     char fd_[PAD_(l_int)];
-       struct linux_epoll_event *      event;  char event_[PAD_(struct linux_epoll_event *)];
-};
-struct linux_epoll_wait_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   epfd;   char epfd_[PAD_(l_int)];
-       struct linux_epoll_event *      events; char events_[PAD_(struct linux_epoll_event *)];
-       l_int   maxevents;      char maxevents_[PAD_(l_int)];
-       l_int   timeout;        char timeout_[PAD_(l_int)];
-};
-struct linux_set_tid_address_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       int *   tidptr; char tidptr_[PAD_(int *)];
-};
-struct linux_clock_settime_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       clockid_t       which;  char which_[PAD_(clockid_t)];
-       struct l_timespec *     tp;     char tp_[PAD_(struct l_timespec *)];
-};
-struct linux_clock_gettime_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       clockid_t       which;  char which_[PAD_(clockid_t)];
-       struct l_timespec *     tp;     char tp_[PAD_(struct l_timespec *)];
-};
-struct linux_clock_getres_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       clockid_t       which;  char which_[PAD_(clockid_t)];
-       struct l_timespec *     tp;     char tp_[PAD_(struct l_timespec *)];
-};
-struct linux_clock_nanosleep_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       clockid_t       which;  char which_[PAD_(clockid_t)];
-       int     flags;  char flags_[PAD_(int)];
-       struct l_timespec *     rqtp;   char rqtp_[PAD_(struct l_timespec *)];
-       struct l_timespec *     rmtp;   char rmtp_[PAD_(struct l_timespec *)];
-};
-struct linux_statfs64_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_fstatfs64_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_tgkill_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       int     tgid;   char tgid_[PAD_(int)];
-       int     pid;    char pid_[PAD_(int)];
-       int     sig;    char sig_[PAD_(int)];
-};
-struct linux_utimes_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  fname;  char fname_[PAD_(char *)];
-       struct l_timeval *      tptr;   char tptr_[PAD_(struct l_timeval *)];
-};
-struct linux_fadvise64_64_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_mbind_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_get_mempolicy_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_set_mempolicy_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_mq_open_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       const char *    name;   char name_[PAD_(const char *)];
-       int     oflag;  char oflag_[PAD_(int)];
-       mode_t  mode;   char mode_[PAD_(mode_t)];
-       struct mq_attr *        attr;   char attr_[PAD_(struct mq_attr *)];
-};
-struct linux_mq_getsetattr_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_mqd_t mqd;    char mqd_[PAD_(l_mqd_t)];
-       const struct mq_attr *  attr;   char attr_[PAD_(const struct mq_attr *)];
-       struct mq_attr *        oattr;  char oattr_[PAD_(struct mq_attr *)];
-};
-struct linux_kexec_load_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_waitid_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_add_key_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_request_key_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_keyctl_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_ioprio_set_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_ioprio_get_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_inotify_init_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_inotify_add_watch_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_inotify_rm_watch_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_migrate_pages_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_openat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   dfd;    char dfd_[PAD_(l_int)];
-       char *  path;   char path_[PAD_(char *)];
-       l_int   flags;  char flags_[PAD_(l_int)];
-       l_int   mode;   char mode_[PAD_(l_int)];
-};
-struct linux_mkdirat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   dfd;    char dfd_[PAD_(l_int)];
-       char *  path;   char path_[PAD_(char *)];
-       l_int   mode;   char mode_[PAD_(l_int)];
-};
-struct linux_mknodat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   dfd;    char dfd_[PAD_(l_int)];
-       char *  path;   char path_[PAD_(char *)];
-       l_int   mode;   char mode_[PAD_(l_int)];
-       l_uint  dev;    char dev_[PAD_(l_uint)];
-};
-struct linux_fchownat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   dfd;    char dfd_[PAD_(l_int)];
-       char *  filename;       char filename_[PAD_(char *)];
-       l_uid16_t       uid;    char uid_[PAD_(l_uid16_t)];
-       l_gid16_t       gid;    char gid_[PAD_(l_gid16_t)];
-       l_int   flag;   char flag_[PAD_(l_int)];
-};
-struct linux_futimesat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   dfd;    char dfd_[PAD_(l_int)];
-       char *  fname;  char fname_[PAD_(char *)];
-       struct l_timeval *      tptr;   char tptr_[PAD_(struct l_timeval *)];
-};
-struct linux_fstatat64_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   dfd;    char dfd_[PAD_(l_int)];
-       char *  path;   char path_[PAD_(char *)];
-       struct l_stat64 *       statbuf;        char statbuf_[PAD_(struct l_stat64 *)];
-       l_int   flag;   char flag_[PAD_(l_int)];
-};
-struct linux_unlinkat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   dfd;    char dfd_[PAD_(l_int)];
-       char *  path;   char path_[PAD_(char *)];
-       l_int   flag;   char flag_[PAD_(l_int)];
-};
-struct linux_renameat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   olddfd; char olddfd_[PAD_(l_int)];
-       char *  from;   char from_[PAD_(char *)];
-       l_int   newdfd; char newdfd_[PAD_(l_int)];
-       char *  to;     char to_[PAD_(char *)];
-};
-struct linux_linkat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   olddfd; char olddfd_[PAD_(l_int)];
-       char *  path;   char path_[PAD_(char *)];
-       l_int   newdfd; char newdfd_[PAD_(l_int)];
-       char *  to;     char to_[PAD_(char *)];
-       l_int   flags;  char flags_[PAD_(l_int)];
-};
-struct linux_symlinkat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       char *  path;   char path_[PAD_(char *)];
-       l_int   newdfd; char newdfd_[PAD_(l_int)];
-       char *  to;     char to_[PAD_(char *)];
-};
-struct linux_readlinkat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   dfd;    char dfd_[PAD_(l_int)];
-       char *  path;   char path_[PAD_(char *)];
-       char *  buf;    char buf_[PAD_(char *)];
-       l_int   count;  char count_[PAD_(l_int)];
-};
-struct linux_fchmodat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   dfd;    char dfd_[PAD_(l_int)];
-       char *  filename;       char filename_[PAD_(char *)];
-       l_mode_t        mode;   char mode_[PAD_(l_mode_t)];
-};
-struct linux_faccessat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   dfd;    char dfd_[PAD_(l_int)];
-       char *  filename;       char filename_[PAD_(char *)];
-       l_int   mode;   char mode_[PAD_(l_int)];
-};
-struct linux_pselect6_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_ppoll_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_unshare_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_set_robust_list_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       struct linux_robust_list_head * head;   char head_[PAD_(struct linux_robust_list_head *)];
-       l_size_t        len;    char len_[PAD_(l_size_t)];
-};
-struct linux_get_robust_list_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   pid;    char pid_[PAD_(l_int)];
-       struct linux_robust_list_head **        head;   char head_[PAD_(struct linux_robust_list_head **)];
-       l_size_t *      len;    char len_[PAD_(l_size_t *)];
-};
-struct linux_splice_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_sync_file_range_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_tee_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_vmsplice_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_move_pages_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_getcpu_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_uint *        pcpu;   char pcpu_[PAD_(l_uint *)];
-       l_uint *        pnode;  char pnode_[PAD_(l_uint *)];
-       void *  ptcache;        char ptcache_[PAD_(void *)];
-};
-struct linux_epoll_pwait_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_utimensat_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_int   dfd;    char dfd_[PAD_(l_int)];
-       char *  fname;  char fname_[PAD_(char *)];
-       struct l_timespec *     tptr;   char tptr_[PAD_(struct l_timespec *)];
-       l_int   flag;   char flag_[PAD_(l_int)];
-};
-struct linux_signalfd_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_timerfd_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_eventfd_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       register_t dummy;
-};
-struct linux_pipe2_args {
-#ifdef _KERNEL
-       struct sysmsg sysmsg;
-#endif
-       l_ulong *       pipefds;        char pipefds_[PAD_(l_ulong *)];
-       l_int   flags;  char flags_[PAD_(l_int)];
-};
-
-#ifdef COMPAT_43
-
-#define        nosys   linux_nosys
-
-#ifdef _KERNEL
-
-
-#endif /* _KERNEL */
-
-#endif /* COMPAT_43 */
-
-
-#ifdef COMPAT_DF12
-
-#define        nosys   linux_nosys
-
-#ifdef _KERNEL
-
-
-#endif /* _KERNEL */
-
-#endif /* COMPAT_DF12 */
-
-
-#ifdef _KERNEL
-
-#define        nosys   linux_nosys
-int    sys_linux_fork (struct linux_fork_args *);
-int    sys_linux_open (struct linux_open_args *);
-int    sys_linux_waitpid (struct linux_waitpid_args *);
-int    sys_linux_creat (struct linux_creat_args *);
-int    sys_linux_link (struct linux_link_args *);
-int    sys_linux_unlink (struct linux_unlink_args *);
-int    sys_linux_execve (struct linux_execve_args *);
-int    sys_linux_chdir (struct linux_chdir_args *);
-int    sys_linux_time (struct linux_time_args *);
-int    sys_linux_mknod (struct linux_mknod_args *);
-int    sys_linux_chmod (struct linux_chmod_args *);
-int    sys_linux_lchown16 (struct linux_lchown16_args *);
-int    sys_linux_stat (struct linux_stat_args *);
-int    sys_linux_lseek (struct linux_lseek_args *);
-int    sys_linux_getpid (struct linux_getpid_args *);
-int    sys_linux_mount (struct linux_mount_args *);
-int    sys_linux_oldumount (struct linux_oldumount_args *);
-int    sys_linux_setuid16 (struct linux_setuid16_args *);
-int    sys_linux_getuid16 (struct linux_getuid16_args *);
-int    sys_linux_stime (struct linux_stime_args *);
-int    sys_linux_ptrace (struct linux_ptrace_args *);
-int    sys_linux_alarm (struct linux_alarm_args *);
-int    sys_linux_fstat (struct linux_fstat_args *);
-int    sys_linux_pause (struct linux_pause_args *);
-int    sys_linux_utime (struct linux_utime_args *);
-int    sys_linux_access (struct linux_access_args *);
-int    sys_linux_nice (struct linux_nice_args *);
-int    sys_linux_kill (struct linux_kill_args *);
-int    sys_linux_rename (struct linux_rename_args *);
-int    sys_linux_mkdir (struct linux_mkdir_args *);
-int    sys_linux_rmdir (struct linux_rmdir_args *);
-int    sys_linux_pipe (struct linux_pipe_args *);
-int    sys_linux_times (struct linux_times_args *);
-int    sys_linux_brk (struct linux_brk_args *);
-int    sys_linux_setgid16 (struct linux_setgid16_args *);
-int    sys_linux_getgid16 (struct linux_getgid16_args *);
-int    sys_linux_signal (struct linux_signal_args *);
-int    sys_linux_geteuid16 (struct linux_geteuid16_args *);
-int    sys_linux_getegid16 (struct linux_getegid16_args *);
-int    sys_linux_umount (struct linux_umount_args *);
-int    sys_linux_ioctl (struct linux_ioctl_args *);
-int    sys_linux_fcntl (struct linux_fcntl_args *);
-int    sys_linux_olduname (struct linux_olduname_args *);
-int    sys_linux_ustat (struct linux_ustat_args *);
-int    sys_linux_getppid (struct linux_getppid_args *);
-int    sys_linux_sigaction (struct linux_sigaction_args *);
-int    sys_linux_sgetmask (struct linux_sgetmask_args *);
-int    sys_linux_ssetmask (struct linux_ssetmask_args *);
-int    sys_linux_setreuid16 (struct linux_setreuid16_args *);
-int    sys_linux_setregid16 (struct linux_setregid16_args *);
-int    sys_linux_sigsuspend (struct linux_sigsuspend_args *);
-int    sys_linux_sigpending (struct linux_sigpending_args *);
-int    sys_linux_sethostname (struct linux_sethostname_args *);
-int    sys_linux_setrlimit (struct linux_setrlimit_args *);
-int    sys_linux_old_getrlimit (struct linux_old_getrlimit_args *);
-int    sys_linux_getgroups16 (struct linux_getgroups16_args *);
-int    sys_linux_setgroups16 (struct linux_setgroups16_args *);
-int    sys_linux_old_select (struct linux_old_select_args *);
-int    sys_linux_symlink (struct linux_symlink_args *);
-int    sys_linux_ostat (struct linux_ostat_args *);
-int    sys_linux_readlink (struct linux_readlink_args *);
-int    sys_linux_uselib (struct linux_uselib_args *);
-int    sys_linux_reboot (struct linux_reboot_args *);
-int    sys_linux_readdir (struct linux_readdir_args *);
-int    sys_linux_mmap (struct linux_mmap_args *);
-int    sys_linux_truncate (struct linux_truncate_args *);
-int    sys_linux_ftruncate (struct linux_ftruncate_args *);
-int    sys_linux_statfs (struct linux_statfs_args *);
-int    sys_linux_fstatfs (struct linux_fstatfs_args *);
-int    sys_linux_ioperm (struct linux_ioperm_args *);
-int    sys_linux_socketcall (struct linux_socketcall_args *);
-int    sys_linux_syslog (struct linux_syslog_args *);
-int    sys_linux_setitimer (struct linux_setitimer_args *);
-int    sys_linux_getitimer (struct linux_getitimer_args *);
-int    sys_linux_newstat (struct linux_newstat_args *);
-int    sys_linux_newlstat (struct linux_newlstat_args *);
-int    sys_linux_newfstat (struct linux_newfstat_args *);
-int    sys_linux_uname (struct linux_uname_args *);
-int    sys_linux_iopl (struct linux_iopl_args *);
-int    sys_linux_vhangup (struct linux_vhangup_args *);
-int    sys_linux_vm86old (struct linux_vm86old_args *);
-int    sys_linux_wait4 (struct linux_wait4_args *);
-int    sys_linux_swapoff (struct linux_swapoff_args *);
-int    sys_linux_sysinfo (struct linux_sysinfo_args *);
-int    sys_linux_ipc (struct linux_ipc_args *);
-int    sys_linux_sigreturn (struct linux_sigreturn_args *);
-int    sys_linux_clone (struct linux_clone_args *);
-int    sys_linux_newuname (struct linux_newuname_args *);
-int    sys_linux_modify_ldt (struct linux_modify_ldt_args *);
-int    sys_linux_adjtimex (struct linux_adjtimex_args *);
-int    sys_linux_sigprocmask (struct linux_sigprocmask_args *);
-int    sys_linux_create_module (struct linux_create_module_args *);
-int    sys_linux_init_module (struct linux_init_module_args *);
-int    sys_linux_delete_module (struct linux_delete_module_args *);
-int    sys_linux_get_kernel_syms (struct linux_get_kernel_syms_args *);
-int    sys_linux_quotactl (struct linux_quotactl_args *);
-int    sys_linux_bdflush (struct linux_bdflush_args *);
-int    sys_linux_sysfs (struct linux_sysfs_args *);
-int    sys_linux_personality (struct linux_personality_args *);
-int    sys_linux_setfsuid16 (struct linux_setfsuid16_args *);
-int    sys_linux_setfsgid16 (struct linux_setfsgid16_args *);
-int    sys_linux_llseek (struct linux_llseek_args *);
-int    sys_linux_getdents (struct linux_getdents_args *);
-int    sys_linux_select (struct linux_select_args *);
-int    sys_linux_msync (struct linux_msync_args *);
-int    sys_linux_getsid (struct linux_getsid_args *);
-int    sys_linux_fdatasync (struct linux_fdatasync_args *);
-int    sys_linux_sysctl (struct linux_sysctl_args *);
-int    sys_linux_sched_setscheduler (struct linux_sched_setscheduler_args *);
-int    sys_linux_sched_getscheduler (struct linux_sched_getscheduler_args *);
-int    sys_linux_sched_get_priority_max (struct linux_sched_get_priority_max_args *);
-int    sys_linux_sched_get_priority_min (struct linux_sched_get_priority_min_args *);
-int    sys_linux_mremap (struct linux_mremap_args *);
-int    sys_linux_setresuid16 (struct linux_setresuid16_args *);
-int    sys_linux_getresuid16 (struct linux_getresuid16_args *);
-int    sys_linux_vm86 (struct linux_vm86_args *);
-int    sys_linux_query_module (struct linux_query_module_args *);
-int    sys_linux_nfsservctl (struct linux_nfsservctl_args *);
-int    sys_linux_setresgid16 (struct linux_setresgid16_args *);
-int    sys_linux_getresgid16 (struct linux_getresgid16_args *);
-int    sys_linux_prctl (struct linux_prctl_args *);
-int    sys_linux_rt_sigreturn (struct linux_rt_sigreturn_args *);
-int    sys_linux_rt_sigaction (struct linux_rt_sigaction_args *);
-int    sys_linux_rt_sigprocmask (struct linux_rt_sigprocmask_args *);
-int    sys_linux_rt_sigpending (struct linux_rt_sigpending_args *);
-int    sys_linux_rt_sigtimedwait (struct linux_rt_sigtimedwait_args *);
-int    sys_linux_rt_sigqueueinfo (struct linux_rt_sigqueueinfo_args *);
-int    sys_linux_rt_sigsuspend (struct linux_rt_sigsuspend_args *);
-int    sys_linux_pread (struct linux_pread_args *);
-int    sys_linux_pwrite (struct linux_pwrite_args *);
-int    sys_linux_chown16 (struct linux_chown16_args *);
-int    sys_linux_getcwd (struct linux_getcwd_args *);
-int    sys_linux_capget (struct linux_capget_args *);
-int    sys_linux_capset (struct linux_capset_args *);
-int    sys_linux_sigaltstack (struct linux_sigaltstack_args *);
-int    sys_linux_sendfile (struct linux_sendfile_args *);
-int    sys_linux_vfork (struct linux_vfork_args *);
-int    sys_linux_getrlimit (struct linux_getrlimit_args *);
-int    sys_linux_mmap2 (struct linux_mmap2_args *);
-int    sys_linux_truncate64 (struct linux_truncate64_args *);
-int    sys_linux_ftruncate64 (struct linux_ftruncate64_args *);
-int    sys_linux_stat64 (struct linux_stat64_args *);
-int    sys_linux_lstat64 (struct linux_lstat64_args *);
-int    sys_linux_fstat64 (struct linux_fstat64_args *);
-int    sys_linux_lchown (struct linux_lchown_args *);
-int    sys_linux_getuid (struct linux_getuid_args *);
-int    sys_linux_getgid (struct linux_getgid_args *);
-int    sys_linux_getgroups (struct linux_getgroups_args *);
-int    sys_linux_setgroups (struct linux_setgroups_args *);
-int    sys_linux_chown (struct linux_chown_args *);
-int    sys_linux_setfsuid (struct linux_setfsuid_args *);
-int    sys_linux_setfsgid (struct linux_setfsgid_args *);
-int    sys_linux_pivot_root (struct linux_pivot_root_args *);
-int    sys_linux_mincore (struct linux_mincore_args *);
-int    sys_linux_madvise (struct linux_madvise_args *);
-int    sys_linux_getdents64 (struct linux_getdents64_args *);
-int    sys_linux_fcntl64 (struct linux_fcntl64_args *);
-int    sys_linux_gettid (struct linux_gettid_args *);
-int    sys_linux_setxattr (struct linux_setxattr_args *);
-int    sys_linux_lsetxattr (struct linux_lsetxattr_args *);
-int    sys_linux_fsetxattr (struct linux_fsetxattr_args *);
-int    sys_linux_getxattr (struct linux_getxattr_args *);
-int    sys_linux_lgetxattr (struct linux_lgetxattr_args *);
-int    sys_linux_fgetxattr (struct linux_fgetxattr_args *);
-int    sys_linux_listxattr (struct linux_listxattr_args *);
-int    sys_linux_llistxattr (struct linux_llistxattr_args *);
-int    sys_linux_flistxattr (struct linux_flistxattr_args *);
-int    sys_linux_removexattr (struct linux_removexattr_args *);
-int    sys_linux_lremovexattr (struct linux_lremovexattr_args *);
-int    sys_linux_fremovexattr (struct linux_fremovexattr_args *);
-int    sys_linux_tkill (struct linux_tkill_args *);
-int    sys_linux_sys_futex (struct linux_sys_futex_args *);
-int    sys_linux_sched_setaffinity (struct linux_sched_setaffinity_args *);
-int    sys_linux_sched_getaffinity (struct linux_sched_getaffinity_args *);
-int    sys_linux_set_thread_area (struct linux_set_thread_area_args *);
-int    sys_linux_get_thread_area (struct linux_get_thread_area_args *);
-int    sys_linux_fadvise64 (struct linux_fadvise64_args *);
-int    sys_linux_exit_group (struct linux_exit_group_args *);
-int    sys_linux_epoll_create (struct linux_epoll_create_args *);
-int    sys_linux_epoll_ctl (struct linux_epoll_ctl_args *);
-int    sys_linux_epoll_wait (struct linux_epoll_wait_args *);
-int    sys_linux_set_tid_address (struct linux_set_tid_address_args *);
-int    sys_linux_clock_settime (struct linux_clock_settime_args *);
-int    sys_linux_clock_gettime (struct linux_clock_gettime_args *);
-int    sys_linux_clock_getres (struct linux_clock_getres_args *);
-int    sys_linux_clock_nanosleep (struct linux_clock_nanosleep_args *);
-int    sys_linux_statfs64 (struct linux_statfs64_args *);
-int    sys_linux_fstatfs64 (struct linux_fstatfs64_args *);
-int    sys_linux_tgkill (struct linux_tgkill_args *);
-int    sys_linux_utimes (struct linux_utimes_args *);
-int    sys_linux_fadvise64_64 (struct linux_fadvise64_64_args *);
-int    sys_linux_mbind (struct linux_mbind_args *);
-int    sys_linux_get_mempolicy (struct linux_get_mempolicy_args *);
-int    sys_linux_set_mempolicy (struct linux_set_mempolicy_args *);
-int    sys_linux_mq_open (struct linux_mq_open_args *);
-int    sys_linux_mq_getsetattr (struct linux_mq_getsetattr_args *);
-int    sys_linux_kexec_load (struct linux_kexec_load_args *);
-int    sys_linux_waitid (struct linux_waitid_args *);
-int    sys_linux_add_key (struct linux_add_key_args *);
-int    sys_linux_request_key (struct linux_request_key_args *);
-int    sys_linux_keyctl (struct linux_keyctl_args *);
-int    sys_linux_ioprio_set (struct linux_ioprio_set_args *);
-int    sys_linux_ioprio_get (struct linux_ioprio_get_args *);
-int    sys_linux_inotify_init (struct linux_inotify_init_args *);
-int    sys_linux_inotify_add_watch (struct linux_inotify_add_watch_args *);
-int    sys_linux_inotify_rm_watch (struct linux_inotify_rm_watch_args *);
-int    sys_linux_migrate_pages (struct linux_migrate_pages_args *);
-int    sys_linux_openat (struct linux_openat_args *);
-int    sys_linux_mkdirat (struct linux_mkdirat_args *);
-int    sys_linux_mknodat (struct linux_mknodat_args *);
-int    sys_linux_fchownat (struct linux_fchownat_args *);
-int    sys_linux_futimesat (struct linux_futimesat_args *);
-int    sys_linux_fstatat64 (struct linux_fstatat64_args *);
-int    sys_linux_unlinkat (struct linux_unlinkat_args *);
-int    sys_linux_renameat (struct linux_renameat_args *);
-int    sys_linux_linkat (struct linux_linkat_args *);
-int    sys_linux_symlinkat (struct linux_symlinkat_args *);
-int    sys_linux_readlinkat (struct linux_readlinkat_args *);
-int    sys_linux_fchmodat (struct linux_fchmodat_args *);
-int    sys_linux_faccessat (struct linux_faccessat_args *);
-int    sys_linux_pselect6 (struct linux_pselect6_args *);
-int    sys_linux_ppoll (struct linux_ppoll_args *);
-int    sys_linux_unshare (struct linux_unshare_args *);
-int    sys_linux_set_robust_list (struct linux_set_robust_list_args *);
-int    sys_linux_get_robust_list (struct linux_get_robust_list_args *);
-int    sys_linux_splice (struct linux_splice_args *);
-int    sys_linux_sync_file_range (struct linux_sync_file_range_args *);
-int    sys_linux_tee (struct linux_tee_args *);
-int    sys_linux_vmsplice (struct linux_vmsplice_args *);
-int    sys_linux_move_pages (struct linux_move_pages_args *);
-int    sys_linux_getcpu (struct linux_getcpu_args *);
-int    sys_linux_epoll_pwait (struct linux_epoll_pwait_args *);
-int    sys_linux_utimensat (struct linux_utimensat_args *);
-int    sys_linux_signalfd (struct linux_signalfd_args *);
-int    sys_linux_timerfd (struct linux_timerfd_args *);
-int    sys_linux_eventfd (struct linux_eventfd_args *);
-int    sys_linux_pipe2 (struct linux_pipe2_args *);
-
-#endif /* !_LINUX_SYSPROTO_H_ */
-#undef PAD_
-
-#endif /* _KERNEL */
diff --git a/sys/emulation/linux/i386/linux_ptrace.c b/sys/emulation/linux/i386/linux_ptrace.c
deleted file mode 100644 (file)
index 71d70f2..0000000
+++ /dev/null
@@ -1,508 +0,0 @@
-/*
- * Copyright (c) 2001 Alexander Kabaev
- * 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
- *    in this position and unchanged.
- * 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.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * 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.
- *
- * $FreeBSD: src/sys/i386/linux/linux_ptrace.c,v 1.7.4.3 2003/01/03 17:13:23 kan Exp $
- * $DragonFly: src/sys/emulation/linux/i386/linux_ptrace.c,v 1.15 2007/02/19 01:14:23 corecode Exp $
- */
-
-#include "opt_cpu.h"
-
-#include <sys/param.h>
-#include <sys/lock.h>
-#include <sys/proc.h>
-#include <sys/ptrace.h>
-#include <sys/systm.h>
-
-#include <vm/vm.h>
-#include <vm/pmap.h>
-#include <vm/vm_map.h>
-#include <sys/user.h>
-#include <sys/reg.h>
-
-#include <machine/md_var.h>
-#include <machine/pcb.h>
-
-#include "linux.h"
-#include "linux_proto.h"
-
-/*
- *   Linux ptrace requests numbers. Mostly identical to FreeBSD,
- *   except for MD ones and PT_ATTACH/PT_DETACH.
- */
-#define        PTRACE_TRACEME          0
-#define        PTRACE_PEEKTEXT         1
-#define        PTRACE_PEEKDATA         2
-#define        PTRACE_PEEKUSR          3
-#define        PTRACE_POKETEXT         4
-#define        PTRACE_POKEDATA         5
-#define        PTRACE_POKEUSR          6
-#define        PTRACE_CONT             7
-#define        PTRACE_KILL             8
-#define        PTRACE_SINGLESTEP       9
-
-#define PTRACE_ATTACH          16
-#define PTRACE_DETACH          17
-
-#define        PTRACE_SYSCALL          24
-
-#define PTRACE_GETREGS         12
-#define PTRACE_SETREGS         13
-#define PTRACE_GETFPREGS       14
-#define PTRACE_SETFPREGS       15
-#define PTRACE_GETFPXREGS      18
-#define PTRACE_SETFPXREGS      19
-
-#define PTRACE_SETOPTIONS      21
-
-/*
- * Linux keeps debug registers at the following
- * offset in the user struct
- */
-#define LINUX_DBREG_OFFSET     252
-#define LINUX_DBREG_SIZE       (8*sizeof(l_int))
-
-static __inline__ int
-map_signum(int signum)
-{
-
-       if (signum > 0 && signum <= LINUX_SIGTBLSZ)
-               signum = linux_to_bsd_signal[_SIG_IDX(signum)];
-       return ((signum == SIGSTOP)? 0 : signum);
-}
-
-struct linux_pt_reg {
-       l_long  ebx;
-       l_long  ecx;
-       l_long  edx;
-       l_long  esi;
-       l_long  edi;
-       l_long  ebp;
-       l_long  eax;
-       l_int   xds;
-       l_int   xes;
-       l_int   xfs;
-       l_int   xgs;
-       l_long  orig_eax;
-       l_long  eip;
-       l_int   xcs;
-       l_long  eflags;
-       l_long  esp;
-       l_int   xss;
-};
-
-/*
- *   Translate i386 ptrace registers between Linux and FreeBSD formats.
- *   The translation is pretty straighforward, for all registers, but
- *   orig_eax on Linux side and r_trapno and r_err in FreeBSD
- */
-static void
-map_regs_to_linux(struct reg *bsd_r, struct linux_pt_reg *linux_r)
-{
-       linux_r->ebx = bsd_r->r_ebx;
-       linux_r->ecx = bsd_r->r_ecx;
-       linux_r->edx = bsd_r->r_edx;
-       linux_r->esi = bsd_r->r_esi;
-       linux_r->edi = bsd_r->r_edi;
-       linux_r->ebp = bsd_r->r_ebp;
-       linux_r->eax = bsd_r->r_eax;
-       linux_r->xds = bsd_r->r_ds;
-       linux_r->xes = bsd_r->r_es;
-       linux_r->xfs = bsd_r->r_fs;
-       linux_r->xgs = bsd_r->r_gs;
-       linux_r->orig_eax = bsd_r->r_eax;
-       linux_r->eip = bsd_r->r_eip;
-       linux_r->xcs = bsd_r->r_cs;
-       linux_r->eflags = bsd_r->r_eflags;
-       linux_r->esp = bsd_r->r_esp;
-       linux_r->xss = bsd_r->r_ss;
-}
-
-static void
-map_regs_from_linux(struct reg *bsd_r, struct linux_pt_reg *linux_r)
-{
-       bsd_r->r_ebx = linux_r->ebx;
-       bsd_r->r_ecx = linux_r->ecx;
-       bsd_r->r_edx = linux_r->edx;
-       bsd_r->r_esi = linux_r->esi;
-       bsd_r->r_edi = linux_r->edi;
-       bsd_r->r_ebp = linux_r->ebp;
-       bsd_r->r_eax = linux_r->eax;
-       bsd_r->r_ds  = linux_r->xds;
-       bsd_r->r_es  = linux_r->xes;
-       bsd_r->r_fs  = linux_r->xfs;
-       bsd_r->r_gs  = linux_r->xgs;
-       bsd_r->r_eip = linux_r->eip;
-       bsd_r->r_cs  = linux_r->xcs;
-       bsd_r->r_eflags = linux_r->eflags;
-       bsd_r->r_esp = linux_r->esp;
-       bsd_r->r_ss = linux_r->xss;
-}
-
-struct linux_pt_fpreg {
-       l_long cwd;
-       l_long swd;
-       l_long twd;
-       l_long fip;
-       l_long fcs;
-       l_long foo;
-       l_long fos;
-       l_long st_space[2*10];
-};
-
-static void
-map_fpregs_to_linux(struct fpreg *bsd_r, struct linux_pt_fpreg *linux_r)
-{
-       linux_r->cwd = bsd_r->fpr_env[0];
-       linux_r->swd = bsd_r->fpr_env[1];
-       linux_r->twd = bsd_r->fpr_env[2];
-       linux_r->fip = bsd_r->fpr_env[3];
-       linux_r->fcs = bsd_r->fpr_env[4];
-       linux_r->foo = bsd_r->fpr_env[5];
-       linux_r->fos = bsd_r->fpr_env[6];
-       bcopy(bsd_r->fpr_acc, linux_r->st_space, sizeof(linux_r->st_space));
-}
-
-static void
-map_fpregs_from_linux(struct fpreg *bsd_r, struct linux_pt_fpreg *linux_r)
-{
-       bsd_r->fpr_env[0] = linux_r->cwd;
-       bsd_r->fpr_env[1] = linux_r->swd;
-       bsd_r->fpr_env[2] = linux_r->twd;
-       bsd_r->fpr_env[3] = linux_r->fip;
-       bsd_r->fpr_env[4] = linux_r->fcs;
-       bsd_r->fpr_env[5] = linux_r->foo;
-       bsd_r->fpr_env[6] = linux_r->fos;
-       bcopy(bsd_r->fpr_acc, linux_r->st_space, sizeof(bsd_r->fpr_acc));
-}
-
-struct linux_pt_fpxreg {
-       l_ushort        cwd;
-       l_ushort        swd;
-       l_ushort        twd;
-       l_ushort        fop;
-       l_long          fip;
-       l_long          fcs;
-       l_long          foo;
-       l_long          fos;
-       l_long          mxcsr;
-       l_long          reserved;
-       l_long          st_space[32];
-       l_long          xmm_space[32];
-       l_long          padding[56];
-};
-
-#ifndef CPU_DISABLE_SSE
-static int
-linux_proc_read_fpxregs(struct lwp *lp, struct linux_pt_fpxreg *fpxregs)
-{
-       int error;
-
-       error = 0;
-       if (cpu_fxsr == 0)
-               error = EIO;
-       else
-               bcopy(&lp->lwp_thread->td_pcb->pcb_save.sv_xmm,
-                   fpxregs, sizeof(*fpxregs));
-       return (error);
-}
-
-static int
-linux_proc_write_fpxregs(struct lwp *lp, struct linux_pt_fpxreg *fpxregs)
-{
-       int error;
-
-       error = 0;
-       if (cpu_fxsr == 0)
-               error = EIO;
-       else
-               bcopy(fpxregs, &lp->lwp_thread->td_pcb->pcb_save.sv_xmm,
-                   sizeof(*fpxregs));
-       return (error);
-}
-#endif
-
-/*
- * MPALMOSTSAFE
- */
-int
-sys_linux_ptrace(struct linux_ptrace_args *uap)
-{
-       struct thread *td = curthread;
-       struct proc *curp = td->td_proc;
-       union {
-               struct linux_pt_reg     reg;
-               struct linux_pt_fpreg   fpreg;
-               struct linux_pt_fpxreg  fpxreg;
-       } r;
-       union {
-               struct reg              bsd_reg;
-               struct fpreg            bsd_fpreg;
-               struct dbreg            bsd_dbreg;
-       } u;
-       void *addr;
-       pid_t pid;
-       int error, req;
-       struct proc *p = NULL;  /* held process */
-
-       error = 0;
-
-       /* by default, just copy data intact */
-       req  = uap->req;
-       pid  = (pid_t)uap->pid;
-       addr = (void *)uap->addr;
-
-       switch (req) {
-       case PTRACE_TRACEME:
-       case PTRACE_POKETEXT:
-       case PTRACE_POKEDATA:
-       case PTRACE_KILL:
-               error = kern_ptrace(curp, req, pid, addr, uap->data,
-                                   &uap->sysmsg_iresult);
-               break;
-       case PTRACE_PEEKTEXT:
-       case PTRACE_PEEKDATA: {
-               /* need to preserve return value, use dummy */
-               l_int rval = 0;
-               error = kern_ptrace(curp, req, pid, addr, 0, &rval);
-               if (error == 0) {
-                       error = copyout(&rval, (caddr_t)uap->data, sizeof(l_int));
-               }
-               break;
-       }
-       case PTRACE_DETACH:
-               error = kern_ptrace(curp, PT_DETACH, pid, (void *)1,
-                                   map_signum(uap->data),
-                                   &uap->sysmsg_iresult);
-               break;
-       case PTRACE_SINGLESTEP:
-       case PTRACE_CONT:
-               error = kern_ptrace(curp, req, pid, (void *)1,
-                                   map_signum(uap->data),
-                                   &uap->sysmsg_iresult);
-               break;
-       case PTRACE_ATTACH:
-               error = kern_ptrace(curp, PT_ATTACH, pid, addr, uap->data,
-                                   &uap->sysmsg_iresult);
-               break;
-       case PTRACE_GETREGS:
-               /* Linux is using data where FreeBSD is using addr */
-               error = kern_ptrace(curp, PT_GETREGS, pid, &u.bsd_reg, 0,
-                                   &uap->sysmsg_iresult);
-               if (error == 0) {
-                       map_regs_to_linux(&u.bsd_reg, &r.reg);
-                       error = copyout(&r.reg, (void *)uap->data,
-                                       sizeof(r.reg));
-               }
-               break;
-       case PTRACE_SETREGS:
-               /* Linux is using data where FreeBSD is using addr */
-               error = copyin((caddr_t)uap->data, &r.reg, sizeof(r.reg));
-               if (error == 0) {
-                       map_regs_from_linux(&u.bsd_reg, &r.reg);
-                       error = kern_ptrace(curp, PT_SETREGS, pid, &u.bsd_reg,
-                                           0, &uap->sysmsg_iresult);
-               }
-