williamr@2: /*- williamr@2: * Copyright (c) 1982, 1986, 1989, 1991, 1993 williamr@2: * The Regents of the University of California. All rights reserved. williamr@2: * (c) UNIX System Laboratories, Inc. williamr@2: * All or some portions of this file are derived from material licensed williamr@2: * to the University of California by American Telephone and Telegraph williamr@2: * Co. or Unix System Laboratories, Inc. and are reproduced herein with williamr@2: * the permission of UNIX System Laboratories, Inc. williamr@2: * williamr@2: * Redistribution and use in source and binary forms, with or without williamr@2: * modification, are permitted provided that the following conditions williamr@2: * are met: williamr@2: * 1. Redistributions of source code must retain the above copyright williamr@2: * notice, this list of conditions and the following disclaimer. williamr@2: * 2. Redistributions in binary form must reproduce the above copyright williamr@2: * notice, this list of conditions and the following disclaimer in the williamr@2: * documentation and/or other materials provided with the distribution. williamr@2: * 4. Neither the name of the University nor the names of its contributors williamr@2: * may be used to endorse or promote products derived from this software williamr@2: * without specific prior written permission. williamr@2: * williamr@2: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND williamr@2: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE williamr@2: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE williamr@2: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE williamr@2: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL williamr@2: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS williamr@2: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) williamr@2: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT williamr@2: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY williamr@2: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF williamr@2: * SUCH DAMAGE. williamr@2: * williamr@2: * @(#)signal.h 8.4 (Berkeley) 5/4/95 williamr@2: * $FreeBSD: src/sys/sys/signal.h,v 1.45 2004/06/11 11:43:46 phk Exp $ williamr@2: */ williamr@2: williamr@2: #ifndef _SYS_SIGNAL_H_ williamr@2: #define _SYS_SIGNAL_H_ williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@4: #include /* sig_atomic_t; trap codes; sigcontext */ williamr@2: williamr@2: /* williamr@2: * System defined signals. williamr@2: */ williamr@2: #define SIGHUP 1 /* hangup */ williamr@2: #define SIGINT 2 /* interrupt */ williamr@2: #define SIGQUIT 3 /* quit */ williamr@2: #define SIGILL 4 /* illegal instr. (not reset when caught) */ williamr@2: #define SIGTRAP 5 /* trace trap (not reset when caught) */ williamr@2: #define SIGABRT 6 /* abort() */ williamr@2: #define SIGIOT SIGABRT /* compatibility */ williamr@2: #define SIGEMT 7 /* EMT instruction */ williamr@2: #define SIGFPE 8 /* floating point exception */ williamr@2: #define SIGKILL 9 /* kill (cannot be caught or ignored) */ williamr@2: #define SIGBUS 10 /* bus error */ williamr@2: #define SIGSEGV 11 /* segmentation violation */ williamr@2: #define SIGSYS 12 /* non-existent system call invoked */ williamr@2: #define SIGPIPE 13 /* write on a pipe with no one to read it */ williamr@2: #define SIGALRM 14 /* alarm clock */ williamr@2: #define SIGTERM 15 /* software termination signal from kill */ williamr@2: #define SIGURG 16 /* urgent condition on IO channel */ williamr@2: #define SIGSTOP 17 /* sendable stop signal not from tty */ williamr@2: #define SIGTSTP 18 /* stop signal from tty */ williamr@2: #define SIGCONT 19 /* continue a stopped process */ williamr@2: #define SIGCHLD 20 /* to parent on child stop or exit */ williamr@2: #define SIGTTIN 21 /* to readers pgrp upon background tty read */ williamr@2: #define SIGTTOU 22 /* like TTIN if (tp->t_local<OSTOP) */ williamr@2: #define SIGIO 23 /* input/output possible signal */ williamr@2: #define SIGXCPU 24 /* exceeded CPU time limit */ williamr@2: #define SIGXFSZ 25 /* exceeded file size limit */ williamr@2: #define SIGVTALRM 26 /* virtual time alarm */ williamr@2: #define SIGPROF 27 /* profiling time alarm */ williamr@2: #define SIGWINCH 28 /* window size changes */ williamr@2: #define SIGINFO 29 /* information request */ williamr@2: #define SIGUSR1 30 /* user defined signal 1 */ williamr@2: #define SIGUSR2 31 /* user defined signal 2 */ williamr@2: #define SIGTHR 32 /* Thread interrupt. */ williamr@2: williamr@4: #define SIGRTMIN 33 williamr@4: #define SIGRTMAX 64 williamr@2: /* williamr@2: * XXX missing SIGRTMIN, SIGRTMAX. williamr@2: */ williamr@2: williamr@2: #define SIG_DFL ((__sighandler_t *)0) williamr@2: #define SIG_IGN ((__sighandler_t *)1) williamr@2: #define SIG_ERR ((__sighandler_t *)-1) williamr@4: #define SIG_HOLD ((__sighandler_t *)3) williamr@4: williamr@4: williamr@2: /* williamr@2: * XXX missing SIG_HOLD. williamr@2: */ williamr@2: williamr@2: /*- williamr@2: * Type of a signal handling function. williamr@2: * williamr@2: * Language spec sez signal handlers take exactly one arg, even though we williamr@2: * actually supply three. Ugh! williamr@2: * williamr@2: * We don't try to hide the difference by leaving out the args because williamr@2: * that would cause warnings about conformant programs. Nonconformant williamr@2: * programs can avoid the warnings by casting to (__sighandler_t *) or williamr@2: * sig_t before calling signal() or assigning to sa_handler or sv_handler. williamr@2: * williamr@2: * The kernel should reverse the cast before calling the function. It williamr@2: * has no way to do this, but on most machines 1-arg and 3-arg functions williamr@2: * have the same calling protocol so there is no problem in practice. williamr@2: * A bit in sa_flags could be used to specify the number of args. williamr@2: */ williamr@2: typedef void __sighandler_t(int); williamr@2: williamr@2: #ifndef _SIGSET_T_DECLARED williamr@2: #define _SIGSET_T_DECLARED williamr@4: typedef __uint64_t sigset_t; williamr@2: #endif williamr@2: williamr@2: #if __POSIX_VISIBLE || __XSI_VISIBLE williamr@4: struct __siginfo_t; williamr@2: williamr@2: /* williamr@2: * Signal vector "template" used in sigaction call. williamr@2: */ williamr@2: struct sigaction { williamr@2: union { williamr@4: void (*_sa_handler)(int); williamr@4: void (*_sa_sigaction)(int, struct __siginfo_t*, void *); williamr@4: } _sa_u; /* signal handler */ williamr@2: int sa_flags; /* see signal options below */ williamr@2: sigset_t sa_mask; /* signal mask to apply */ williamr@2: }; williamr@2: williamr@4: #define sa_handler _sa_u._sa_handler williamr@4: #define sa_sigaction _sa_u._sa_sigaction williamr@4: williamr@2: #endif williamr@2: williamr@2: #if __POSIX_VISIBLE || __XSI_VISIBLE williamr@2: #define SA_NOCLDSTOP 0x0008 /* do not generate SIGCHLD on child stop */ williamr@2: #endif /* __POSIX_VISIBLE || __XSI_VISIBLE */ williamr@2: williamr@2: #if __XSI_VISIBLE williamr@2: #define SA_ONSTACK 0x0001 /* take signal on signal stack */ williamr@2: #define SA_RESTART 0x0002 /* restart system call on signal return */ williamr@2: #define SA_RESETHAND 0x0004 /* reset to SIG_DFL when taking signal */ williamr@2: #define SA_NODEFER 0x0010 /* don't mask the signal we're delivering */ williamr@2: #define SA_NOCLDWAIT 0x0020 /* don't keep zombies around */ williamr@2: #define SA_SIGINFO 0x0040 /* signal handler with SA_SIGINFO args */ williamr@2: #endif williamr@2: williamr@2: #if __BSD_VISIBLE williamr@2: #define NSIG 32 /* number of old signals (counting 0) */ williamr@2: #endif williamr@2: williamr@2: #endif /* !_SYS_SIGNAL_H_ */