|
|
1.1 root 1: /*
2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7: * Reserved. This file contains Original Code and/or Modifications of
8: * Original Code as defined in and that are subject to the Apple Public
9: * Source License Version 1.1 (the "License"). You may not use this file
10: * except in compliance with the License. Please obtain a copy of the
11: * License at http://www.apple.com/publicsource and read it before using
12: * this file.
13: *
14: * The Original Code and all software distributed under the License are
15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
19: * License for the specific language governing rights and limitations
20: * under the License.
21: *
22: * @APPLE_LICENSE_HEADER_END@
23: */
24:
25: /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */
26: /*
27: * Copyright (c) 1991, 1993
28: * The Regents of the University of California. All rights reserved.
29: *
30: * Redistribution and use in source and binary forms, with or without
31: * modification, are permitted provided that the following conditions
32: * are met:
33: * 1. Redistributions of source code must retain the above copyright
34: * notice, this list of conditions and the following disclaimer.
35: * 2. Redistributions in binary form must reproduce the above copyright
36: * notice, this list of conditions and the following disclaimer in the
37: * documentation and/or other materials provided with the distribution.
38: * 3. All advertising materials mentioning features or use of this software
39: * must display the following acknowledgement:
40: * This product includes software developed by the University of
41: * California, Berkeley and its contributors.
42: * 4. Neither the name of the University nor the names of its contributors
43: * may be used to endorse or promote products derived from this software
44: * without specific prior written permission.
45: *
46: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
47: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
48: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
49: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
50: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
51: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
52: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
53: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
54: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
55: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
56: * SUCH DAMAGE.
57: *
58: * @(#)signalvar.h 8.6 (Berkeley) 2/19/95
59: */
60:
61: #ifndef _SYS_SIGNALVAR_H_ /* tmp for user.h */
62: #define _SYS_SIGNALVAR_H_
63:
64: /*
65: * Kernel signal definitions and data structures,
66: * not exported to user programs.
67: */
68:
69: /*
70: * Process signal actions and state, needed only within the process
71: * (not necessarily resident).
72: */
73: struct sigacts {
74: sig_t ps_sigact[NSIG]; /* disposition of signals */
75: sigset_t ps_catchmask[NSIG]; /* signals to be blocked */
76: sigset_t ps_sigonstack; /* signals to take on sigstack */
77: sigset_t ps_sigintr; /* signals that interrupt syscalls */
78: sigset_t ps_oldmask; /* saved mask from before sigpause */
79: int ps_flags; /* signal flags, below */
80: struct sigaltstack ps_sigstk; /* sp & on stack state variable */
81: int ps_sig; /* for core dump/debugger XXX */
82: int ps_code; /* for core dump/debugger XXX */
83: int ps_addr; /* for core dump/debugger XXX */
84: sigset_t ps_usertramp; /* SunOS compat; libc sigtramp XXX */
85: };
86:
87: /* signal flags */
88: #define SAS_OLDMASK 0x01 /* need to restore mask before pause */
89: #define SAS_ALTSTACK 0x02 /* have alternate signal stack */
90:
91: /* additional signal action values, used only temporarily/internally */
92: #define SIG_CATCH (void (*)())2
93: #define SIG_HOLD (void (*)())3
94:
95: /*
96: * get signal action for process and signal; currently only for current process
97: */
98: #define SIGACTION(p, sig) (p->p_sigacts->ps_sigact[(sig)])
99:
100: /*
101: * Determine signal that should be delivered to process p, the current
102: * process, 0 if none. If there is a pending stop signal with default
103: * action, the process stops in issig().
104: */
105: #define CURSIG(p) \
106: (((p)->p_siglist == 0 || \
107: ((p)->p_flag & P_TRACED) == 0 && \
108: ((p)->p_siglist & ~(p)->p_sigmask) == 0) ? \
109: 0 : issignal(p))
110:
111: #define HAVE_SIGNALS(p) \
112: ((p)->p_siglist \
113: & ~((((p)->p_sigmask) \
114: | (((p)->p_flag & P_TRACED) ? 0 : (p)->p_sigignore)) \
115: & ~sigcantmask))
116:
117: /*
118: * Check for per-process and per thread signals.
119: */
120: #define SHOULDissignal(p,uthreadp) \
121: (((p)->p_siglist | (uthreadp)->uu_sig) \
122: & ~((((p)->p_sigmask) \
123: | (((p)->p_flag & P_TRACED) ? 0 : (p)->p_sigignore)) \
124: & ~sigcantmask))
125:
126: /*
127: * Check for signals and per-thread signals.
128: * Use in trap() and syscall() before
129: * exiting kernel.
130: */
131: #define CHECK_SIGNALS(p, thread, uthreadp) \
132: (!thread_should_halt(thread) \
133: && (SHOULDissignal(p,uthreadp)))
134:
135:
136: /*
137: * Clear a pending signal from a process.
138: */
139: #define CLRSIG(p, sig) { (p)->p_siglist &= ~sigmask(sig); }
140:
141: /*
142: * Signal properties and actions.
143: * The array below categorizes the signals and their default actions
144: * according to the following properties:
145: */
146: #define SA_KILL 0x01 /* terminates process by default */
147: #define SA_CORE 0x02 /* ditto and coredumps */
148: #define SA_STOP 0x04 /* suspend process */
149: #define SA_TTYSTOP 0x08 /* ditto, from tty */
150: #define SA_IGNORE 0x10 /* ignore by default */
151: #define SA_CONT 0x20 /* continue if suspended */
152: #define SA_CANTMASK 0x40 /* non-maskable, catchable */
153:
154: #ifdef SIGPROP
155: int sigprop[NSIG + 1] = {
156: 0, /* unused */
157: SA_KILL, /* SIGHUP */
158: SA_KILL, /* SIGINT */
159: SA_KILL|SA_CORE, /* SIGQUIT */
160: SA_KILL|SA_CORE, /* SIGILL */
161: SA_KILL|SA_CORE, /* SIGTRAP */
162: SA_KILL|SA_CORE, /* SIGABRT */
163: SA_KILL|SA_CORE, /* SIGEMT */
164: SA_KILL|SA_CORE, /* SIGFPE */
165: SA_KILL, /* SIGKILL */
166: SA_KILL|SA_CORE, /* SIGBUS */
167: SA_KILL|SA_CORE, /* SIGSEGV */
168: SA_KILL|SA_CORE, /* SIGSYS */
169: SA_KILL, /* SIGPIPE */
170: SA_KILL, /* SIGALRM */
171: SA_KILL, /* SIGTERM */
172: SA_IGNORE, /* SIGURG */
173: SA_STOP, /* SIGSTOP */
174: SA_STOP|SA_TTYSTOP, /* SIGTSTP */
175: SA_IGNORE|SA_CONT, /* SIGCONT */
176: SA_IGNORE, /* SIGCHLD */
177: SA_STOP|SA_TTYSTOP, /* SIGTTIN */
178: SA_STOP|SA_TTYSTOP, /* SIGTTOU */
179: SA_IGNORE, /* SIGIO */
180: SA_KILL, /* SIGXCPU */
181: SA_KILL, /* SIGXFSZ */
182: SA_KILL, /* SIGVTALRM */
183: SA_KILL, /* SIGPROF */
184: SA_IGNORE, /* SIGWINCH */
185: SA_IGNORE, /* SIGINFO */
186: SA_KILL, /* SIGUSR1 */
187: SA_KILL, /* SIGUSR2 */
188: };
189:
190: #define contsigmask (sigmask(SIGCONT))
191: #define stopsigmask (sigmask(SIGSTOP) | sigmask(SIGTSTP) | \
192: sigmask(SIGTTIN) | sigmask(SIGTTOU))
193:
194: #endif /* SIGPROP */
195:
196: #define sigcantmask (sigmask(SIGKILL) | sigmask(SIGSTOP))
197:
198: #ifdef _KERNEL
199: /*
200: * Machine-independent functions:
201: */
202: int coredump __P((struct proc *p));
203: void execsigs __P((struct proc *p));
204: void gsignal __P((int pgid, int sig));
205: int issig __P((struct proc *p));
206: void pgsignal __P((struct pgrp *pgrp, int sig, int checkctty));
207: void postsig __P((int sig));
208: void psignal __P((struct proc *p, int sig));
209: void siginit __P((struct proc *p));
210: void trapsignal __P((struct proc *p, int sig, unsigned code));
211:
212: /*
213: * Machine-dependent functions:
214: */
215: void sendsig __P((struct proc *, sig_t action, int sig, int returnmask, u_long code));
216: #endif /* _KERNEL */
217: #endif /* !_SYS_SIGNALVAR_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.