1*4a5d661aSToomas Soome /*- 2*4a5d661aSToomas Soome * Copyright (c) 1982, 1986, 1989, 1991, 1993 3*4a5d661aSToomas Soome * The Regents of the University of California. All rights reserved. 4*4a5d661aSToomas Soome * (c) UNIX System Laboratories, Inc. 5*4a5d661aSToomas Soome * All or some portions of this file are derived from material licensed 6*4a5d661aSToomas Soome * to the University of California by American Telephone and Telegraph 7*4a5d661aSToomas Soome * Co. or Unix System Laboratories, Inc. and are reproduced herein with 8*4a5d661aSToomas Soome * the permission of UNIX System Laboratories, Inc. 9*4a5d661aSToomas Soome * 10*4a5d661aSToomas Soome * Redistribution and use in source and binary forms, with or without 11*4a5d661aSToomas Soome * modification, are permitted provided that the following conditions 12*4a5d661aSToomas Soome * are met: 13*4a5d661aSToomas Soome * 1. Redistributions of source code must retain the above copyright 14*4a5d661aSToomas Soome * notice, this list of conditions and the following disclaimer. 15*4a5d661aSToomas Soome * 2. Redistributions in binary form must reproduce the above copyright 16*4a5d661aSToomas Soome * notice, this list of conditions and the following disclaimer in the 17*4a5d661aSToomas Soome * documentation and/or other materials provided with the distribution. 18*4a5d661aSToomas Soome * 4. Neither the name of the University nor the names of its contributors 19*4a5d661aSToomas Soome * may be used to endorse or promote products derived from this software 20*4a5d661aSToomas Soome * without specific prior written permission. 21*4a5d661aSToomas Soome * 22*4a5d661aSToomas Soome * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 23*4a5d661aSToomas Soome * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24*4a5d661aSToomas Soome * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25*4a5d661aSToomas Soome * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 26*4a5d661aSToomas Soome * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27*4a5d661aSToomas Soome * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28*4a5d661aSToomas Soome * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29*4a5d661aSToomas Soome * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30*4a5d661aSToomas Soome * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31*4a5d661aSToomas Soome * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32*4a5d661aSToomas Soome * SUCH DAMAGE. 33*4a5d661aSToomas Soome * 34*4a5d661aSToomas Soome * @(#)signal.h 8.4 (Berkeley) 5/4/95 35*4a5d661aSToomas Soome * $FreeBSD$ 36*4a5d661aSToomas Soome */ 37*4a5d661aSToomas Soome 38*4a5d661aSToomas Soome #ifndef _SYS_SIGNAL_H_ 39*4a5d661aSToomas Soome #define _SYS_SIGNAL_H_ 40*4a5d661aSToomas Soome 41*4a5d661aSToomas Soome #include <sys/cdefs.h> 42*4a5d661aSToomas Soome #include <sys/_types.h> 43*4a5d661aSToomas Soome #include <sys/_sigset.h> 44*4a5d661aSToomas Soome 45*4a5d661aSToomas Soome #include <machine/_limits.h> /* __MINSIGSTKSZ */ 46*4a5d661aSToomas Soome #include <machine/signal.h> /* sig_atomic_t; trap codes; sigcontext */ 47*4a5d661aSToomas Soome 48*4a5d661aSToomas Soome /* 49*4a5d661aSToomas Soome * System defined signals. 50*4a5d661aSToomas Soome */ 51*4a5d661aSToomas Soome #if __POSIX_VISIBLE || __XSI_VISIBLE 52*4a5d661aSToomas Soome #define SIGHUP 1 /* hangup */ 53*4a5d661aSToomas Soome #endif 54*4a5d661aSToomas Soome #define SIGINT 2 /* interrupt */ 55*4a5d661aSToomas Soome #if __POSIX_VISIBLE || __XSI_VISIBLE 56*4a5d661aSToomas Soome #define SIGQUIT 3 /* quit */ 57*4a5d661aSToomas Soome #endif 58*4a5d661aSToomas Soome #define SIGILL 4 /* illegal instr. (not reset when caught) */ 59*4a5d661aSToomas Soome #if __XSI_VISIBLE 60*4a5d661aSToomas Soome #define SIGTRAP 5 /* trace trap (not reset when caught) */ 61*4a5d661aSToomas Soome #endif 62*4a5d661aSToomas Soome #define SIGABRT 6 /* abort() */ 63*4a5d661aSToomas Soome #if __BSD_VISIBLE 64*4a5d661aSToomas Soome #define SIGIOT SIGABRT /* compatibility */ 65*4a5d661aSToomas Soome #define SIGEMT 7 /* EMT instruction */ 66*4a5d661aSToomas Soome #endif 67*4a5d661aSToomas Soome #define SIGFPE 8 /* floating point exception */ 68*4a5d661aSToomas Soome #if __POSIX_VISIBLE || __XSI_VISIBLE 69*4a5d661aSToomas Soome #define SIGKILL 9 /* kill (cannot be caught or ignored) */ 70*4a5d661aSToomas Soome #endif 71*4a5d661aSToomas Soome #if __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE 72*4a5d661aSToomas Soome #define SIGBUS 10 /* bus error */ 73*4a5d661aSToomas Soome #endif 74*4a5d661aSToomas Soome #define SIGSEGV 11 /* segmentation violation */ 75*4a5d661aSToomas Soome #if __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE 76*4a5d661aSToomas Soome #define SIGSYS 12 /* non-existent system call invoked */ 77*4a5d661aSToomas Soome #endif 78*4a5d661aSToomas Soome #if __POSIX_VISIBLE || __XSI_VISIBLE 79*4a5d661aSToomas Soome #define SIGPIPE 13 /* write on a pipe with no one to read it */ 80*4a5d661aSToomas Soome #define SIGALRM 14 /* alarm clock */ 81*4a5d661aSToomas Soome #endif 82*4a5d661aSToomas Soome #define SIGTERM 15 /* software termination signal from kill */ 83*4a5d661aSToomas Soome #if __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE 84*4a5d661aSToomas Soome #define SIGURG 16 /* urgent condition on IO channel */ 85*4a5d661aSToomas Soome #endif 86*4a5d661aSToomas Soome #if __POSIX_VISIBLE || __XSI_VISIBLE 87*4a5d661aSToomas Soome #define SIGSTOP 17 /* sendable stop signal not from tty */ 88*4a5d661aSToomas Soome #define SIGTSTP 18 /* stop signal from tty */ 89*4a5d661aSToomas Soome #define SIGCONT 19 /* continue a stopped process */ 90*4a5d661aSToomas Soome #define SIGCHLD 20 /* to parent on child stop or exit */ 91*4a5d661aSToomas Soome #define SIGTTIN 21 /* to readers pgrp upon background tty read */ 92*4a5d661aSToomas Soome #define SIGTTOU 22 /* like TTIN if (tp->t_local<OSTOP) */ 93*4a5d661aSToomas Soome #endif 94*4a5d661aSToomas Soome #if __BSD_VISIBLE 95*4a5d661aSToomas Soome #define SIGIO 23 /* input/output possible signal */ 96*4a5d661aSToomas Soome #endif 97*4a5d661aSToomas Soome #if __XSI_VISIBLE 98*4a5d661aSToomas Soome #define SIGXCPU 24 /* exceeded CPU time limit */ 99*4a5d661aSToomas Soome #define SIGXFSZ 25 /* exceeded file size limit */ 100*4a5d661aSToomas Soome #define SIGVTALRM 26 /* virtual time alarm */ 101*4a5d661aSToomas Soome #define SIGPROF 27 /* profiling time alarm */ 102*4a5d661aSToomas Soome #endif 103*4a5d661aSToomas Soome #if __BSD_VISIBLE 104*4a5d661aSToomas Soome #define SIGWINCH 28 /* window size changes */ 105*4a5d661aSToomas Soome #define SIGINFO 29 /* information request */ 106*4a5d661aSToomas Soome #endif 107*4a5d661aSToomas Soome #if __POSIX_VISIBLE || __XSI_VISIBLE 108*4a5d661aSToomas Soome #define SIGUSR1 30 /* user defined signal 1 */ 109*4a5d661aSToomas Soome #define SIGUSR2 31 /* user defined signal 2 */ 110*4a5d661aSToomas Soome #endif 111*4a5d661aSToomas Soome #if __BSD_VISIBLE 112*4a5d661aSToomas Soome #define SIGTHR 32 /* reserved by thread library. */ 113*4a5d661aSToomas Soome #define SIGLWP SIGTHR 114*4a5d661aSToomas Soome #define SIGLIBRT 33 /* reserved by real-time library. */ 115*4a5d661aSToomas Soome #endif 116*4a5d661aSToomas Soome 117*4a5d661aSToomas Soome #define SIGRTMIN 65 118*4a5d661aSToomas Soome #define SIGRTMAX 126 119*4a5d661aSToomas Soome 120*4a5d661aSToomas Soome #define SIG_DFL ((__sighandler_t *)0) 121*4a5d661aSToomas Soome #define SIG_IGN ((__sighandler_t *)1) 122*4a5d661aSToomas Soome #define SIG_ERR ((__sighandler_t *)-1) 123*4a5d661aSToomas Soome /* #define SIG_CATCH ((__sighandler_t *)2) See signalvar.h */ 124*4a5d661aSToomas Soome #define SIG_HOLD ((__sighandler_t *)3) 125*4a5d661aSToomas Soome 126*4a5d661aSToomas Soome /* 127*4a5d661aSToomas Soome * Type of a signal handling function. 128*4a5d661aSToomas Soome * 129*4a5d661aSToomas Soome * Language spec sez signal handlers take exactly one arg, even though we 130*4a5d661aSToomas Soome * actually supply three. Ugh! 131*4a5d661aSToomas Soome * 132*4a5d661aSToomas Soome * We don't try to hide the difference by leaving out the args because 133*4a5d661aSToomas Soome * that would cause warnings about conformant programs. Nonconformant 134*4a5d661aSToomas Soome * programs can avoid the warnings by casting to (__sighandler_t *) or 135*4a5d661aSToomas Soome * sig_t before calling signal() or assigning to sa_handler or sv_handler. 136*4a5d661aSToomas Soome * 137*4a5d661aSToomas Soome * The kernel should reverse the cast before calling the function. It 138*4a5d661aSToomas Soome * has no way to do this, but on most machines 1-arg and 3-arg functions 139*4a5d661aSToomas Soome * have the same calling protocol so there is no problem in practice. 140*4a5d661aSToomas Soome * A bit in sa_flags could be used to specify the number of args. 141*4a5d661aSToomas Soome */ 142*4a5d661aSToomas Soome typedef void __sighandler_t(int); 143*4a5d661aSToomas Soome 144*4a5d661aSToomas Soome #if __POSIX_VISIBLE || __XSI_VISIBLE 145*4a5d661aSToomas Soome #ifndef _SIGSET_T_DECLARED 146*4a5d661aSToomas Soome #define _SIGSET_T_DECLARED 147*4a5d661aSToomas Soome typedef __sigset_t sigset_t; 148*4a5d661aSToomas Soome #endif 149*4a5d661aSToomas Soome #endif 150*4a5d661aSToomas Soome 151*4a5d661aSToomas Soome #if __POSIX_VISIBLE >= 199309 || __XSI_VISIBLE >= 500 152*4a5d661aSToomas Soome union sigval { 153*4a5d661aSToomas Soome /* Members as suggested by Annex C of POSIX 1003.1b. */ 154*4a5d661aSToomas Soome int sival_int; 155*4a5d661aSToomas Soome void *sival_ptr; 156*4a5d661aSToomas Soome /* 6.0 compatibility */ 157*4a5d661aSToomas Soome int sigval_int; 158*4a5d661aSToomas Soome void *sigval_ptr; 159*4a5d661aSToomas Soome }; 160*4a5d661aSToomas Soome #endif 161*4a5d661aSToomas Soome 162*4a5d661aSToomas Soome #if __POSIX_VISIBLE >= 199309 163*4a5d661aSToomas Soome struct sigevent { 164*4a5d661aSToomas Soome int sigev_notify; /* Notification type */ 165*4a5d661aSToomas Soome int sigev_signo; /* Signal number */ 166*4a5d661aSToomas Soome union sigval sigev_value; /* Signal value */ 167*4a5d661aSToomas Soome union { 168*4a5d661aSToomas Soome __lwpid_t _threadid; 169*4a5d661aSToomas Soome struct { 170*4a5d661aSToomas Soome void (*_function)(union sigval); 171*4a5d661aSToomas Soome void *_attribute; /* pthread_attr_t * */ 172*4a5d661aSToomas Soome } _sigev_thread; 173*4a5d661aSToomas Soome unsigned short _kevent_flags; 174*4a5d661aSToomas Soome long __spare__[8]; 175*4a5d661aSToomas Soome } _sigev_un; 176*4a5d661aSToomas Soome }; 177*4a5d661aSToomas Soome 178*4a5d661aSToomas Soome #if __BSD_VISIBLE 179*4a5d661aSToomas Soome #define sigev_notify_kqueue sigev_signo 180*4a5d661aSToomas Soome #define sigev_notify_kevent_flags _sigev_un._kevent_flags 181*4a5d661aSToomas Soome #define sigev_notify_thread_id _sigev_un._threadid 182*4a5d661aSToomas Soome #endif 183*4a5d661aSToomas Soome #define sigev_notify_function _sigev_un._sigev_thread._function 184*4a5d661aSToomas Soome #define sigev_notify_attributes _sigev_un._sigev_thread._attribute 185*4a5d661aSToomas Soome 186*4a5d661aSToomas Soome #define SIGEV_NONE 0 /* No async notification. */ 187*4a5d661aSToomas Soome #define SIGEV_SIGNAL 1 /* Generate a queued signal. */ 188*4a5d661aSToomas Soome #define SIGEV_THREAD 2 /* Call back from another pthread. */ 189*4a5d661aSToomas Soome #if __BSD_VISIBLE 190*4a5d661aSToomas Soome #define SIGEV_KEVENT 3 /* Generate a kevent. */ 191*4a5d661aSToomas Soome #define SIGEV_THREAD_ID 4 /* Send signal to a kernel thread. */ 192*4a5d661aSToomas Soome #endif 193*4a5d661aSToomas Soome #endif /* __POSIX_VISIBLE >= 199309 */ 194*4a5d661aSToomas Soome 195*4a5d661aSToomas Soome #if __POSIX_VISIBLE >= 199309 || __XSI_VISIBLE 196*4a5d661aSToomas Soome typedef struct __siginfo { 197*4a5d661aSToomas Soome int si_signo; /* signal number */ 198*4a5d661aSToomas Soome int si_errno; /* errno association */ 199*4a5d661aSToomas Soome /* 200*4a5d661aSToomas Soome * Cause of signal, one of the SI_ macros or signal-specific 201*4a5d661aSToomas Soome * values, i.e. one of the FPE_... values for SIGFPE. This 202*4a5d661aSToomas Soome * value is equivalent to the second argument to an old-style 203*4a5d661aSToomas Soome * FreeBSD signal handler. 204*4a5d661aSToomas Soome */ 205*4a5d661aSToomas Soome int si_code; /* signal code */ 206*4a5d661aSToomas Soome __pid_t si_pid; /* sending process */ 207*4a5d661aSToomas Soome __uid_t si_uid; /* sender's ruid */ 208*4a5d661aSToomas Soome int si_status; /* exit value */ 209*4a5d661aSToomas Soome void *si_addr; /* faulting instruction */ 210*4a5d661aSToomas Soome union sigval si_value; /* signal value */ 211*4a5d661aSToomas Soome union { 212*4a5d661aSToomas Soome struct { 213*4a5d661aSToomas Soome int _trapno;/* machine specific trap code */ 214*4a5d661aSToomas Soome } _fault; 215*4a5d661aSToomas Soome struct { 216*4a5d661aSToomas Soome int _timerid; 217*4a5d661aSToomas Soome int _overrun; 218*4a5d661aSToomas Soome } _timer; 219*4a5d661aSToomas Soome struct { 220*4a5d661aSToomas Soome int _mqd; 221*4a5d661aSToomas Soome } _mesgq; 222*4a5d661aSToomas Soome struct { 223*4a5d661aSToomas Soome long _band; /* band event for SIGPOLL */ 224*4a5d661aSToomas Soome } _poll; /* was this ever used ? */ 225*4a5d661aSToomas Soome struct { 226*4a5d661aSToomas Soome long __spare1__; 227*4a5d661aSToomas Soome int __spare2__[7]; 228*4a5d661aSToomas Soome } __spare__; 229*4a5d661aSToomas Soome } _reason; 230*4a5d661aSToomas Soome } siginfo_t; 231*4a5d661aSToomas Soome 232*4a5d661aSToomas Soome #define si_trapno _reason._fault._trapno 233*4a5d661aSToomas Soome #define si_timerid _reason._timer._timerid 234*4a5d661aSToomas Soome #define si_overrun _reason._timer._overrun 235*4a5d661aSToomas Soome #define si_mqd _reason._mesgq._mqd 236*4a5d661aSToomas Soome #define si_band _reason._poll._band 237*4a5d661aSToomas Soome 238*4a5d661aSToomas Soome /** si_code **/ 239*4a5d661aSToomas Soome /* codes for SIGILL */ 240*4a5d661aSToomas Soome #define ILL_ILLOPC 1 /* Illegal opcode. */ 241*4a5d661aSToomas Soome #define ILL_ILLOPN 2 /* Illegal operand. */ 242*4a5d661aSToomas Soome #define ILL_ILLADR 3 /* Illegal addressing mode. */ 243*4a5d661aSToomas Soome #define ILL_ILLTRP 4 /* Illegal trap. */ 244*4a5d661aSToomas Soome #define ILL_PRVOPC 5 /* Privileged opcode. */ 245*4a5d661aSToomas Soome #define ILL_PRVREG 6 /* Privileged register. */ 246*4a5d661aSToomas Soome #define ILL_COPROC 7 /* Coprocessor error. */ 247*4a5d661aSToomas Soome #define ILL_BADSTK 8 /* Internal stack error. */ 248*4a5d661aSToomas Soome 249*4a5d661aSToomas Soome /* codes for SIGBUS */ 250*4a5d661aSToomas Soome #define BUS_ADRALN 1 /* Invalid address alignment. */ 251*4a5d661aSToomas Soome #define BUS_ADRERR 2 /* Nonexistent physical address. */ 252*4a5d661aSToomas Soome #define BUS_OBJERR 3 /* Object-specific hardware error. */ 253*4a5d661aSToomas Soome 254*4a5d661aSToomas Soome /* codes for SIGSEGV */ 255*4a5d661aSToomas Soome #define SEGV_MAPERR 1 /* Address not mapped to object. */ 256*4a5d661aSToomas Soome #define SEGV_ACCERR 2 /* Invalid permissions for mapped */ 257*4a5d661aSToomas Soome /* object. */ 258*4a5d661aSToomas Soome 259*4a5d661aSToomas Soome /* codes for SIGFPE */ 260*4a5d661aSToomas Soome #define FPE_INTOVF 1 /* Integer overflow. */ 261*4a5d661aSToomas Soome #define FPE_INTDIV 2 /* Integer divide by zero. */ 262*4a5d661aSToomas Soome #define FPE_FLTDIV 3 /* Floating point divide by zero. */ 263*4a5d661aSToomas Soome #define FPE_FLTOVF 4 /* Floating point overflow. */ 264*4a5d661aSToomas Soome #define FPE_FLTUND 5 /* Floating point underflow. */ 265*4a5d661aSToomas Soome #define FPE_FLTRES 6 /* Floating point inexact result. */ 266*4a5d661aSToomas Soome #define FPE_FLTINV 7 /* Invalid floating point operation. */ 267*4a5d661aSToomas Soome #define FPE_FLTSUB 8 /* Subscript out of range. */ 268*4a5d661aSToomas Soome 269*4a5d661aSToomas Soome /* codes for SIGTRAP */ 270*4a5d661aSToomas Soome #define TRAP_BRKPT 1 /* Process breakpoint. */ 271*4a5d661aSToomas Soome #define TRAP_TRACE 2 /* Process trace trap. */ 272*4a5d661aSToomas Soome #define TRAP_DTRACE 3 /* DTrace induced trap. */ 273*4a5d661aSToomas Soome 274*4a5d661aSToomas Soome /* codes for SIGCHLD */ 275*4a5d661aSToomas Soome #define CLD_EXITED 1 /* Child has exited */ 276*4a5d661aSToomas Soome #define CLD_KILLED 2 /* Child has terminated abnormally but */ 277*4a5d661aSToomas Soome /* did not create a core file */ 278*4a5d661aSToomas Soome #define CLD_DUMPED 3 /* Child has terminated abnormally and */ 279*4a5d661aSToomas Soome /* created a core file */ 280*4a5d661aSToomas Soome #define CLD_TRAPPED 4 /* Traced child has trapped */ 281*4a5d661aSToomas Soome #define CLD_STOPPED 5 /* Child has stopped */ 282*4a5d661aSToomas Soome #define CLD_CONTINUED 6 /* Stopped child has continued */ 283*4a5d661aSToomas Soome 284*4a5d661aSToomas Soome /* codes for SIGPOLL */ 285*4a5d661aSToomas Soome #define POLL_IN 1 /* Data input available */ 286*4a5d661aSToomas Soome #define POLL_OUT 2 /* Output buffers available */ 287*4a5d661aSToomas Soome #define POLL_MSG 3 /* Input message available */ 288*4a5d661aSToomas Soome #define POLL_ERR 4 /* I/O Error */ 289*4a5d661aSToomas Soome #define POLL_PRI 5 /* High priority input available */ 290*4a5d661aSToomas Soome #define POLL_HUP 6 /* Device disconnected */ 291*4a5d661aSToomas Soome 292*4a5d661aSToomas Soome #endif 293*4a5d661aSToomas Soome 294*4a5d661aSToomas Soome #if __POSIX_VISIBLE || __XSI_VISIBLE 295*4a5d661aSToomas Soome struct __siginfo; 296*4a5d661aSToomas Soome 297*4a5d661aSToomas Soome /* 298*4a5d661aSToomas Soome * Signal vector "template" used in sigaction call. 299*4a5d661aSToomas Soome */ 300*4a5d661aSToomas Soome struct sigaction { 301*4a5d661aSToomas Soome union { 302*4a5d661aSToomas Soome void (*__sa_handler)(int); 303*4a5d661aSToomas Soome void (*__sa_sigaction)(int, struct __siginfo *, void *); 304*4a5d661aSToomas Soome } __sigaction_u; /* signal handler */ 305*4a5d661aSToomas Soome int sa_flags; /* see signal options below */ 306*4a5d661aSToomas Soome sigset_t sa_mask; /* signal mask to apply */ 307*4a5d661aSToomas Soome }; 308*4a5d661aSToomas Soome 309*4a5d661aSToomas Soome #define sa_handler __sigaction_u.__sa_handler 310*4a5d661aSToomas Soome #endif 311*4a5d661aSToomas Soome 312*4a5d661aSToomas Soome #if __XSI_VISIBLE 313*4a5d661aSToomas Soome /* If SA_SIGINFO is set, sa_sigaction must be used instead of sa_handler. */ 314*4a5d661aSToomas Soome #define sa_sigaction __sigaction_u.__sa_sigaction 315*4a5d661aSToomas Soome #endif 316*4a5d661aSToomas Soome 317*4a5d661aSToomas Soome #if __POSIX_VISIBLE || __XSI_VISIBLE 318*4a5d661aSToomas Soome #define SA_NOCLDSTOP 0x0008 /* do not generate SIGCHLD on child stop */ 319*4a5d661aSToomas Soome #endif /* __POSIX_VISIBLE || __XSI_VISIBLE */ 320*4a5d661aSToomas Soome 321*4a5d661aSToomas Soome #if __XSI_VISIBLE 322*4a5d661aSToomas Soome #define SA_ONSTACK 0x0001 /* take signal on signal stack */ 323*4a5d661aSToomas Soome #define SA_RESTART 0x0002 /* restart system call on signal return */ 324*4a5d661aSToomas Soome #define SA_RESETHAND 0x0004 /* reset to SIG_DFL when taking signal */ 325*4a5d661aSToomas Soome #define SA_NODEFER 0x0010 /* don't mask the signal we're delivering */ 326*4a5d661aSToomas Soome #define SA_NOCLDWAIT 0x0020 /* don't keep zombies around */ 327*4a5d661aSToomas Soome #define SA_SIGINFO 0x0040 /* signal handler with SA_SIGINFO args */ 328*4a5d661aSToomas Soome #endif 329*4a5d661aSToomas Soome 330*4a5d661aSToomas Soome #if __BSD_VISIBLE 331*4a5d661aSToomas Soome #define NSIG 32 /* number of old signals (counting 0) */ 332*4a5d661aSToomas Soome #endif 333*4a5d661aSToomas Soome 334*4a5d661aSToomas Soome #if __POSIX_VISIBLE || __XSI_VISIBLE 335*4a5d661aSToomas Soome #define SI_NOINFO 0 /* No signal info besides si_signo. */ 336*4a5d661aSToomas Soome #define SI_USER 0x10001 /* Signal sent by kill(). */ 337*4a5d661aSToomas Soome #define SI_QUEUE 0x10002 /* Signal sent by the sigqueue(). */ 338*4a5d661aSToomas Soome #define SI_TIMER 0x10003 /* Signal generated by expiration of */ 339*4a5d661aSToomas Soome /* a timer set by timer_settime(). */ 340*4a5d661aSToomas Soome #define SI_ASYNCIO 0x10004 /* Signal generated by completion of */ 341*4a5d661aSToomas Soome /* an asynchronous I/O request.*/ 342*4a5d661aSToomas Soome #define SI_MESGQ 0x10005 /* Signal generated by arrival of a */ 343*4a5d661aSToomas Soome /* message on an empty message queue. */ 344*4a5d661aSToomas Soome #define SI_KERNEL 0x10006 345*4a5d661aSToomas Soome #define SI_LWP 0x10007 /* Signal sent by thr_kill */ 346*4a5d661aSToomas Soome #endif 347*4a5d661aSToomas Soome #if __BSD_VISIBLE 348*4a5d661aSToomas Soome #define SI_UNDEFINED 0 349*4a5d661aSToomas Soome #endif 350*4a5d661aSToomas Soome 351*4a5d661aSToomas Soome #if __BSD_VISIBLE 352*4a5d661aSToomas Soome typedef __sighandler_t *sig_t; /* type of pointer to a signal function */ 353*4a5d661aSToomas Soome typedef void __siginfohandler_t(int, struct __siginfo *, void *); 354*4a5d661aSToomas Soome #endif 355*4a5d661aSToomas Soome 356*4a5d661aSToomas Soome #if __XSI_VISIBLE 357*4a5d661aSToomas Soome /* 358*4a5d661aSToomas Soome * Structure used in sigaltstack call. 359*4a5d661aSToomas Soome */ 360*4a5d661aSToomas Soome #if __BSD_VISIBLE 361*4a5d661aSToomas Soome typedef struct sigaltstack { 362*4a5d661aSToomas Soome #else 363*4a5d661aSToomas Soome typedef struct { 364*4a5d661aSToomas Soome #endif 365*4a5d661aSToomas Soome void *ss_sp; /* signal stack base */ 366*4a5d661aSToomas Soome __size_t ss_size; /* signal stack length */ 367*4a5d661aSToomas Soome int ss_flags; /* SS_DISABLE and/or SS_ONSTACK */ 368*4a5d661aSToomas Soome } stack_t; 369*4a5d661aSToomas Soome 370*4a5d661aSToomas Soome #define SS_ONSTACK 0x0001 /* take signal on alternate stack */ 371*4a5d661aSToomas Soome #define SS_DISABLE 0x0004 /* disable taking signals on alternate stack */ 372*4a5d661aSToomas Soome #define MINSIGSTKSZ __MINSIGSTKSZ /* minimum stack size */ 373*4a5d661aSToomas Soome #define SIGSTKSZ (MINSIGSTKSZ + 32768) /* recommended stack size */ 374*4a5d661aSToomas Soome #endif 375*4a5d661aSToomas Soome 376*4a5d661aSToomas Soome #if __BSD_VISIBLE 377*4a5d661aSToomas Soome /* 378*4a5d661aSToomas Soome * 4.3 compatibility: 379*4a5d661aSToomas Soome * Signal vector "template" used in sigvec call. 380*4a5d661aSToomas Soome */ 381*4a5d661aSToomas Soome struct sigvec { 382*4a5d661aSToomas Soome __sighandler_t *sv_handler; /* signal handler */ 383*4a5d661aSToomas Soome int sv_mask; /* signal mask to apply */ 384*4a5d661aSToomas Soome int sv_flags; /* see signal options below */ 385*4a5d661aSToomas Soome }; 386*4a5d661aSToomas Soome 387*4a5d661aSToomas Soome #define SV_ONSTACK SA_ONSTACK 388*4a5d661aSToomas Soome #define SV_INTERRUPT SA_RESTART /* same bit, opposite sense */ 389*4a5d661aSToomas Soome #define SV_RESETHAND SA_RESETHAND 390*4a5d661aSToomas Soome #define SV_NODEFER SA_NODEFER 391*4a5d661aSToomas Soome #define SV_NOCLDSTOP SA_NOCLDSTOP 392*4a5d661aSToomas Soome #define SV_SIGINFO SA_SIGINFO 393*4a5d661aSToomas Soome #define sv_onstack sv_flags /* isn't compatibility wonderful! */ 394*4a5d661aSToomas Soome #endif 395*4a5d661aSToomas Soome 396*4a5d661aSToomas Soome /* Keep this in one place only */ 397*4a5d661aSToomas Soome #if defined(_KERNEL) && defined(COMPAT_43) && \ 398*4a5d661aSToomas Soome !defined(__i386__) 399*4a5d661aSToomas Soome struct osigcontext { 400*4a5d661aSToomas Soome int _not_used; 401*4a5d661aSToomas Soome }; 402*4a5d661aSToomas Soome #endif 403*4a5d661aSToomas Soome 404*4a5d661aSToomas Soome #if __XSI_VISIBLE 405*4a5d661aSToomas Soome /* 406*4a5d661aSToomas Soome * Structure used in sigstack call. 407*4a5d661aSToomas Soome */ 408*4a5d661aSToomas Soome struct sigstack { 409*4a5d661aSToomas Soome void *ss_sp; /* signal stack pointer */ 410*4a5d661aSToomas Soome int ss_onstack; /* current status */ 411*4a5d661aSToomas Soome }; 412*4a5d661aSToomas Soome #endif 413*4a5d661aSToomas Soome 414*4a5d661aSToomas Soome #if __BSD_VISIBLE || __POSIX_VISIBLE > 0 && __POSIX_VISIBLE <= 200112 415*4a5d661aSToomas Soome /* 416*4a5d661aSToomas Soome * Macro for converting signal number to a mask suitable for 417*4a5d661aSToomas Soome * sigblock(). 418*4a5d661aSToomas Soome */ 419*4a5d661aSToomas Soome #define sigmask(m) (1 << ((m)-1)) 420*4a5d661aSToomas Soome #endif 421*4a5d661aSToomas Soome 422*4a5d661aSToomas Soome #if __BSD_VISIBLE 423*4a5d661aSToomas Soome #define BADSIG SIG_ERR 424*4a5d661aSToomas Soome #endif 425*4a5d661aSToomas Soome 426*4a5d661aSToomas Soome #if __POSIX_VISIBLE || __XSI_VISIBLE 427*4a5d661aSToomas Soome /* 428*4a5d661aSToomas Soome * Flags for sigprocmask: 429*4a5d661aSToomas Soome */ 430*4a5d661aSToomas Soome #define SIG_BLOCK 1 /* block specified signal set */ 431*4a5d661aSToomas Soome #define SIG_UNBLOCK 2 /* unblock specified signal set */ 432*4a5d661aSToomas Soome #define SIG_SETMASK 3 /* set specified signal set */ 433*4a5d661aSToomas Soome #endif 434*4a5d661aSToomas Soome 435*4a5d661aSToomas Soome /* 436*4a5d661aSToomas Soome * For historical reasons; programs expect signal's return value to be 437*4a5d661aSToomas Soome * defined by <sys/signal.h>. 438*4a5d661aSToomas Soome */ 439*4a5d661aSToomas Soome __BEGIN_DECLS 440*4a5d661aSToomas Soome __sighandler_t *signal(int, __sighandler_t *); 441*4a5d661aSToomas Soome __END_DECLS 442*4a5d661aSToomas Soome 443*4a5d661aSToomas Soome #endif /* !_SYS_SIGNAL_H_ */ 444