xref: /dragonfly/sys/sys/_siginfo.h (revision 3334604081b144ca603fe652c56a7fc2390ff729)
1 /*-
2  * Copyright (c) 2019 The DragonFly Project.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in
12  *    the documentation and/or other materials provided with the
13  *    distribution.
14  * 3. Neither the name of The DragonFly Project nor the names of its
15  *    contributors may be used to endorse or promote products derived
16  *    from this software without specific, prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
21  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
22  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
23  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
24  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
28  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29  * SUCH DAMAGE.
30  */
31 
32 #ifndef _SYS__SIGINFO_H_
33 #define   _SYS__SIGINFO_H_
34 
35 #include <sys/cdefs.h>
36 #include <machine/stdint.h>
37 
38 #ifndef _PID_T_DECLARED
39 typedef   __pid_t             pid_t;
40 #define   _PID_T_DECLARED
41 #endif
42 
43 #ifndef _UID_T_DECLARED
44 typedef   __uint32_t          uid_t;              /* user id */
45 #define   _UID_T_DECLARED
46 #endif
47 
48 #if __POSIX_VISIBLE >= 199309 || __XSI_VISIBLE >= 500
49 union sigval {
50           int       sival_int;
51           void      *sival_ptr;
52 };
53 #endif
54 
55 #if __POSIX_VISIBLE
56 /** si_code */
57 #define   SI_USER             0         /* Sent by kill(2)                      */
58 #define   SI_QUEUE  -1        /* Sent by the sigqueue(2)              */
59 #define   SI_TIMER  -2        /* Generated by expiration of a timer   */
60                                         /* set by timer_settime(2)              */
61 #define   SI_ASYNCIO          -3        /* Generated by completion of an        */
62                                         /* asynchronous I/O signal              */
63 #define   SI_MESGQ  -4        /* Generated by arrival of a message on */
64                                         /* an empty message queue               */
65 #endif
66 
67 #if __POSIX_VISIBLE >= 199309 || __XSI_VISIBLE
68 /*
69  * si_code stuff
70  */
71 /* SIGILL */
72 #define   ILL_ILLOPC          1         /* Illegal opcode                       */
73 #define   ILL_ILLOPN          2         /* Illegal operand                      */
74 #define   ILL_ILLADR          3         /* Illegal addressing mode              */
75 #define   ILL_ILLTRP          4         /* Illegal trap                                   */
76 #define   ILL_PRVOPC          5         /* Privileged opcode                              */
77 #define   ILL_PRVREG          6         /* Privileged register                            */
78 #define   ILL_COPROC          7         /* Coprocessor error                              */
79 #define   ILL_BADSTK          8         /* Internal stack error                           */
80 
81 /* SIGFPE */
82 #define   FPE_INTOVF          1         /* Integer overflow                     */
83 #define   FPE_INTDIV          2         /* Integer divide by zero               */
84 #define   FPE_FLTDIV          3         /* Floating point divide by zero        */
85 #define   FPE_FLTOVF          4         /* Floating point overflow              */
86 #define   FPE_FLTUND          5         /* Floating point underflow             */
87 #define   FPE_FLTRES          6         /* Floating point inexact result        */
88 #define   FPE_FLTINV          7         /* Invalid Floating point operation     */
89 #define   FPE_FLTSUB          8         /* Subscript out of range               */
90 
91 /* SIGSEGV */
92 #define   SEGV_MAPERR         1         /* Address not mapped to object                   */
93 #define   SEGV_ACCERR         2         /* Invalid permissions for mapped object*/
94 
95 /* SIGBUS */
96 #define   BUS_ADRALN          1         /* Invalid address alignment            */
97 #define   BUS_ADRERR          2         /* Non-existent physical address        */
98 #define   BUS_OBJERR          3         /* Object specific hardware error       */
99 
100 /* SIGTRAP */
101 #define   TRAP_BRKPT          1         /* Process breakpoint                             */
102 #define   TRAP_TRACE          2         /* Process trace trap                             */
103 
104 /* SIGCHLD */
105 #define   CLD_EXITED          1         /* Child has exited                     */
106 #define   CLD_KILLED          2         /* Child has terminated abnormally but  */
107                                         /* did not create a core file           */
108 #define   CLD_DUMPED          3         /* Child has terminated abnormally and  */
109                                         /* created a core file                            */
110 #define   CLD_TRAPPED         4         /* Traced child has trapped             */
111 #define   CLD_STOPPED         5         /* Child has stopped                              */
112 #define   CLD_CONTINUED       6         /* Stopped child has continued                    */
113 
114 /* SIGPOLL */
115 #define   POLL_IN             1         /* Data input available                           */
116 #define   POLL_OUT  2         /* Output buffers available             */
117 #define   POLL_MSG  3         /* Input message available              */
118 #define   POLL_ERR  4         /* I/O Error                                      */
119 #define   POLL_PRI  5         /* High priority input available        */
120 #define   POLL_HUP  6         /* Device disconnected                            */
121 
122 typedef   struct __siginfo {
123           int       si_signo;           /* signal number */
124           int       si_errno;           /* errno association */
125           /*
126            * Cause of signal, one of the SI_ macros or signal-specific
127            * values, i.e. one of the FPE_... values for SIGFPE. This
128            * value is equivalent to the second argument to an old-style
129            * FreeBSD signal handler.
130            */
131           int       si_code;            /* signal code */
132           pid_t     si_pid;                       /* sending process */
133           uid_t     si_uid;                       /* sender's ruid */
134           int       si_status;                    /* exit value */
135           void      *si_addr;           /* faulting instruction */
136           union sigval si_value;                  /* signal value */
137           long      si_band;            /* band event for SIGPOLL */
138           int       __spare__[7];                 /* gimme some slack */
139 } siginfo_t;
140 #endif /* __POSIX_VISIBLE >= 199309 || __XSI_VISIBLE */
141 
142 #endif /* !_SYS__SIGINFO_H_ */
143