FreeBSD/Linux Kernel Cross Reference
sys/sys/siginfo.h
1 /* $OpenBSD: siginfo.h,v 1.13 2022/10/25 16:08:26 kettenis Exp $ */
2
3 /*
4 * Copyright (c) 1997 Theo de Raadt
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28 #ifndef _SYS_SIGINFO_H
29 #define _SYS_SIGINFO_H
30
31 #include <sys/cdefs.h>
32
33 union sigval {
34 int sival_int; /* integer value */
35 void *sival_ptr; /* pointer value */
36 };
37
38 /*
39 * Negative signal codes are reserved for future use for
40 * user generated signals.
41 */
42 #define SI_FROMUSER(sip) ((sip)->si_code <= 0)
43 #define SI_FROMKERNEL(sip) ((sip)->si_code > 0)
44
45 #define SI_NOINFO 32767 /* no signal information */
46 #define SI_USER 0 /* user generated signal via kill() */
47 #define SI_LWP (-1) /* user generated signal via lwp_kill()*/
48 #define SI_QUEUE (-2) /* user generated signal via sigqueue()*/
49 #define SI_TIMER (-3) /* from timer expiration */
50
51 #if __POSIX_VISIBLE >= 199309 || __XPG_VISIBLE
52 /*
53 * The machine dependent signal codes (SIGILL, SIGFPE,
54 * SIGSEGV, and SIGBUS)
55 */
56 #define ILL_ILLOPC 1 /* illegal opcode */
57 #define ILL_ILLOPN 2 /* illegal operand */
58 #define ILL_ILLADR 3 /* illegal addressing mode */
59 #define ILL_ILLTRP 4 /* illegal trap */
60 #define ILL_PRVOPC 5 /* privileged opcode */
61 #define ILL_PRVREG 6 /* privileged register */
62 #define ILL_COPROC 7 /* co-processor */
63 #define ILL_BADSTK 8 /* bad stack */
64 #define NSIGILL 8
65
66 #define EMT_TAGOVF 1 /* tag overflow */
67 #define NSIGEMT 1
68
69 #define FPE_INTDIV 1 /* integer divide by zero */
70 #define FPE_INTOVF 2 /* integer overflow */
71 #define FPE_FLTDIV 3 /* floating point divide by zero */
72 #define FPE_FLTOVF 4 /* floating point overflow */
73 #define FPE_FLTUND 5 /* floating point underflow */
74 #define FPE_FLTRES 6 /* floating point inexact result */
75 #define FPE_FLTINV 7 /* invalid floating point operation */
76 #define FPE_FLTSUB 8 /* subscript out of range */
77 #define NSIGFPE 8
78
79 #define SEGV_MAPERR 1 /* address not mapped to object */
80 #define SEGV_ACCERR 2 /* invalid permissions */
81 #define NSIGSEGV 2
82
83 #define BUS_ADRALN 1 /* invalid address alignment */
84 #define BUS_ADRERR 2 /* non-existent physical address */
85 #define BUS_OBJERR 3 /* object specific hardware error */
86 #define NSIGBUS 3
87
88 #endif /* __POSIX_VISIBLE >= 199309 || __XPG_VISIBLE */
89
90 /*
91 * SIGTRAP signal codes
92 */
93 #define TRAP_BRKPT 1 /* breakpoint trap */
94 #define TRAP_TRACE 2 /* trace trap */
95 #define NSIGTRAP 2
96
97 /*
98 * SIGCHLD signal codes
99 */
100 #define CLD_EXITED 1 /* child has exited */
101 #define CLD_KILLED 2 /* child was killed */
102 #define CLD_DUMPED 3 /* child has coredumped */
103 #define CLD_TRAPPED 4 /* traced child has stopped */
104 #define CLD_STOPPED 5 /* child has stopped on signal */
105 #define CLD_CONTINUED 6 /* stopped child has continued */
106 #define NSIGCLD 6
107
108 #if 0
109 /*
110 * SIGPOLL signal codes - not supported
111 */
112 #define POLL_IN 1 /* input available */
113 #define POLL_OUT 2 /* output possible */
114 #define POLL_MSG 3 /* message available */
115 #define POLL_ERR 4 /* I/O error */
116 #define POLL_PRI 5 /* high priority input available */
117 #define POLL_HUP 6 /* device disconnected */
118 #define NSIGPOLL 6
119
120 /*
121 * SIGPROF signal codes - not supported
122 */
123 #define PROF_SIG 1 /* have to set code non-zero */
124 #define NSIGPROF 1
125 #endif
126
127 #define SI_MAXSZ 128
128 #define SI_PAD ((SI_MAXSZ / sizeof (int)) - 3)
129
130 #include <sys/time.h>
131
132 typedef struct {
133 int si_signo; /* signal from signal.h */
134 int si_code; /* code from above */
135 int si_errno; /* error from errno.h */
136 union {
137 int _pad[SI_PAD]; /* for future growth */
138 struct { /* kill(), SIGCHLD */
139 pid_t _pid; /* process ID */
140 uid_t _uid;
141 union {
142 struct {
143 union sigval _value;
144 } _kill;
145 struct {
146 clock_t _utime;
147 clock_t _stime;
148 int _status;
149 } _cld;
150 } _pdata;
151 } _proc;
152 struct { /* SIGSEGV, SIGBUS, SIGILL and SIGFPE */
153 void *_addr; /* faulting address */
154 int _trapno; /* illegal trap number */
155 } _fault;
156 #if 0
157 struct { /* SIGPOLL, SIGXFSZ */
158 /* fd not currently available for SIGPOLL */
159 int _fd; /* file descriptor */
160 long _band;
161 } _file;
162 struct { /* SIGPROF */
163 caddr_t _faddr; /* last fault address */
164 timespec _tstamp; /* real time stamp */
165 short _syscall; /* current syscall */
166 char _nsysarg; /* number of arguments */
167 char _fault; /* last fault type */
168 long _sysarg[8]; /* syscall arguments */
169 long _mstate[17]; /* exactly fills struct*/
170 } _prof;
171 #endif
172 } _data;
173 } siginfo_t;
174
175 #define si_pid _data._proc._pid
176 #define si_uid _data._proc._uid
177
178 #define si_status _data._proc._pdata._cld._status
179 #define si_stime _data._proc._pdata._cld._stime
180 #define si_utime _data._proc._pdata._cld._utime
181 #define si_value _data._proc._pdata._kill._value
182 #define si_addr _data._fault._addr
183 #define si_trapno _data._fault._trapno
184 #define si_fd _data._file._fd
185 #define si_band _data._file._band
186
187 #define si_tstamp _data._prof._tstamp
188 #define si_syscall _data._prof._syscall
189 #define si_nsysarg _data._prof._nsysarg
190 #define si_sysarg _data._prof._sysarg
191 #define si_fault _data._prof._fault
192 #define si_faddr _data._prof._faddr
193 #define si_mstate _data._prof._mstate
194
195 #if defined(_KERNEL)
196 void initsiginfo(siginfo_t *, int, u_long, int, union sigval);
197 #endif
198
199 #endif /* _SYS_SIGINFO_H */
Cache object: 36fb07462bb5f76dec8811c4fa66a645
|