home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 4 / hacker04 / 04_HACK04.ISO / darwin / darwinx86.iso / usr / include / sys / signalvar.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-09-30  |  7.6 KB  |  224 lines

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