|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights ! 7: * Reserved. This file contains Original Code and/or Modifications of ! 8: * Original Code as defined in and that are subject to the Apple Public ! 9: * Source License Version 1.1 (the "License"). You may not use this file ! 10: * except in compliance with the License. Please obtain a copy of the ! 11: * License at http://www.apple.com/publicsource and read it before using ! 12: * this file. ! 13: * ! 14: * The Original Code and all software distributed under the License are ! 15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 19: * License for the specific language governing rights and limitations ! 20: * under the License. ! 21: * ! 22: * @APPLE_LICENSE_HEADER_END@ ! 23: */ ! 24: ! 25: /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */ ! 26: /* ! 27: * Copyright (c) 1991, 1993 ! 28: * The Regents of the University of California. All rights reserved. ! 29: * ! 30: * Redistribution and use in source and binary forms, with or without ! 31: * modification, are permitted provided that the following conditions ! 32: * are met: ! 33: * 1. Redistributions of source code must retain the above copyright ! 34: * notice, this list of conditions and the following disclaimer. ! 35: * 2. Redistributions in binary form must reproduce the above copyright ! 36: * notice, this list of conditions and the following disclaimer in the ! 37: * documentation and/or other materials provided with the distribution. ! 38: * 3. All advertising materials mentioning features or use of this software ! 39: * must display the following acknowledgement: ! 40: * This product includes software developed by the University of ! 41: * California, Berkeley and its contributors. ! 42: * 4. Neither the name of the University nor the names of its contributors ! 43: * may be used to endorse or promote products derived from this software ! 44: * without specific prior written permission. ! 45: * ! 46: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ! 47: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! 48: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! 49: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ! 50: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! 51: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! 52: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 53: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! 54: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! 55: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! 56: * SUCH DAMAGE. ! 57: * ! 58: * @(#)signalvar.h 8.6 (Berkeley) 2/19/95 ! 59: */ ! 60: ! 61: #ifndef _SYS_SIGNALVAR_H_ /* tmp for user.h */ ! 62: #define _SYS_SIGNALVAR_H_ ! 63: ! 64: /* ! 65: * Kernel signal definitions and data structures, ! 66: * not exported to user programs. ! 67: */ ! 68: ! 69: /* ! 70: * Process signal actions and state, needed only within the process ! 71: * (not necessarily resident). ! 72: */ ! 73: struct sigacts { ! 74: sig_t ps_sigact[NSIG]; /* disposition of signals */ ! 75: sigset_t ps_catchmask[NSIG]; /* signals to be blocked */ ! 76: sigset_t ps_sigonstack; /* signals to take on sigstack */ ! 77: sigset_t ps_sigintr; /* signals that interrupt syscalls */ ! 78: sigset_t ps_oldmask; /* saved mask from before sigpause */ ! 79: int ps_flags; /* signal flags, below */ ! 80: struct sigaltstack ps_sigstk; /* sp & on stack state variable */ ! 81: int ps_sig; /* for core dump/debugger XXX */ ! 82: int ps_code; /* for core dump/debugger XXX */ ! 83: int ps_addr; /* for core dump/debugger XXX */ ! 84: sigset_t ps_usertramp; /* SunOS compat; libc sigtramp XXX */ ! 85: }; ! 86: ! 87: /* signal flags */ ! 88: #define SAS_OLDMASK 0x01 /* need to restore mask before pause */ ! 89: #define SAS_ALTSTACK 0x02 /* have alternate signal stack */ ! 90: ! 91: /* additional signal action values, used only temporarily/internally */ ! 92: #define SIG_CATCH (void (*)())2 ! 93: #define SIG_HOLD (void (*)())3 ! 94: ! 95: /* ! 96: * get signal action for process and signal; currently only for current process ! 97: */ ! 98: #define SIGACTION(p, sig) (p->p_sigacts->ps_sigact[(sig)]) ! 99: ! 100: /* ! 101: * Determine signal that should be delivered to process p, the current ! 102: * process, 0 if none. If there is a pending stop signal with default ! 103: * action, the process stops in issig(). ! 104: */ ! 105: #define CURSIG(p) \ ! 106: (((p)->p_siglist == 0 || \ ! 107: ((p)->p_flag & P_TRACED) == 0 && \ ! 108: ((p)->p_siglist & ~(p)->p_sigmask) == 0) ? \ ! 109: 0 : issignal(p)) ! 110: ! 111: #define HAVE_SIGNALS(p) \ ! 112: ((p)->p_siglist \ ! 113: & ~((((p)->p_sigmask) \ ! 114: | (((p)->p_flag & P_TRACED) ? 0 : (p)->p_sigignore)) \ ! 115: & ~sigcantmask)) ! 116: ! 117: /* ! 118: * Check for per-process and per thread signals. ! 119: */ ! 120: #define SHOULDissignal(p,uthreadp) \ ! 121: (((p)->p_siglist | (uthreadp)->uu_sig) \ ! 122: & ~((((p)->p_sigmask) \ ! 123: | (((p)->p_flag & P_TRACED) ? 0 : (p)->p_sigignore)) \ ! 124: & ~sigcantmask)) ! 125: ! 126: /* ! 127: * Check for signals and per-thread signals. ! 128: * Use in trap() and syscall() before ! 129: * exiting kernel. ! 130: */ ! 131: #define CHECK_SIGNALS(p, thread, uthreadp) \ ! 132: (!thread_should_halt(thread) \ ! 133: && (SHOULDissignal(p,uthreadp))) ! 134: ! 135: ! 136: /* ! 137: * Clear a pending signal from a process. ! 138: */ ! 139: #define CLRSIG(p, sig) { (p)->p_siglist &= ~sigmask(sig); } ! 140: ! 141: /* ! 142: * Signal properties and actions. ! 143: * The array below categorizes the signals and their default actions ! 144: * according to the following properties: ! 145: */ ! 146: #define SA_KILL 0x01 /* terminates process by default */ ! 147: #define SA_CORE 0x02 /* ditto and coredumps */ ! 148: #define SA_STOP 0x04 /* suspend process */ ! 149: #define SA_TTYSTOP 0x08 /* ditto, from tty */ ! 150: #define SA_IGNORE 0x10 /* ignore by default */ ! 151: #define SA_CONT 0x20 /* continue if suspended */ ! 152: #define SA_CANTMASK 0x40 /* non-maskable, catchable */ ! 153: ! 154: #ifdef SIGPROP ! 155: int sigprop[NSIG + 1] = { ! 156: 0, /* unused */ ! 157: SA_KILL, /* SIGHUP */ ! 158: SA_KILL, /* SIGINT */ ! 159: SA_KILL|SA_CORE, /* SIGQUIT */ ! 160: SA_KILL|SA_CORE, /* SIGILL */ ! 161: SA_KILL|SA_CORE, /* SIGTRAP */ ! 162: SA_KILL|SA_CORE, /* SIGABRT */ ! 163: SA_KILL|SA_CORE, /* SIGEMT */ ! 164: SA_KILL|SA_CORE, /* SIGFPE */ ! 165: SA_KILL, /* SIGKILL */ ! 166: SA_KILL|SA_CORE, /* SIGBUS */ ! 167: SA_KILL|SA_CORE, /* SIGSEGV */ ! 168: SA_KILL|SA_CORE, /* SIGSYS */ ! 169: SA_KILL, /* SIGPIPE */ ! 170: SA_KILL, /* SIGALRM */ ! 171: SA_KILL, /* SIGTERM */ ! 172: SA_IGNORE, /* SIGURG */ ! 173: SA_STOP, /* SIGSTOP */ ! 174: SA_STOP|SA_TTYSTOP, /* SIGTSTP */ ! 175: SA_IGNORE|SA_CONT, /* SIGCONT */ ! 176: SA_IGNORE, /* SIGCHLD */ ! 177: SA_STOP|SA_TTYSTOP, /* SIGTTIN */ ! 178: SA_STOP|SA_TTYSTOP, /* SIGTTOU */ ! 179: SA_IGNORE, /* SIGIO */ ! 180: SA_KILL, /* SIGXCPU */ ! 181: SA_KILL, /* SIGXFSZ */ ! 182: SA_KILL, /* SIGVTALRM */ ! 183: SA_KILL, /* SIGPROF */ ! 184: SA_IGNORE, /* SIGWINCH */ ! 185: SA_IGNORE, /* SIGINFO */ ! 186: SA_KILL, /* SIGUSR1 */ ! 187: SA_KILL, /* SIGUSR2 */ ! 188: }; ! 189: ! 190: #define contsigmask (sigmask(SIGCONT)) ! 191: #define stopsigmask (sigmask(SIGSTOP) | sigmask(SIGTSTP) | \ ! 192: sigmask(SIGTTIN) | sigmask(SIGTTOU)) ! 193: ! 194: #endif /* SIGPROP */ ! 195: ! 196: #define sigcantmask (sigmask(SIGKILL) | sigmask(SIGSTOP)) ! 197: ! 198: #ifdef _KERNEL ! 199: /* ! 200: * Machine-independent functions: ! 201: */ ! 202: int coredump __P((struct proc *p)); ! 203: void execsigs __P((struct proc *p)); ! 204: void gsignal __P((int pgid, int sig)); ! 205: int issig __P((struct proc *p)); ! 206: void pgsignal __P((struct pgrp *pgrp, int sig, int checkctty)); ! 207: void postsig __P((int sig)); ! 208: void psignal __P((struct proc *p, int sig)); ! 209: void siginit __P((struct proc *p)); ! 210: void trapsignal __P((struct proc *p, int sig, unsigned code)); ! 211: ! 212: /* ! 213: * Machine-dependent functions: ! 214: */ ! 215: void sendsig __P((struct proc *, sig_t action, int sig, int returnmask, u_long code)); ! 216: #endif /* _KERNEL */ ! 217: #endif /* !_SYS_SIGNALVAR_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.