The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/bsd/sys/signal.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Copyright (c) 2000-2006 Apple Computer, Inc. All rights reserved.
    3  *
    4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
    5  * 
    6  * This file contains Original Code and/or Modifications of Original Code
    7  * as defined in and that are subject to the Apple Public Source License
    8  * Version 2.0 (the 'License'). You may not use this file except in
    9  * compliance with the License. The rights granted to you under the License
   10  * may not be used to create, or enable the creation or redistribution of,
   11  * unlawful or unlicensed copies of an Apple operating system, or to
   12  * circumvent, violate, or enable the circumvention or violation of, any
   13  * terms of an Apple operating system software license agreement.
   14  * 
   15  * Please obtain a copy of the License at
   16  * http://www.opensource.apple.com/apsl/ and read it before using this file.
   17  * 
   18  * The Original Code and all software distributed under the License are
   19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
   20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
   21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
   22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
   23  * Please see the License for the specific language governing rights and
   24  * limitations under the License.
   25  * 
   26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
   27  */
   28 /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */
   29 /*
   30  * Copyright (c) 1982, 1986, 1989, 1991, 1993
   31  *      The Regents of the University of California.  All rights reserved.
   32  * (c) UNIX System Laboratories, Inc.
   33  * All or some portions of this file are derived from material licensed
   34  * to the University of California by American Telephone and Telegraph
   35  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
   36  * the permission of UNIX System Laboratories, Inc.
   37  *
   38  * Redistribution and use in source and binary forms, with or without
   39  * modification, are permitted provided that the following conditions
   40  * are met:
   41  * 1. Redistributions of source code must retain the above copyright
   42  *    notice, this list of conditions and the following disclaimer.
   43  * 2. Redistributions in binary form must reproduce the above copyright
   44  *    notice, this list of conditions and the following disclaimer in the
   45  *    documentation and/or other materials provided with the distribution.
   46  * 3. All advertising materials mentioning features or use of this software
   47  *    must display the following acknowledgement:
   48  *      This product includes software developed by the University of
   49  *      California, Berkeley and its contributors.
   50  * 4. Neither the name of the University nor the names of its contributors
   51  *    may be used to endorse or promote products derived from this software
   52  *    without specific prior written permission.
   53  *
   54  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   55  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   56  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   57  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   58  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   59  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   60  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   61  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   62  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   63  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   64  * SUCH DAMAGE.
   65  *
   66  *      @(#)signal.h    8.2 (Berkeley) 1/21/94
   67  */
   68 
   69 #ifndef _SYS_SIGNAL_H_
   70 #define _SYS_SIGNAL_H_
   71 
   72 #include <sys/cdefs.h>
   73 #include <sys/appleapiopts.h>
   74 
   75 #define __DARWIN_NSIG   32      /* counting 0; could be 33 (mask is 1-32) */
   76 
   77 #if !defined(_ANSI_SOURCE) && (!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE))
   78 #define NSIG    __DARWIN_NSIG
   79 #endif
   80 
   81 #include <machine/signal.h>     /* sigcontext; codes for SIGILL, SIGFPE */
   82 
   83 #define SIGHUP  1       /* hangup */
   84 #define SIGINT  2       /* interrupt */
   85 #define SIGQUIT 3       /* quit */
   86 #define SIGILL  4       /* illegal instruction (not reset when caught) */
   87 #define SIGTRAP 5       /* trace trap (not reset when caught) */
   88 #define SIGABRT 6       /* abort() */
   89 #if  (defined(_POSIX_C_SOURCE) && !defined(_DARWIN_C_SOURCE))
   90 #define SIGPOLL 7       /* pollable event ([XSR] generated, not supported) */
   91 #else   /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
   92 #define SIGIOT  SIGABRT /* compatibility */
   93 #define SIGEMT  7       /* EMT instruction */
   94 #endif  /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
   95 #define SIGFPE  8       /* floating point exception */
   96 #define SIGKILL 9       /* kill (cannot be caught or ignored) */
   97 #define SIGBUS  10      /* bus error */
   98 #define SIGSEGV 11      /* segmentation violation */
   99 #define SIGSYS  12      /* bad argument to system call */
  100 #define SIGPIPE 13      /* write on a pipe with no one to read it */
  101 #define SIGALRM 14      /* alarm clock */
  102 #define SIGTERM 15      /* software termination signal from kill */
  103 #define SIGURG  16      /* urgent condition on IO channel */
  104 #define SIGSTOP 17      /* sendable stop signal not from tty */
  105 #define SIGTSTP 18      /* stop signal from tty */
  106 #define SIGCONT 19      /* continue a stopped process */
  107 #define SIGCHLD 20      /* to parent on child stop or exit */
  108 #define SIGTTIN 21      /* to readers pgrp upon background tty read */
  109 #define SIGTTOU 22      /* like TTIN for output if (tp->t_local&LTOSTOP) */
  110 #if  (!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE))
  111 #define SIGIO   23      /* input/output possible signal */
  112 #endif
  113 #define SIGXCPU 24      /* exceeded CPU time limit */
  114 #define SIGXFSZ 25      /* exceeded file size limit */
  115 #define SIGVTALRM 26    /* virtual time alarm */
  116 #define SIGPROF 27      /* profiling time alarm */
  117 #if  (!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE))
  118 #define SIGWINCH 28     /* window size changes */
  119 #define SIGINFO 29      /* information request */
  120 #endif
  121 #define SIGUSR1 30      /* user defined signal 1 */
  122 #define SIGUSR2 31      /* user defined signal 2 */
  123 
  124 #if defined(_ANSI_SOURCE) || __DARWIN_UNIX03 || defined(__cplusplus)
  125 /*
  126  * Language spec sez we must list exactly one parameter, even though we
  127  * actually supply three.  Ugh!
  128  * SIG_HOLD is chosen to avoid KERN_SIG_* values in <sys/signalvar.h>
  129  */
  130 #define SIG_DFL         (void (*)(int))0
  131 #define SIG_IGN         (void (*)(int))1
  132 #define SIG_HOLD        (void (*)(int))5
  133 #define SIG_ERR         ((void (*)(int))-1)
  134 #else
  135 /* DO NOT REMOVE THE COMMENTED OUT int: fixincludes needs to see them */
  136 #define SIG_DFL         (void (*)(/*int*/))0
  137 #define SIG_IGN         (void (*)(/*int*/))1
  138 #define SIG_HOLD        (void (*)(/*int*/))5
  139 #define SIG_ERR         ((void (*)(/*int*/))-1)
  140 #endif
  141 
  142 #ifndef _ANSI_SOURCE
  143 #include <sys/_types.h>
  144 
  145 #define __need_mcontext_t
  146 #define __need_stack_t
  147 #define __need_ucontext_t
  148 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
  149 #if defined(__ppc__) || defined(__ppc64__)
  150 #define __need_mcontext64_t
  151 #define __need_ucontext64_t
  152 #endif /* __ppc__  || __ppc64__ */
  153 #endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
  154 #include <sys/_structs.h>
  155 
  156 #ifndef _PID_T
  157 #define _PID_T
  158 typedef __darwin_pid_t                  pid_t;
  159 #endif
  160 
  161 #ifndef _PTHREAD_ATTR_T
  162 #define _PTHREAD_ATTR_T
  163 typedef __darwin_pthread_attr_t         pthread_attr_t;
  164 #endif
  165 
  166 #ifndef _SIGSET_T
  167 #define _SIGSET_T
  168 typedef __darwin_sigset_t               sigset_t;
  169 #endif
  170 
  171 #ifndef _SIZE_T
  172 #define _SIZE_T
  173 typedef __darwin_size_t                 size_t;
  174 #endif
  175 
  176 #ifndef _UID_T
  177 #define _UID_T
  178 typedef __darwin_uid_t                  uid_t;
  179 #endif
  180 
  181 union sigval {
  182         /* Members as suggested by Annex C of POSIX 1003.1b. */
  183         int     sival_int;
  184         void    *sival_ptr;
  185 };
  186 
  187 #define SIGEV_NONE      0       /* No async notification */
  188 #define SIGEV_SIGNAL    1       /* aio - completion notification */
  189 #define SIGEV_THREAD    3       /* [NOTIMP] [RTS] call notification function */
  190 
  191 struct sigevent {
  192         int                             sigev_notify;                           /* Notification type */
  193         int                             sigev_signo;                            /* Signal number */
  194         union sigval    sigev_value;                            /* Signal value */
  195         void                    (*sigev_notify_function)(union sigval);   /* Notification function */
  196         pthread_attr_t  *sigev_notify_attributes;       /* Notification attributes */
  197 };
  198 
  199 #ifdef BSD_KERNEL_PRIVATE
  200 
  201 union user64_sigval {
  202         struct {
  203                 uint32_t                pad;    /* assumes Motorola byte order */
  204                 int32_t                 sival_int;
  205         } size_equivalent;
  206         user64_addr_t   sival_ptr;
  207 };
  208 
  209 union user32_sigval {
  210         /* Members as suggested by Annex C of POSIX 1003.1b. */
  211         int32_t sival_int;
  212         user32_addr_t sival_ptr;
  213 };
  214 
  215 union user_sigval {
  216         struct {
  217                 uint32_t                pad;    /* assumes Motorola byte order */
  218                 int32_t                 sival_int;
  219         } size_equivalent;
  220         user_addr_t sival_ptr;
  221 };
  222 
  223 struct user64_sigevent {
  224         int             sigev_notify;                   /* Notification type */
  225         int             sigev_signo;                    /* Signal number */
  226         union user64_sigval sigev_value;                        /* Signal value */
  227         user64_addr_t   sigev_notify_function;          /* Notify function */
  228         user64_addr_t   sigev_notify_attributes;        /* Notify attributes */
  229 };
  230 
  231 struct user32_sigevent {
  232         int             sigev_notify;                   /* Notification type */
  233         int             sigev_signo;                    /* Signal number */
  234         union user32_sigval sigev_value;                        /* Signal value */
  235         user32_addr_t   sigev_notify_function;          /* Notify function */
  236         user32_addr_t   sigev_notify_attributes;        /* Notify attributes */
  237 };
  238 
  239 struct user_sigevent {
  240         int             sigev_notify;                   /* Notification type */
  241         int             sigev_signo;                    /* Signal number */
  242         union user_sigval sigev_value;                  /* Signal value */
  243         user_addr_t     sigev_notify_function;          /* Notify function */
  244         user_addr_t     sigev_notify_attributes;        /* Notify attributes */
  245 };
  246 
  247 #endif  /* BSD_KERNEL_PRIVATE */
  248 
  249 typedef struct __siginfo {
  250         int     si_signo;               /* signal number */
  251         int     si_errno;               /* errno association */
  252         int     si_code;                /* signal code */
  253         pid_t   si_pid;                 /* sending process */
  254         uid_t   si_uid;                 /* sender's ruid */
  255         int     si_status;              /* exit value */
  256         void    *si_addr;               /* faulting instruction */
  257         union sigval si_value;          /* signal value */
  258         long    si_band;                /* band event for SIGPOLL */
  259         unsigned long   __pad[7];       /* Reserved for Future Use */
  260 } siginfo_t;
  261 
  262 #ifdef BSD_KERNEL_PRIVATE
  263 
  264 typedef struct user_siginfo {
  265         int             si_signo;       /* signal number */
  266         int             si_errno;       /* errno association */
  267         int             si_code;        /* signal code */
  268         pid_t           si_pid;         /* sending process */
  269         uid_t           si_uid;         /* sender's ruid */
  270         int             si_status;      /* exit value */
  271         user_addr_t     si_addr;        /* faulting instruction (see below) */
  272         union user_sigval si_value;     /* signal value */
  273         user_long_t     si_band;        /* band event for SIGPOLL */
  274         user_ulong_t    pad[7];         /* Reserved for Future Use */
  275 } user_siginfo_t;
  276 
  277 typedef struct user64_siginfo {
  278         int             si_signo;       /* signal number */
  279         int             si_errno;       /* errno association */
  280         int             si_code;        /* signal code */
  281         pid_t           si_pid;         /* sending process */
  282         uid_t           si_uid;         /* sender's ruid */
  283         int             si_status;      /* exit value */
  284         user64_addr_t   si_addr;        /* faulting instruction (see below) */
  285         union user64_sigval si_value;   /* signal value */
  286         user64_long_t   si_band;        /* band event for SIGPOLL */
  287         user64_ulong_t  __pad[7];               /* Reserved for Future Use */
  288 } user64_siginfo_t;
  289 
  290 typedef struct user32_siginfo {
  291         int             si_signo;       /* signal number */
  292         int             si_errno;       /* errno association */
  293         int             si_code;        /* signal code */
  294         pid_t           si_pid;         /* sending process */
  295         uid_t           si_uid;         /* sender's ruid */
  296         int             si_status;      /* exit value */
  297         user32_addr_t   si_addr;        /* faulting instruction (see below) */
  298         union user32_sigval     si_value;       /* signal value */
  299         user32_long_t   si_band;        /* band event for SIGPOLL */
  300         user32_ulong_t  __pad[7];               /* Reserved for Future Use */
  301 } user32_siginfo_t;
  302 
  303 #endif  /* BSD_KERNEL_PRIVATE */
  304 
  305 /* 
  306  * When the signal is SIGILL or SIGFPE, si_addr contains the address of 
  307  * the faulting instruction.
  308  * When the signal is SIGSEGV or SIGBUS, si_addr contains the address of 
  309  * the faulting memory reference. Although for x86 there are cases of SIGSEGV
  310  * for which si_addr cannot be determined and is NULL. 
  311  * If the signal is SIGCHLD, the si_pid field will contain the child process ID,
  312  *  si_status contains the exit value or signal and
  313  *  si_uid contains the real user ID of the process that sent the signal.
  314  */
  315 
  316 /* Values for si_code */
  317 
  318 /* Codes for SIGILL */
  319 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
  320 #define ILL_NOOP        0       /* if only I knew... */
  321 #endif
  322 #define ILL_ILLOPC      1       /* [XSI] illegal opcode */
  323 #define ILL_ILLTRP      2       /* [XSI] illegal trap */
  324 #define ILL_PRVOPC      3       /* [XSI] privileged opcode */
  325 #define ILL_ILLOPN      4       /* [XSI] illegal operand -NOTIMP */
  326 #define ILL_ILLADR      5       /* [XSI] illegal addressing mode -NOTIMP */
  327 #define ILL_PRVREG      6       /* [XSI] privileged register -NOTIMP */
  328 #define ILL_COPROC      7       /* [XSI] coprocessor error -NOTIMP */
  329 #define ILL_BADSTK      8       /* [XSI] internal stack error -NOTIMP */
  330 
  331 /* Codes for SIGFPE */
  332 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
  333 #define FPE_NOOP        0       /* if only I knew... */
  334 #endif
  335 #define FPE_FLTDIV      1       /* [XSI] floating point divide by zero */
  336 #define FPE_FLTOVF      2       /* [XSI] floating point overflow */
  337 #define FPE_FLTUND      3       /* [XSI] floating point underflow */
  338 #define FPE_FLTRES      4       /* [XSI] floating point inexact result */
  339 #define FPE_FLTINV      5       /* [XSI] invalid floating point operation */
  340 #define FPE_FLTSUB      6       /* [XSI] subscript out of range -NOTIMP */
  341 #define FPE_INTDIV      7       /* [XSI] integer divide by zero */
  342 #define FPE_INTOVF      8       /* [XSI] integer overflow */
  343 
  344 /* Codes for SIGSEGV */
  345 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
  346 #define SEGV_NOOP       0       /* if only I knew... */
  347 #endif
  348 #define SEGV_MAPERR     1       /* [XSI] address not mapped to object */
  349 #define SEGV_ACCERR     2       /* [XSI] invalid permission for mapped object */
  350 
  351 /* Codes for SIGBUS */
  352 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
  353 #define BUS_NOOP        0       /* if only I knew... */
  354 #endif
  355 #define BUS_ADRALN      1       /* [XSI] Invalid address alignment */
  356 #define BUS_ADRERR      2       /* [XSI] Nonexistent physical address -NOTIMP */
  357 #define BUS_OBJERR      3       /* [XSI] Object-specific HW error - NOTIMP */
  358 
  359 /* Codes for SIGTRAP */
  360 #define TRAP_BRKPT      1       /* [XSI] Process breakpoint -NOTIMP */
  361 #define TRAP_TRACE      2       /* [XSI] Process trace trap -NOTIMP */
  362 
  363 /* Codes for SIGCHLD */
  364 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
  365 #define CLD_NOOP        0       /* if only I knew... */
  366 #endif
  367 #define CLD_EXITED      1       /* [XSI] child has exited */
  368 #define CLD_KILLED      2       /* [XSI] terminated abnormally, no core file */
  369 #define CLD_DUMPED      3       /* [XSI] terminated abnormally, core file */
  370 #define CLD_TRAPPED     4       /* [XSI] traced child has trapped */
  371 #define CLD_STOPPED     5       /* [XSI] child has stopped */
  372 #define CLD_CONTINUED   6       /* [XSI] stopped child has continued */
  373 
  374 /* Codes for SIGPOLL */
  375 #define POLL_IN         1       /* [XSR] Data input available */
  376 #define POLL_OUT        2       /* [XSR] Output buffers available */
  377 #define POLL_MSG        3       /* [XSR] Input message available */
  378 #define POLL_ERR        4       /* [XSR] I/O error */
  379 #define POLL_PRI        5       /* [XSR] High priority input available */
  380 #define POLL_HUP        6       /* [XSR] Device disconnected */
  381 
  382 /* union for signal handlers */
  383 union __sigaction_u {
  384         void    (*__sa_handler)(int);
  385         void    (*__sa_sigaction)(int, struct __siginfo *,
  386                        void *);
  387 };
  388 
  389 /* Signal vector template for Kernel user boundary */
  390 struct  __sigaction {
  391         union __sigaction_u __sigaction_u;  /* signal handler */
  392         void    (*sa_tramp)(void *, int, int, siginfo_t *, void *);
  393         sigset_t sa_mask;               /* signal mask to apply */
  394         int     sa_flags;               /* see signal options below */
  395 };
  396 
  397 /*
  398  * Signal vector "template" used in sigaction call.
  399  */
  400 struct  sigaction {
  401         union __sigaction_u __sigaction_u;  /* signal handler */
  402         sigset_t sa_mask;               /* signal mask to apply */
  403         int     sa_flags;               /* see signal options below */
  404 };
  405 
  406 #ifdef  BSD_KERNEL_PRIVATE
  407 #include <machine/types.h>
  408 
  409 union __user32_sigaction_u {
  410         user32_addr_t __sa_handler;
  411         user32_addr_t __sa_sigaction;
  412 };
  413 
  414 struct  user32_sigaction {
  415         union __user32_sigaction_u __sigaction_u;  /* signal handler */
  416         sigset_t sa_mask;               /* signal mask to apply */
  417         int     sa_flags;               /* see signal options below */
  418 };
  419 
  420 struct  __user32_sigaction {
  421         union __user32_sigaction_u __sigaction_u;  /* signal handler */
  422         user32_addr_t sa_tramp;
  423         sigset_t sa_mask;               /* signal mask to apply */
  424         int     sa_flags;               /* see signal options below */
  425 };
  426 
  427 union __user64_sigaction_u {
  428         user64_addr_t   __sa_handler;
  429         user64_addr_t   __sa_sigaction;
  430 };
  431 
  432 struct  user64_sigaction {
  433         union __user64_sigaction_u __sigaction_u;  /* signal handler */
  434         sigset_t sa_mask;               /* signal mask to apply */
  435         int     sa_flags;               /* see signal options below */
  436 };
  437 
  438 struct  __user64_sigaction {
  439         union __user64_sigaction_u __sigaction_u;  /* signal handler */
  440         user64_addr_t   sa_tramp;       /* signal mask to apply */
  441         sigset_t sa_mask;               /* signal mask to apply */
  442         int     sa_flags;               /* see signal options below */
  443 };
  444 
  445 union __kern_sigaction_u {
  446         user_addr_t     __sa_handler;
  447         user_addr_t     __sa_sigaction;
  448 };
  449 
  450 struct  kern_sigaction {
  451         union __kern_sigaction_u __sigaction_u;  /* signal handler */
  452         sigset_t sa_mask;               /* signal mask to apply */
  453         int     sa_flags;               /* see signal options below */
  454 };
  455 
  456 struct  __kern_sigaction {
  457         union __kern_sigaction_u __sigaction_u;  /* signal handler */
  458         user_addr_t     sa_tramp;       /* signal mask to apply */
  459         sigset_t sa_mask;               /* signal mask to apply */
  460         int     sa_flags;               /* see signal options below */
  461 };
  462 
  463 #undef SIG_DFL
  464 #undef SIG_IGN
  465 #undef SIG_ERR
  466 #define  SIG_DFL        ((user_addr_t)0LL)
  467 #define  SIG_IGN        ((user_addr_t)1LL)
  468 #define  SIG_ERR        ((user_addr_t)-1LL)
  469 
  470 #endif  /* BSD_KERNEL_PRIVATE */
  471 
  472 
  473 /* if SA_SIGINFO is set, sa_sigaction is to be used instead of sa_handler. */
  474 #define sa_handler      __sigaction_u.__sa_handler
  475 #define sa_sigaction    __sigaction_u.__sa_sigaction
  476 
  477 #define SA_ONSTACK      0x0001  /* take signal on signal stack */
  478 #define SA_RESTART      0x0002  /* restart system on signal return */
  479 #ifdef  BSD_KERNEL_PRIVATE
  480 #define SA_DISABLE      0x0004  /* disable taking signals on alternate stack - for user_sigaltstack.ss_flags only */
  481 #endif  /* BSD_KERNEL_PRIVATE */
  482 #define SA_RESETHAND    0x0004  /* reset to SIG_DFL when taking signal */
  483 #define SA_NOCLDSTOP    0x0008  /* do not generate SIGCHLD on child stop */
  484 #define SA_NODEFER      0x0010  /* don't mask the signal we're delivering */
  485 #define SA_NOCLDWAIT    0x0020  /* don't keep zombies around */
  486 #define SA_SIGINFO      0x0040  /* signal handler with SA_SIGINFO args */
  487 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
  488 #define SA_USERTRAMP    0x0100  /* do not bounce off kernel's sigtramp */
  489 /* This will provide 64bit register set in a 32bit user address space */
  490 #define SA_64REGSET     0x0200  /* signal handler with SA_SIGINFO args with 64bit regs information */
  491 #endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
  492 
  493 /* the following are the only bits we support from user space, the 
  494  * rest are for kernel use only.
  495  */
  496 #define SA_USERSPACE_MASK (SA_ONSTACK | SA_RESTART | SA_RESETHAND | SA_NOCLDSTOP | SA_NODEFER | SA_NOCLDWAIT | SA_SIGINFO)
  497 
  498 /*
  499  * Flags for sigprocmask:
  500  */
  501 #define SIG_BLOCK       1       /* block specified signal set */
  502 #define SIG_UNBLOCK     2       /* unblock specified signal set */
  503 #define SIG_SETMASK     3       /* set specified signal set */
  504 
  505 /* POSIX 1003.1b required values. */
  506 #define SI_USER         0x10001 /* [CX] signal from kill() */
  507 #define SI_QUEUE        0x10002 /* [CX] signal from sigqueue() */
  508 #define SI_TIMER        0x10003 /* [CX] timer expiration */
  509 #define SI_ASYNCIO      0x10004 /* [CX] aio request completion */
  510 #define SI_MESGQ        0x10005 /* [CX] from message arrival on empty queue */
  511 
  512 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
  513 typedef void (*sig_t)(int);     /* type of signal function */
  514 #endif
  515 
  516 /*
  517  * Structure used in sigaltstack call.
  518  */
  519 #ifdef  BSD_KERNEL_PRIVATE
  520 
  521 struct  user32_sigaltstack {
  522         user32_addr_t   ss_sp;          /* signal stack base */
  523         user32_size_t   ss_size;        /* signal stack length */
  524         int                 ss_flags;   /* SA_DISABLE and/or SA_ONSTACK */
  525 };
  526 
  527 struct  user64_sigaltstack {
  528         user64_addr_t   ss_sp;          /* signal stack base */
  529         user64_size_t   ss_size;        /* signal stack length */
  530         int             ss_flags;       /* SA_DISABLE and/or SA_ONSTACK */
  531 };
  532 
  533 struct  kern_sigaltstack {
  534         user_addr_t     ss_sp;          /* signal stack base */
  535         user_size_t     ss_size;        /* signal stack length */
  536         int             ss_flags;       /* SA_DISABLE and/or SA_ONSTACK */
  537 };
  538 
  539 #endif  /* BSD_KERNEL_PRIVATE */
  540 
  541 #define SS_ONSTACK      0x0001  /* take signal on signal stack */
  542 #define SS_DISABLE      0x0004  /* disable taking signals on alternate stack */
  543 #define MINSIGSTKSZ     32768   /* (32K)minimum allowable stack */
  544 #define SIGSTKSZ        131072  /* (128K)recommended stack size */
  545 
  546 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
  547 /*
  548  * 4.3 compatibility:
  549  * Signal vector "template" used in sigvec call.
  550  */
  551 struct  sigvec {
  552         void    (*sv_handler)(int);     /* signal handler */
  553         int     sv_mask;                /* signal mask to apply */
  554         int     sv_flags;               /* see signal options below */
  555 };
  556 
  557 #define SV_ONSTACK      SA_ONSTACK
  558 #define SV_INTERRUPT    SA_RESTART      /* same bit, opposite sense */
  559 #define SV_RESETHAND    SA_RESETHAND
  560 #define SV_NODEFER      SA_NODEFER
  561 #define SV_NOCLDSTOP    SA_NOCLDSTOP
  562 #define SV_SIGINFO      SA_SIGINFO
  563 
  564 #define sv_onstack sv_flags     /* isn't compatibility wonderful! */
  565 #endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
  566 
  567 /*
  568  * Structure used in sigstack call.
  569  */
  570 struct  sigstack {
  571         char    *ss_sp;                 /* signal stack pointer */
  572         int     ss_onstack;             /* current status */
  573 };
  574 
  575 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
  576 /*
  577  * Macro for converting signal number to a mask suitable for
  578  * sigblock().
  579  */
  580 #define sigmask(m)      (1 << ((m)-1))
  581 
  582 #ifdef  BSD_KERNEL_PRIVATE
  583 /*
  584  *      signals delivered on a per-thread basis.
  585  */
  586 #define threadmask (sigmask(SIGILL)|sigmask(SIGTRAP)|\
  587                     sigmask(SIGIOT)|sigmask(SIGEMT)|\
  588                     sigmask(SIGFPE)|sigmask(SIGBUS)|\
  589                     sigmask(SIGSEGV)|sigmask(SIGSYS)|\
  590                     sigmask(SIGPIPE))
  591 
  592 #define workq_threadmask (threadmask | sigcantmask)
  593 
  594 /*
  595  * Signals carried across exec.
  596  */
  597 #define execmask   (sigmask(SIGHUP)|sigmask(SIGINT)|\
  598                     sigmask(SIGQUIT)|sigmask(SIGKILL)|\
  599                     sigmask(SIGTERM)|sigmask(SIGSTOP)|\
  600                     sigmask(SIGTSTP)|sigmask(SIGCONT)|\
  601                     sigmask(SIGTTIN)|sigmask(SIGTTOU)|\
  602                     sigmask(SIGUSR1)|sigmask(SIGUSR2))
  603 
  604 #endif  /* BSD_KERNEL_PRIVATE */
  605 
  606 #define BADSIG          SIG_ERR
  607 
  608 #endif  /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
  609 #endif  /* !_ANSI_SOURCE */
  610 
  611 /*
  612  * For historical reasons; programs expect signal's return value to be
  613  * defined by <sys/signal.h>.
  614  */
  615 __BEGIN_DECLS
  616 void    (*signal(int, void (*)(int)))(int);
  617 __END_DECLS
  618 #endif  /* !_SYS_SIGNAL_H_ */

Cache object: 0c8fd85f381086877f66bf3719087ced


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.