Annotation of kernel/bsd/sys/signalvar.h, revision 1.1.1.1

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_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.