1 /* 2 * Copyright (c) 1982, 1986, 1989, 1991 Regents of the University of California. 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 the University of 16 * California, Berkeley and its contributors. 17 * 4. Neither the name of the University nor the names of its contributors 18 * may be used to endorse or promote products derived from this software 19 * without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * 33 * from: @(#)signal.h 7.16 (Berkeley) 3/17/91 34 * 386BSD: $Id: signal.h,v 1.2 93/02/05 17:30:10 bill Exp $ 35 */ 36 37 #ifndef _SIGNAL_H_ 38 #define _SIGNAL_H_ 39 40 #define NSIG 32 /* counting 0; could be 33 (mask is 1-32) */ 41 42 #ifndef _POSIX_SOURCE 43 #include <machine/trap.h> /* codes for SIGILL, SIGFPE */ 44 #endif /* _POSIX_SOURCE */ 45 46 #define SIGHUP 1 /* hangup */ 47 #define SIGINT 2 /* interrupt */ 48 #define SIGQUIT 3 /* quit */ 49 #define SIGILL 4 /* illegal instruction (not reset when caught) */ 50 #ifndef _POSIX_SOURCE 51 #define SIGTRAP 5 /* trace trap (not reset when caught) */ 52 #endif 53 #define SIGABRT 6 /* abort() */ 54 #ifndef _POSIX_SOURCE 55 #define SIGIOT SIGABRT /* compatibility */ 56 #define SIGEMT 7 /* EMT instruction */ 57 #endif 58 #define SIGFPE 8 /* floating point exception */ 59 #define SIGKILL 9 /* kill (cannot be caught or ignored) */ 60 #ifndef _POSIX_SOURCE 61 #define SIGBUS 10 /* bus error */ 62 #endif 63 #define SIGSEGV 11 /* segmentation violation */ 64 #ifndef _POSIX_SOURCE 65 #define SIGSYS 12 /* bad argument to system call */ 66 #endif 67 #define SIGPIPE 13 /* write on a pipe with no one to read it */ 68 #define SIGALRM 14 /* alarm clock */ 69 #define SIGTERM 15 /* software termination signal from kill */ 70 #ifndef _POSIX_SOURCE 71 #define SIGURG 16 /* urgent condition on IO channel */ 72 #endif 73 #define SIGSTOP 17 /* sendable stop signal not from tty */ 74 #define SIGTSTP 18 /* stop signal from tty */ 75 #define SIGCONT 19 /* continue a stopped process */ 76 #define SIGCHLD 20 /* to parent on child stop or exit */ 77 #define SIGTTIN 21 /* to readers pgrp upon background tty read */ 78 #define SIGTTOU 22 /* like TTIN for output if (tp->t_local<OSTOP) */ 79 #ifndef _POSIX_SOURCE 80 #define SIGIO 23 /* input/output possible signal */ 81 #define SIGXCPU 24 /* exceeded CPU time limit */ 82 #define SIGXFSZ 25 /* exceeded file size limit */ 83 #define SIGVTALRM 26 /* virtual time alarm */ 84 #define SIGPROF 27 /* profiling time alarm */ 85 #define SIGWINCH 28 /* window size changes */ 86 #define SIGINFO 29 /* information request */ 87 #endif 88 #define SIGUSR1 30 /* user defined signal 1 */ 89 #define SIGUSR2 31 /* user defined signal 2 */ 90 91 #include <sys/cdefs.h> 92 93 #ifndef _POSIX_SOURCE 94 typedef void (*sig_t) __P((int)); 95 #endif 96 97 typedef void (*__sighandler_t) __P((int)); 98 typedef unsigned int sigset_t; 99 100 __BEGIN_DECLS 101 int sigaddset __P((sigset_t *, int)); 102 int sigdelset __P((sigset_t *, int)); 103 int sigemptyset __P((sigset_t *)); 104 int sigfillset __P((sigset_t *)); 105 int sigismember __P((const sigset_t *, int)); 106 __END_DECLS 107 108 #define sigemptyset(set) ( *(set) = 0 ) 109 #define sigfillset(set) ( *(set) = ~(sigset_t)0, 0 ) 110 111 /* 112 * Signal vector "template" used in sigaction call. 113 */ 114 struct sigaction { 115 __sighandler_t sa_handler; /* signal handler */ 116 sigset_t sa_mask; /* signal mask to apply */ 117 int sa_flags; /* see signal options below */ 118 }; 119 #ifndef _POSIX_SOURCE 120 #define SA_ONSTACK 0x0001 /* take signal on signal stack */ 121 #define SA_RESTART 0x0002 /* do not restart system on signal return */ 122 #endif 123 #define SA_NOCLDSTOP 0x0004 /* do not generate SIGCHLD on child stop */ 124 125 /* 126 * Flags for sigprocmask: 127 */ 128 #define SIG_BLOCK 1 /* block specified signal set */ 129 #define SIG_UNBLOCK 2 /* unblock specified signal set */ 130 #define SIG_SETMASK 3 /* set specified signal set */ 131 132 #if /* !defined(KERNEL) && */ !defined(_POSIX_SOURCE) 133 /* 134 * 4.3 compatibility: 135 * Signal vector "template" used in sigvec call. 136 */ 137 struct sigvec { 138 void (*sv_handler)(); /* signal handler */ 139 int sv_mask; /* signal mask to apply */ 140 int sv_flags; /* see signal options below */ 141 }; 142 #define SV_ONSTACK SA_ONSTACK 143 #define SV_INTERRUPT SA_RESTART /* same bit, opposite sense */ 144 #define sv_onstack sv_flags /* isn't compatibility wonderful! */ 145 146 /* 147 * Structure used in sigaltstack call. 148 */ 149 struct sigaltstack { 150 char *ss_base; /* signal stack base */ 151 int ss_len; /* signal stack length */ 152 int ss_onstack; /* current status */ 153 }; 154 155 /* 156 * Structure used in sigstack call. 157 */ 158 struct sigstack { 159 char *ss_sp; /* signal stack pointer */ 160 int ss_onstack; /* current status */ 161 }; 162 163 /* 164 * Information pushed on stack when a signal is delivered. 165 * This is used by the kernel to restore state following 166 * execution of the signal handler. It is also made available 167 * to the handler to allow it to restore state properly if 168 * a non-standard exit is performed. 169 */ 170 struct sigcontext { 171 int sc_onstack; /* sigstack state to restore */ 172 int sc_mask; /* signal mask to restore */ 173 int sc_sp; /* sp to restore */ 174 int sc_fp; /* fp to restore */ 175 int sc_ap; /* ap to restore */ 176 int sc_pc; /* pc to restore */ 177 int sc_ps; /* psl to restore */ 178 }; 179 180 /* 181 * Macro for converting signal number to a mask suitable for 182 * sigblock(). 183 */ 184 #define sigmask(m) (1 << ((m)-1)) 185 186 #define BADSIG ((__sighandler_t) -1) 187 #endif /* _POSIX_SOURCE */ 188 189 #define SIG_DFL ((__sighandler_t) 0) 190 #define SIG_IGN ((__sighandler_t) 1) 191 192 #ifndef KERNEL 193 #include <sys/types.h> 194 195 __BEGIN_DECLS 196 /*void (*signal __P((int, void (*) __P((int))))) __P((int));*/ 197 __sighandler_t signal __P((int, __sighandler_t)); 198 int raise __P((int)); 199 #ifndef _ANSI_SOURCE 200 int kill __P((pid_t, int)); 201 int sigaction __P((int, const struct sigaction *, struct sigaction *)); 202 int sigpending __P((sigset_t *)); 203 int sigprocmask __P((int, const sigset_t *, sigset_t *)); 204 int sigsuspend __P((const sigset_t *)); 205 #endif /* !_ANSI_SOURCE */ 206 #if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE) 207 int killpg __P((pid_t, int)); 208 void psignal __P((unsigned, const char *)); 209 int sigblock __P((int)); 210 int siginterrupt __P((int, int)); 211 int sigpause __P((int)); 212 int sigreturn __P((struct sigcontext *)); 213 int sigsetmask __P((int)); 214 int sigstack __P((const struct sigstack *, struct sigstack *)); 215 int sigvec __P((int, struct sigvec *, struct sigvec *)); 216 #endif /* !_ANSI_SOURCE && !_POSIX_SOURCE */ 217 __END_DECLS 218 219 #endif /* !KERNEL */ 220 #endif /* !_SIGNAL_H_ */ 221