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