darwin-xnu/bsd/sys/signalvar.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2000-2002 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#include <sys/appleapiopts.h>
  62
  63#ifdef BSD_KERNEL_PRIVATE
  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 */
  73struct  sigacts {
  74        user_addr_t     ps_sigact[NSIG];        /* disposition of signals */
  75        user_addr_t     ps_trampact[NSIG];      /* disposition of signals */
  76        sigset_t ps_catchmask[NSIG];    /* signals to be blocked */
  77        sigset_t ps_sigonstack;         /* signals to take on sigstack */
  78        sigset_t ps_sigintr;            /* signals that interrupt syscalls */
  79        sigset_t ps_sigreset;           /* signals that reset when caught */
  80        sigset_t ps_signodefer;         /* signals not masked while handled */
  81        sigset_t ps_siginfo;            /* signals that want SA_SIGINFO args */
  82        sigset_t ps_oldmask;            /* saved mask from before sigpause */
  83        int     ps_flags;               /* signal flags, below */
  84        struct user_sigaltstack ps_sigstk;      /* sp, length & flags */
  85        int     ps_sig;                 /* for core dump/debugger XXX */
  86        int     ps_code;                /* for core dump/debugger XXX */
  87        int     ps_addr;                /* for core dump/debugger XXX */
  88        sigset_t ps_usertramp;          /* SunOS compat; libc sigtramp XXX */
  89        sigset_t ps_64regset;           /* signals that want SA_EXSIGINFO args */
  90};
  91
  92/* signal flags */
  93#define SAS_OLDMASK     0x01            /* need to restore mask before pause */
  94#define SAS_ALTSTACK    0x02            /* have alternate signal stack */
  95
  96/*
  97 * Additional signal action values, used only temporarily/internally; these
  98 * values should be non-intersecting with values defined in signal.h, e.g.:
  99 * SIG_IGN, SIG_DFL, SIG_ERR, SIG_IGN.
 100 */
 101#define KERN_SIG_CATCH  (void (*)(int))2
 102#define KERN_SIG_HOLD   (void (*)(int))3
 103#define KERN_SIG_WAIT   (void (*)(int))4
 104
 105#define pgsigio(pgid, sig, notused) \
 106        { \
 107        struct proc *p; \
 108        if (pgid < 0) \
 109                gsignal(-(pgid), sig);\
 110        else if (pgid > 0 && (p = pfind(pgid)) != 0) \
 111                psignal(p, sig); \
 112}
 113
 114/*
 115 * get signal action for process and signal; currently only for current process
 116 */
 117#define SIGACTION(p, sig)       (p->p_sigacts->ps_sigact[(sig)])
 118
 119/*
 120 *      Check for per-process and per thread signals.
 121 */
 122#define SHOULDissignal(p,uthreadp) \
 123         (((uthreadp)->uu_siglist)      \
 124          & ~((((uthreadp)->uu_sigmask) \
 125               | (((p)->p_flag & P_TRACED) ? 0 : (p)->p_sigignore)) \
 126              & ~sigcantmask))
 127
 128/*
 129 *      Check for signals and per-thread signals.  
 130 *  Use in trap() and syscall() before
 131 *      exiting kernel.
 132 */
 133#define CHECK_SIGNALS(p, thread, uthreadp)      \
 134        (!thread_should_halt(thread)    \
 135         && (SHOULDissignal(p,uthreadp)))
 136
 137/*
 138 * Signal properties and actions.
 139 * The array below categorizes the signals and their default actions
 140 * according to the following properties:
 141 */
 142#define SA_KILL         0x01            /* terminates process by default */
 143#define SA_CORE         0x02            /* ditto and coredumps */
 144#define SA_STOP         0x04            /* suspend process */
 145#define SA_TTYSTOP      0x08            /* ditto, from tty */
 146#define SA_IGNORE       0x10            /* ignore by default */
 147#define SA_CONT         0x20            /* continue if suspended */
 148#define SA_CANTMASK     0x40            /* non-maskable, catchable */
 149
 150#ifdef  SIGPROP
 151int sigprop[NSIG + 1] = {
 152        0,                      /* unused */
 153        SA_KILL,                /* SIGHUP */
 154        SA_KILL,                /* SIGINT */
 155        SA_KILL|SA_CORE,        /* SIGQUIT */
 156        SA_KILL|SA_CORE,        /* SIGILL */
 157        SA_KILL|SA_CORE,        /* SIGTRAP */
 158        SA_KILL|SA_CORE,        /* SIGABRT */
 159        SA_KILL|SA_CORE,        /* SIGEMT */
 160        SA_KILL|SA_CORE,        /* SIGFPE */
 161        SA_KILL,                /* SIGKILL */
 162        SA_KILL|SA_CORE,        /* SIGBUS */
 163        SA_KILL|SA_CORE,        /* SIGSEGV */
 164        SA_KILL|SA_CORE,        /* SIGSYS */
 165        SA_KILL,                /* SIGPIPE */
 166        SA_KILL,                /* SIGALRM */
 167        SA_KILL,                /* SIGTERM */
 168        SA_IGNORE,              /* SIGURG */
 169        SA_STOP,                /* SIGSTOP */
 170        SA_STOP|SA_TTYSTOP,     /* SIGTSTP */
 171        SA_IGNORE|SA_CONT,      /* SIGCONT */
 172        SA_IGNORE,              /* SIGCHLD */
 173        SA_STOP|SA_TTYSTOP,     /* SIGTTIN */
 174        SA_STOP|SA_TTYSTOP,     /* SIGTTOU */
 175        SA_IGNORE,              /* SIGIO */
 176        SA_KILL,                /* SIGXCPU */
 177        SA_KILL,                /* SIGXFSZ */
 178        SA_KILL,                /* SIGVTALRM */
 179        SA_KILL,                /* SIGPROF */
 180        SA_IGNORE,              /* SIGWINCH  */
 181        SA_IGNORE,              /* SIGINFO */
 182        SA_KILL,                /* SIGUSR1 */
 183        SA_KILL,                /* SIGUSR2 */
 184};
 185
 186#define contsigmask     (sigmask(SIGCONT))
 187#define stopsigmask     (sigmask(SIGSTOP) | sigmask(SIGTSTP) | \
 188                            sigmask(SIGTTIN) | sigmask(SIGTTOU))
 189
 190#endif /* SIGPROP */
 191
 192#define sigcantmask     (sigmask(SIGKILL) | sigmask(SIGSTOP))
 193
 194/*
 195 * Machine-independent functions:
 196 */
 197int     signal_lock(struct proc *);
 198int     signal_unlock(struct proc *);
 199int     coredump(struct proc *p);
 200void    execsigs(struct proc *p, thread_t thread);
 201void    gsignal(int pgid, int sig);
 202int     issignal(struct proc *p);
 203int     CURSIG(struct proc *p);
 204int clear_procsiglist(struct proc *p, int bit);
 205int clear_procsigmask(struct proc *p, int bit);
 206int set_procsigmask(struct proc *p, int bit);
 207void    tty_pgsignal(struct pgrp *pgrp, int sig);
 208void    postsig(int sig);
 209void    siginit(struct proc *p);
 210void    trapsignal(struct proc *p, int sig, unsigned code);
 211void    pt_setrunnable(struct proc *p);
 212
 213/*
 214 * Machine-dependent functions:
 215 */
 216void    sendsig(struct proc *, /*sig_t*/ user_addr_t  action, int sig,
 217        int returnmask, u_long code);
 218
 219void    psignal(struct proc *p, int sig);
 220void    pgsignal(struct pgrp *pgrp, int sig, int checkctty);
 221void    threadsignal(thread_t sig_actthread, int signum, u_long code);
 222int     thread_issignal(proc_t p, thread_t th, sigset_t mask);
 223void    psignal_vfork(struct proc *p, task_t new_task, thread_t thr_act,
 224                int signum);
 225void    psignal_vtalarm(struct proc *);
 226void    psignal_xcpu(struct proc *);
 227void    psignal_sigprof(struct proc *);
 228void    psignal_lock(struct proc *, int, int);
 229void    signal_setast(thread_t sig_actthread);
 230
 231/* XXX not really very "inline"... */
 232__inline__ void sig_lock_to_exit(struct proc *p);
 233__inline__ int sig_try_locked(struct proc *p);
 234
 235#endif  /* BSD_KERNEL_PRIVATE */
 236
 237#endif  /* !_SYS_SIGNALVAR_H_ */
 238
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.