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