Deleted Added
full compact
signal.h (50477) signal.h (51791)
1/*
2 * Copyright (c) 1982, 1986, 1989, 1991, 1993
3 * The Regents of the University of California. All rights reserved.
4 * (c) UNIX System Laboratories, Inc.
5 * All or some portions of this file are derived from material licensed
6 * to the University of California by American Telephone and Telegraph
7 * Co. or Unix System Laboratories, Inc. and are reproduced herein with
8 * the permission of UNIX System Laboratories, Inc.

--- 22 unchanged lines hidden (view full) ---

31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 * SUCH DAMAGE.
37 *
38 * @(#)signal.h 8.4 (Berkeley) 5/4/95
1/*
2 * Copyright (c) 1982, 1986, 1989, 1991, 1993
3 * The Regents of the University of California. All rights reserved.
4 * (c) UNIX System Laboratories, Inc.
5 * All or some portions of this file are derived from material licensed
6 * to the University of California by American Telephone and Telegraph
7 * Co. or Unix System Laboratories, Inc. and are reproduced herein with
8 * the permission of UNIX System Laboratories, Inc.

--- 22 unchanged lines hidden (view full) ---

31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 * SUCH DAMAGE.
37 *
38 * @(#)signal.h 8.4 (Berkeley) 5/4/95
39 * $FreeBSD: head/sys/sys/signal.h 50477 1999-08-28 01:08:13Z peter $
39 * $FreeBSD: head/sys/sys/signal.h 51791 1999-09-29 15:03:48Z marcel $
40 */
41
42#ifndef _SYS_SIGNAL_H_
43#define _SYS_SIGNAL_H_
44
45#include <sys/cdefs.h>
46#include <sys/_posix.h>
40 */
41
42#ifndef _SYS_SIGNAL_H_
43#define _SYS_SIGNAL_H_
44
45#include <sys/cdefs.h>
46#include <sys/_posix.h>
47#include <sys/types.h>
47#include <machine/signal.h> /* sig_atomic_t; trap codes; sigcontext */
48
48#include <machine/signal.h> /* sig_atomic_t; trap codes; sigcontext */
49
49#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
50#define NSIG 32 /* counting 0; could be 33 (mask is 1-32) */
51#endif
50/*
51 * sigset_t macros
52 */
53#define _SIG_WORDS 4
54#define _SIG_MAXSIG 128
55#define _SIG_IDX(sig) ((sig) - 1)
56#define _SIG_WORD(sig) (_SIG_IDX(sig) >> 5)
57#define _SIG_BIT(sig) (1 << (_SIG_IDX(sig) & 31))
52
58
53#define SIGHUP 1 /* hangup */
54#define SIGINT 2 /* interrupt */
55#define SIGQUIT 3 /* quit */
56#define SIGILL 4 /* illegal instruction (not reset when caught) */
59/*
60 * system defined signals
61 */
62#define SIGHUP 1 /* hangup */
63#define SIGINT 2 /* interrupt */
64#define SIGQUIT 3 /* quit */
65#define SIGILL 4 /* illegal instr. (not reset when caught) */
57#ifndef _POSIX_SOURCE
66#ifndef _POSIX_SOURCE
58#define SIGTRAP 5 /* trace trap (not reset when caught) */
67#define SIGTRAP 5 /* trace trap (not reset when caught) */
59#endif
68#endif
60#define SIGABRT 6 /* abort() */
69#define SIGABRT 6 /* abort() */
61#ifndef _POSIX_SOURCE
70#ifndef _POSIX_SOURCE
62#define SIGIOT SIGABRT /* compatibility */
63#define SIGEMT 7 /* EMT instruction */
71#define SIGIOT SIGABRT /* compatibility */
72#define SIGEMT 7 /* EMT instruction */
64#endif
73#endif
65#define SIGFPE 8 /* floating point exception */
66#define SIGKILL 9 /* kill (cannot be caught or ignored) */
74#define SIGFPE 8 /* floating point exception */
75#define SIGKILL 9 /* kill (cannot be caught or ignored) */
67#ifndef _POSIX_SOURCE
76#ifndef _POSIX_SOURCE
68#define SIGBUS 10 /* bus error */
77#define SIGBUS 10 /* bus error */
69#endif
78#endif
70#define SIGSEGV 11 /* segmentation violation */
79#define SIGSEGV 11 /* segmentation violation */
71#ifndef _POSIX_SOURCE
80#ifndef _POSIX_SOURCE
72#define SIGSYS 12 /* non-existent system call invoked */
81#define SIGSYS 12 /* non-existent system call invoked */
73#endif
82#endif
74#define SIGPIPE 13 /* write on a pipe with no one to read it */
75#define SIGALRM 14 /* alarm clock */
76#define SIGTERM 15 /* software termination signal from kill */
83#define SIGPIPE 13 /* write on a pipe with no one to read it */
84#define SIGALRM 14 /* alarm clock */
85#define SIGTERM 15 /* software termination signal from kill */
77#ifndef _POSIX_SOURCE
86#ifndef _POSIX_SOURCE
78#define SIGURG 16 /* urgent condition on IO channel */
87#define SIGURG 16 /* urgent condition on IO channel */
79#endif
88#endif
80#define SIGSTOP 17 /* sendable stop signal not from tty */
81#define SIGTSTP 18 /* stop signal from tty */
82#define SIGCONT 19 /* continue a stopped process */
83#define SIGCHLD 20 /* to parent on child stop or exit */
84#define SIGTTIN 21 /* to readers pgrp upon background tty read */
85#define SIGTTOU 22 /* like TTIN for output if (tp->t_local&LTOSTOP) */
89#define SIGSTOP 17 /* sendable stop signal not from tty */
90#define SIGTSTP 18 /* stop signal from tty */
91#define SIGCONT 19 /* continue a stopped process */
92#define SIGCHLD 20 /* to parent on child stop or exit */
93#define SIGTTIN 21 /* to readers pgrp upon background tty read */
94#define SIGTTOU 22 /* like TTIN if (tp->t_local&LTOSTOP) */
86#ifndef _POSIX_SOURCE
95#ifndef _POSIX_SOURCE
87#define SIGIO 23 /* input/output possible signal */
88#define SIGXCPU 24 /* exceeded CPU time limit */
89#define SIGXFSZ 25 /* exceeded file size limit */
90#define SIGVTALRM 26 /* virtual time alarm */
91#define SIGPROF 27 /* profiling time alarm */
92#define SIGWINCH 28 /* window size changes */
93#define SIGINFO 29 /* information request */
96#define SIGIO 23 /* input/output possible signal */
97#define SIGXCPU 24 /* exceeded CPU time limit */
98#define SIGXFSZ 25 /* exceeded file size limit */
99#define SIGVTALRM 26 /* virtual time alarm */
100#define SIGPROF 27 /* profiling time alarm */
101#define SIGWINCH 28 /* window size changes */
102#define SIGINFO 29 /* information request */
94#endif
103#endif
95#define SIGUSR1 30 /* user defined signal 1 */
96#define SIGUSR2 31 /* user defined signal 2 */
104#define SIGUSR1 30 /* user defined signal 1 */
105#define SIGUSR2 31 /* user defined signal 2 */
97
98/*-
99 * Type of a signal handling function.
100 *
101 * Language spec sez signal handlers take exactly one arg, even though we
102 * actually supply three. Ugh!
103 *
104 * We don't try to hide the difference by leaving out the args because
105 * that would cause warnings about conformant programs. Nonconformant
106 * programs can avoid the warnings by casting to (__sighandler_t *) or
107 * sig_t before calling signal() or assigning to sa_handler or sv_handler.
108 *
109 * The kernel should reverse the cast before calling the function. It
110 * has no way to do this, but on most machines 1-arg and 3-arg functions
111 * have the same calling protocol so there is no problem in practice.
112 * A bit in sa_flags could be used to specify the number of args.
113 */
114typedef void __sighandler_t __P((int));
115
106
107/*-
108 * Type of a signal handling function.
109 *
110 * Language spec sez signal handlers take exactly one arg, even though we
111 * actually supply three. Ugh!
112 *
113 * We don't try to hide the difference by leaving out the args because
114 * that would cause warnings about conformant programs. Nonconformant
115 * programs can avoid the warnings by casting to (__sighandler_t *) or
116 * sig_t before calling signal() or assigning to sa_handler or sv_handler.
117 *
118 * The kernel should reverse the cast before calling the function. It
119 * has no way to do this, but on most machines 1-arg and 3-arg functions
120 * have the same calling protocol so there is no problem in practice.
121 * A bit in sa_flags could be used to specify the number of args.
122 */
123typedef void __sighandler_t __P((int));
124
116#if defined(_P1003_1B_VISIBLE_HISTORICALLY) || \
117 (!defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE))
125#define SIG_DFL ((__sighandler_t *)0)
126#define SIG_IGN ((__sighandler_t *)1)
127#define SIG_HOLD ((__sighandler_t *)2)
128#define SIG_ERR ((__sighandler_t *)-1)
129
118union sigval {
119 /* Members as suggested by Annex C of POSIX 1003.1b. */
130union sigval {
131 /* Members as suggested by Annex C of POSIX 1003.1b. */
120 int sigval_int;
121 void *sigval_ptr;
132 int sigval_int;
133 void *sigval_ptr;
122};
134};
123#endif /* !_ANSI_SOURCE && _P1003_1B_VISIBLE_HISTORICALLY */
124
135
125#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
126/* POSIX 1003.1b required values. */
127#define SI_USER 0x10001
128#define SI_QUEUE 0x10002
129#define SI_TIMER 0x10003
130#define SI_ASYNCIO 0x10004
131#define SI_MESGQ 0x10005
132
133/* Additional FreeBSD values. */
134#define SI_UNDEFINED 0
135
136struct __siginfo {
137 struct sigcontext si_sc;
138 int si_signo; /* signal number */
139
136typedef struct {
137 int si_signo; /* signal number */
138 int si_errno; /* errno association */
140 /*
141 * Cause of signal, one of the SI_ macros or signal-specific
142 * values, i.e. one of the FPE_... values for SIGFPE. This
143 * value is equivalent to the second argument to an old-style
144 * FreeBSD signal handler.
145 */
139 /*
140 * Cause of signal, one of the SI_ macros or signal-specific
141 * values, i.e. one of the FPE_... values for SIGFPE. This
142 * value is equivalent to the second argument to an old-style
143 * FreeBSD signal handler.
144 */
146 int si_code;
145 int si_code; /* signal code */
146 pid_t si_pid; /* sending process */
147 uid_t si_uid; /* sender's ruid */
148 int si_status; /* exit value */
149 void *si_addr; /* faulting instruction */
150 union sigval si_value; /* signal value */
151 long si_band; /* band event for SIGPOLL */
152 int __spare__[7]; /* gimme some slack */
153} siginfo_t;
147
154
148 union sigval si_value;
149};
150#else /* ! _ANSI_SOURCE && ! _POSIX_SOURCE */
151struct __siginfo;
152#endif /* ! _ANSI_SOURCE && ! _POSIX_SOURCE */
155typedef struct {
156 unsigned int __bits[_SIG_WORDS];
157} sigset_t;
153
158
154typedef struct __siginfo siginfo_t;
159#if !defined(_ANSI_SOURCE)
155
160
156#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
157typedef void __siginfohandler_t __P((int, siginfo_t *, void *));
158#endif /* ! _ANSI_SOURCE && ! _POSIX_SOURCE */
159
160#define SIG_DFL ((__sighandler_t *)0)
161#define SIG_IGN ((__sighandler_t *)1)
162#define SIG_ERR ((__sighandler_t *)-1)
163
164#ifndef _ANSI_SOURCE
165typedef unsigned int sigset_t;
166
167/*
168 * Signal vector "template" used in sigaction call.
169 */
170struct sigaction {
171 union {
172 void (*__sa_handler) __P((int));
173 void (*__sa_sigaction) __P((int, siginfo_t *, void *));
174 } __sigaction_u; /* signal handler */
161/*
162 * Signal vector "template" used in sigaction call.
163 */
164struct sigaction {
165 union {
166 void (*__sa_handler) __P((int));
167 void (*__sa_sigaction) __P((int, siginfo_t *, void *));
168 } __sigaction_u; /* signal handler */
175 sigset_t sa_mask; /* signal mask to apply */
176 int sa_flags; /* see signal options below */
169 int sa_flags; /* see signal options below */
170 sigset_t sa_mask; /* signal mask to apply */
177};
171};
172
178/* if SA_SIGINFO is set, sa_sigaction is to be used instead of sa_handler. */
179#define sa_handler __sigaction_u.__sa_handler
173/* if SA_SIGINFO is set, sa_sigaction is to be used instead of sa_handler. */
174#define sa_handler __sigaction_u.__sa_handler
180#ifndef _POSIX_SOURCE
175
176#define SA_NOCLDSTOP 0x0008 /* do not generate SIGCHLD on child stop */
177
178#if !defined(_POSIX_SOURCE)
179
181#define sa_sigaction __sigaction_u.__sa_sigaction
180#define sa_sigaction __sigaction_u.__sa_sigaction
182#endif
183
181
184#ifndef _POSIX_SOURCE
185#define SA_ONSTACK 0x0001 /* take signal on signal stack */
186#define SA_RESTART 0x0002 /* restart system call on signal return */
187#define SA_RESETHAND 0x0004 /* reset to SIG_DFL when taking signal */
188#define SA_NODEFER 0x0010 /* don't mask the signal we're delivering */
189#define SA_NOCLDWAIT 0x0020 /* don't keep zombies around */
190#define SA_SIGINFO 0x0040 /* signal handler with SA_SIGINFO args */
191#ifdef COMPAT_SUNOS
192#define SA_USERTRAMP 0x0100 /* do not bounce off kernel's sigtramp */
193#endif
182#define SA_ONSTACK 0x0001 /* take signal on signal stack */
183#define SA_RESTART 0x0002 /* restart system call on signal return */
184#define SA_RESETHAND 0x0004 /* reset to SIG_DFL when taking signal */
185#define SA_NODEFER 0x0010 /* don't mask the signal we're delivering */
186#define SA_NOCLDWAIT 0x0020 /* don't keep zombies around */
187#define SA_SIGINFO 0x0040 /* signal handler with SA_SIGINFO args */
188#ifdef COMPAT_SUNOS
189#define SA_USERTRAMP 0x0100 /* do not bounce off kernel's sigtramp */
190#endif
194#endif /* _POSIX_SOURCE */
195#define SA_NOCLDSTOP 0x0008 /* do not generate SIGCHLD on child stop */
196
191
197/*
198 * Flags for sigprocmask:
199 */
200#define SIG_BLOCK 1 /* block specified signal set */
201#define SIG_UNBLOCK 2 /* unblock specified signal set */
202#define SIG_SETMASK 3 /* set specified signal set */
192#define NSIG 32
203
193
204#ifndef _POSIX_SOURCE
194/* POSIX 1003.1b required values. */
195#define SI_USER 0x10001
196#define SI_QUEUE 0x10002
197#define SI_TIMER 0x10003
198#define SI_ASYNCIO 0x10004
199#define SI_MESGQ 0x10005
200
201/* Additional FreeBSD values. */
202#define SI_UNDEFINED 0
203
204typedef void __siginfohandler_t __P((int, siginfo_t *, void *));
205
205typedef __sighandler_t *sig_t; /* type of pointer to a signal function */
206
207#ifdef _BSD_SIZE_T_
208typedef _BSD_SIZE_T_ size_t;
209#undef _BSD_SIZE_T_
210#endif
211
212/*
206typedef __sighandler_t *sig_t; /* type of pointer to a signal function */
207
208#ifdef _BSD_SIZE_T_
209typedef _BSD_SIZE_T_ size_t;
210#undef _BSD_SIZE_T_
211#endif
212
213/*
213 * Structure used in sigaltstack call.
214 * sigaltstack
214 */
215 */
215struct sigaltstack {
216 char *ss_sp; /* signal stack base */
217 size_t ss_size; /* signal stack length */
218 int ss_flags; /* SS_DISABLE and/or SS_ONSTACK */
219};
216typedef struct sigaltstack {
217 char *ss_sp; /* signal stack base */
218 unsigned int ss_size; /* signal stack length */
219 int ss_flags; /* SS_DISABLE and/or SS_ONSTACK */
220} stack_t;
221
220#define SS_ONSTACK 0x0001 /* take signal on alternate stack */
221#define SS_DISABLE 0x0004 /* disable taking signals on alternate stack */
222#define MINSIGSTKSZ 8192 /* minimum allowable stack */
223#define SIGSTKSZ (MINSIGSTKSZ + 32768) /* recommended stack size */
224
225/*
222#define SS_ONSTACK 0x0001 /* take signal on alternate stack */
223#define SS_DISABLE 0x0004 /* disable taking signals on alternate stack */
224#define MINSIGSTKSZ 8192 /* minimum allowable stack */
225#define SIGSTKSZ (MINSIGSTKSZ + 32768) /* recommended stack size */
226
227/*
228 * Suck in definition of ucontext_t
229 */
230#include <sys/ucontext.h>
231
232/*
226 * 4.3 compatibility:
227 * Signal vector "template" used in sigvec call.
228 */
229struct sigvec {
233 * 4.3 compatibility:
234 * Signal vector "template" used in sigvec call.
235 */
236struct sigvec {
230 __sighandler_t *sv_handler; /* signal handler */
231 int sv_mask; /* signal mask to apply */
232 int sv_flags; /* see signal options below */
237 __sighandler_t *sv_handler; /* signal handler */
238 int sv_mask; /* signal mask to apply */
239 int sv_flags; /* see signal options below */
233};
234
235#define SV_ONSTACK SA_ONSTACK
236#define SV_INTERRUPT SA_RESTART /* same bit, opposite sense */
237#define SV_RESETHAND SA_RESETHAND
238#define SV_NODEFER SA_NODEFER
239#define SV_NOCLDSTOP SA_NOCLDSTOP
240#define SV_SIGINFO SA_SIGINFO
241#define sv_onstack sv_flags /* isn't compatibility wonderful! */
242
243/*
244 * Structure used in sigstack call.
245 */
246struct sigstack {
240};
241
242#define SV_ONSTACK SA_ONSTACK
243#define SV_INTERRUPT SA_RESTART /* same bit, opposite sense */
244#define SV_RESETHAND SA_RESETHAND
245#define SV_NODEFER SA_NODEFER
246#define SV_NOCLDSTOP SA_NOCLDSTOP
247#define SV_SIGINFO SA_SIGINFO
248#define sv_onstack sv_flags /* isn't compatibility wonderful! */
249
250/*
251 * Structure used in sigstack call.
252 */
253struct sigstack {
247 char *ss_sp; /* signal stack pointer */
248 int ss_onstack; /* current status */
254 char *ss_sp; /* signal stack pointer */
255 int ss_onstack; /* current status */
249};
250
251/*
252 * Macro for converting signal number to a mask suitable for
253 * sigblock().
254 */
255#define sigmask(m) (1 << ((m)-1))
256
257#define BADSIG SIG_ERR
258
256};
257
258/*
259 * Macro for converting signal number to a mask suitable for
260 * sigblock().
261 */
262#define sigmask(m) (1 << ((m)-1))
263
264#define BADSIG SIG_ERR
265
259#endif /* !_POSIX_SOURCE */
260#endif /* !_ANSI_SOURCE */
266#endif /* !_POSIX_SOURCE */
261
267
262#if !defined(_ANSI_SOURCE) && defined(_P1003_1B_VISIBLE_HISTORICALLY)
268/*
269 * Flags for sigprocmask:
270 */
271#define SIG_BLOCK 1 /* block specified signal set */
272#define SIG_UNBLOCK 2 /* unblock specified signal set */
273#define SIG_SETMASK 3 /* set specified signal set */
263
264struct sigevent {
274
275struct sigevent {
265 int sigev_notify; /* Notification type */
266 int sigev_signo; /* Signal number */
267 union sigval sigev_value; /* Signal value */
276 int sigev_notify; /* Notification type */
277 int sigev_signo; /* Signal number */
278 union sigval sigev_value; /* Signal value */
268};
269
270#define SIGEV_NONE 0 /* No async notification */
271#define SIGEV_SIGNAL 1 /* Generate a queued signal */
272
279};
280
281#define SIGEV_NONE 0 /* No async notification */
282#define SIGEV_SIGNAL 1 /* Generate a queued signal */
283
273#endif /* ! _ANSI_SOURCE && _P1003_1B_VISIBLE_HISTORICALLY */
284#endif /* !_ANSI_SOURCE */
274
275/*
276 * For historical reasons; programs expect signal's return value to be
277 * defined by <sys/signal.h>.
278 */
279__BEGIN_DECLS
280__sighandler_t *signal __P((int, __sighandler_t *));
281__END_DECLS
282
283#endif /* !_SYS_SIGNAL_H_ */
285
286/*
287 * For historical reasons; programs expect signal's return value to be
288 * defined by <sys/signal.h>.
289 */
290__BEGIN_DECLS
291__sighandler_t *signal __P((int, __sighandler_t *));
292__END_DECLS
293
294#endif /* !_SYS_SIGNAL_H_ */