1/* $NetBSD: signal.h,v 1.71 2016/08/04 06:43:43 christos Exp $ */
2
3/*
4 * Copyright (c) 1982, 1986, 1989, 1991, 1993
5 * The Regents of the University of California. All rights reserved.
6 * (c) UNIX System Laboratories, Inc.
7 * All or some portions of this file are derived from material licensed
8 * to the University of California by American Telephone and Telegraph
9 * Co. or Unix System Laboratories, Inc. and are reproduced herein with
10 * the permission of UNIX System Laboratories, Inc.
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 * 1. Redistributions of source code must retain the above copyright
16 * notice, this list of conditions and the following disclaimer.
17 * 2. Redistributions in binary form must reproduce the above copyright
18 * notice, this list of conditions and the following disclaimer in the
19 * documentation and/or other materials provided with the distribution.
20 * 3. Neither the name of the University nor the names of its contributors
21 * may be used to endorse or promote products derived from this software
22 * without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 * @(#)signal.h 8.4 (Berkeley) 5/4/95
37 */
38
39#ifndef _SYS_SIGNAL_H_
40#define _SYS_SIGNAL_H_
41
42#include <sys/featuretest.h>
43#include <sys/sigtypes.h>
44
45#define _NSIG 64
46
47#if defined(_NETBSD_SOURCE)
48#define NSIG _NSIG
49
50#endif /* _NETBSD_SOURCE */
51
52#define SIGHUP 1 /* hangup */
53#define SIGINT 2 /* interrupt */
54#define SIGQUIT 3 /* quit */
55#define SIGILL 4 /* illegal instruction (not reset when caught) */
56#define SIGTRAP 5 /* trace trap (not reset when caught) */
57#define SIGABRT 6 /* abort() */
58#define SIGIOT SIGABRT /* compatibility */
59#define SIGEMT 7 /* EMT instruction */
60#define SIGFPE 8 /* floating point exception */
61#define SIGKILL 9 /* kill (cannot be caught or ignored) */
62#define SIGBUS 10 /* bus error */
63#define SIGSEGV 11 /* segmentation violation */
64#define SIGSYS 12 /* bad argument to system call */
65#define SIGPIPE 13 /* write on a pipe with no one to read it */
66#define SIGALRM 14 /* alarm clock */
67#define SIGTERM 15 /* software termination signal from kill */
68#define SIGURG 16 /* urgent condition on IO channel */
69#define SIGSTOP 17 /* sendable stop signal not from tty */
70#define SIGTSTP 18 /* stop signal from tty */
71#define SIGCONT 19 /* continue a stopped process */
72#define SIGCHLD 20 /* to parent on child stop or exit */
73#define SIGTTIN 21 /* to readers pgrp upon background tty read */
74#define SIGTTOU 22 /* like TTIN for output if (tp->t_local&LTOSTOP) */
75#define SIGIO 23 /* input/output possible signal */
76#define SIGXCPU 24 /* exceeded CPU time limit */
77#define SIGXFSZ 25 /* exceeded file size limit */
78#define SIGVTALRM 26 /* virtual time alarm */
79#define SIGPROF 27 /* profiling time alarm */
80#define SIGWINCH 28 /* window size changes */
81#define SIGINFO 29 /* information request */
82#define SIGUSR1 30 /* user defined signal 1 */
83#define SIGUSR2 31 /* user defined signal 2 */
84#define SIGPWR 32 /* power fail/restart (not reset when caught) */
85#define SIGRTMIN 33
86#define SIGRTMAX 63
87
88#ifndef _KERNEL
89#include <sys/cdefs.h>
90#endif
91
92#define SIG_DFL ((void (*)(int)) 0)
93#define SIG_IGN ((void (*)(int)) 1)
94#define SIG_ERR ((void (*)(int)) -1)
95#define SIG_HOLD ((void (*)(int)) 3)
96
97#if defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \
98 defined(_NETBSD_SOURCE)
99
100#ifdef _KERNEL
101#define sigaddset(s, n) __sigaddset(s, n)
102#define sigdelset(s, n) __sigdelset(s, n)
103#define sigismember(s, n) __sigismember(s, n)
104#define sigemptyset(s) __sigemptyset(s)
105#define sigfillset(s) __sigfillset(s)
106#define sigplusset(s, t) __sigplusset(s, t)
107#define sigminusset(s, t) __sigminusset(s, t)
108#endif /* _KERNEL */
109
110#if (_POSIX_C_SOURCE - 0) >= 199309L || (_XOPEN_SOURCE - 0) >= 500 || \
111 defined(_NETBSD_SOURCE)
112#include <sys/siginfo.h>
113#endif
114
115#if (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
116 (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
117#include <sys/ucontext.h>
118#endif /* _XOPEN_SOURCE_EXTENDED || _XOPEN_SOURCE >= 500 || _NETBSD_SOURCE */
119
120/*
121 * Signal vector "template" used in sigaction call.
122 */
123struct sigaction {
124 union {
125 void (*_sa_handler)(int);
126#if (_POSIX_C_SOURCE - 0) >= 199309L || (_XOPEN_SOURCE - 0) >= 500 || \
127 defined(_NETBSD_SOURCE)
128 void (*_sa_sigaction)(int, siginfo_t *, void *);
129#endif
130 } _sa_u; /* signal handler */
131 sigset_t sa_mask; /* signal mask to apply */
132 int sa_flags; /* see signal options below */
133};
134
135#define sa_handler _sa_u._sa_handler
136#if (_POSIX_C_SOURCE - 0) >= 199309L || (_XOPEN_SOURCE - 0) >= 500 || \
137 defined(_NETBSD_SOURCE)
138#define sa_sigaction _sa_u._sa_sigaction
139#endif
140
141#include <machine/signal.h> /* sigcontext; codes for SIGILL, SIGFPE */
142
143#if (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
144 (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
145#define SA_ONSTACK 0x0001 /* take signal on signal stack */
146#define SA_RESTART 0x0002 /* restart system call on signal return */
147#define SA_RESETHAND 0x0004 /* reset to SIG_DFL when taking signal */
148#define SA_NODEFER 0x0010 /* don't mask the signal we're delivering */
149#endif /* _XOPEN_SOURCE_EXTENDED || XOPEN_SOURCE >= 500 || _NETBSD_SOURCE */
150/* Only valid for SIGCHLD. */
151#define SA_NOCLDSTOP 0x0008 /* do not generate SIGCHLD on child stop */
152#define SA_NOCLDWAIT 0x0020 /* do not generate zombies on unwaited child */
153#if (_POSIX_C_SOURCE - 0) >= 199309L || (_XOPEN_SOURCE - 0) >= 500 || \
154 defined(_NETBSD_SOURCE)
155#define SA_SIGINFO 0x0040 /* take sa_sigaction handler */
156#endif /* (_POSIX_C_SOURCE - 0) >= 199309L || ... */
157#if defined(_NETBSD_SOURCE)
158#define SA_NOKERNINFO 0x0080 /* siginfo does not print kernel info on tty */
159#endif /*_NETBSD_SOURCE */
160#ifdef _KERNEL
161#define SA_ALLBITS 0x00ff
162#endif
163
164/*
165 * Flags for sigprocmask():
166 */
167#define SIG_BLOCK 1 /* block specified signal set */
168#define SIG_UNBLOCK 2 /* unblock specified signal set */
169#define SIG_SETMASK 3 /* set specified signal set */
170
171#if defined(_NETBSD_SOURCE)
172typedef void (*sig_t)(int); /* type of signal function */
173#endif
174
175#if (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
176 (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
177/*
178 * Flags used with stack_t/struct sigaltstack.
179 */
180#define SS_ONSTACK 0x0001 /* take signals on alternate stack */
181#define SS_DISABLE 0x0004 /* disable taking signals on alternate stack */
182#ifdef _KERNEL
183#define SS_ALLBITS 0x0005
184#endif
185#define MINSIGSTKSZ 8192 /* minimum allowable stack */
186#define SIGSTKSZ (MINSIGSTKSZ + 32768) /* recommended stack size */
187#endif /* _XOPEN_SOURCE_EXTENDED || _XOPEN_SOURCE >= 500 || _NETBSD_SOURCE */
188
189#if (defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)) || \
190 (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
191/*
192 * Structure used in sigstack call.
193 */
194struct sigstack {
195 void *ss_sp; /* signal stack pointer */
196 int ss_onstack; /* current status */
197};
198#endif /* _XOPEN_SOURCE_EXTENDED || _XOPEN_SOURCE >= 500 || _NETBSD_SOURCE */
199
200#if defined(_NETBSD_SOURCE) && !defined(_KERNEL)
201/*
202 * Macro for converting signal number to a mask suitable for
203 * sigblock().
204 */
205#define sigmask(n) __sigmask(n)
206
207#define BADSIG SIG_ERR
208#endif /* _NETBSD_SOURCE */
209
210#if (_POSIX_C_SOURCE - 0) >= 199309L || (_XOPEN_SOURCE - 0) >= 500 || \
211 defined(_NETBSD_SOURCE)
212struct sigevent {
213 int sigev_notify;
214 int sigev_signo;
215 union sigval sigev_value;
216 void (*sigev_notify_function)(union sigval);
217 void /* pthread_attr_t */ *sigev_notify_attributes;
218};
219
220#define SIGEV_NONE 0
221#define SIGEV_SIGNAL 1
222#define SIGEV_THREAD 2
223#if defined(_NETBSD_SOURCE)
224#define SIGEV_SA 3
225#endif
226#endif /* (_POSIX_C_SOURCE - 0) >= 199309L || ... */
227
228#endif /* _POSIX_C_SOURCE || _XOPEN_SOURCE || _NETBSD_SOURCE */
229
230/*
231 * For historical reasons; programs expect signal's return value to be
232 * defined by <sys/signal.h>.
233 */
234__BEGIN_DECLS
235void (*signal(int, void (*)(int)))(int);
236void (*bsd_signal(int, void (*)(int)))(int);
237#if (_POSIX_C_SOURCE - 0) >= 200112L || defined(_NETBSD_SOURCE)
238int sigqueue(pid_t, int, const union sigval);
239#endif
240#if defined(_NETBSD_SOURCE)
241int sigqueueinfo(pid_t, const siginfo_t *);
242#endif
243__END_DECLS
244#endif /* !_SYS_SIGNAL_H_ */
245