Add the DragonFly cvs id and perform general cleanups on cvs/rcs/sccs ids. Most
[dragonfly.git] / sys / emulation / ibcs2 / i386 / ibcs2_sysvec.c
1 /*
2  * Copyright (c) 1995 Steven Wallace
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. All advertising materials mentioning features or use of this software
14  *    must display the following acknowledgement:
15  *      This product includes software developed by Steven Wallace.
16  * 4. The name of the author may not be used to endorse or promote products
17  *    derived from this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  *
30  * $FreeBSD: src/sys/i386/ibcs2/ibcs2_sysvec.c,v 1.17.2.1 2001/02/22 05:15:01 marcel Exp $
31  * $DragonFly: src/sys/emulation/ibcs2/i386/Attic/ibcs2_sysvec.c,v 1.2 2003/06/17 04:28:35 dillon Exp $
32  */
33
34 #include <sys/param.h>
35 #include <sys/kernel.h>
36 #include <sys/module.h>
37 #include <sys/sysent.h>
38 #include <sys/signalvar.h>
39 #include <sys/proc.h>
40
41 #include <i386/ibcs2/ibcs2_syscall.h>
42 #include <i386/ibcs2/ibcs2_signal.h>
43
44 extern int bsd_to_ibcs2_errno[];
45 extern struct sysent ibcs2_sysent[IBCS2_SYS_MAXSYSCALL];
46 extern int szsigcode;
47 extern char sigcode[];
48
49 struct sysentvec ibcs2_svr3_sysvec = {
50         sizeof (ibcs2_sysent) / sizeof (ibcs2_sysent[0]),
51         ibcs2_sysent,
52         0xFF,
53         IBCS2_SIGTBLSZ,
54         bsd_to_ibcs2_sig,
55         ELAST + 1,
56         bsd_to_ibcs2_errno,
57         0,              /* trap-to-signal translation function */
58         0,              /* fixup */
59         sendsig,
60         sigcode,        /* use generic trampoline */
61         &szsigcode,     /* use generic trampoline size */
62         0,              /* prepsyscall */
63         "IBCS2 COFF",
64         NULL,           /* we don't have a COFF coredump function */
65         NULL,
66         IBCS2_MINSIGSTKSZ
67 };
68
69 /*
70  * Create an "ibcs2" module that does nothing but allow checking for
71  * the presence of the subsystem.
72  */
73 static int
74 ibcs2_modevent(module_t mod, int type, void *unused)
75 {
76         struct proc *p = NULL;
77
78         switch(type) {
79         case MOD_UNLOAD:
80                 /* if this was an ELF module we'd use elf_brand_inuse()... */
81                 for (p = allproc.lh_first; p != 0; p = p->p_list.le_next) {
82                         if (p->p_sysent == &ibcs2_svr3_sysvec)
83                                 return EBUSY;
84                 }
85         default:
86                 /* do not care */
87         }
88         return 0;
89 }
90 static moduledata_t ibcs2_mod = {
91         "ibcs2",
92         ibcs2_modevent,
93         0
94 };
95 DECLARE_MODULE(ibcs2, ibcs2_mod, SI_SUB_PSEUDO, SI_ORDER_ANY);