1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
|
/*-
* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright (c) 2004 Tim J. Robbins
* Copyright (c) 2001 Doug Rabson
* Copyright (c) 1994-1996 Søren Schmidt
* All rights reserved.
* Copyright (c) 2022 Dmitry Chagin <dchagin@FreeBSD.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer
* in this position and unchanged.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _LINUX_SIGINFO_H_
#define _LINUX_SIGINFO_H_
/*
* si_code values
*/
#define LINUX_SI_USER 0 /* sent by kill, sigsend, raise */
#define LINUX_SI_KERNEL 0x80 /* sent by the kernel from somewhere */
#define LINUX_SI_QUEUE -1 /* sent by sigqueue */
#define LINUX_SI_TIMER -2 /* sent by timer expiration */
#define LINUX_SI_MESGQ -3 /* sent by real time mesq state change */
#define LINUX_SI_ASYNCIO -4 /* sent by AIO completion */
#define LINUX_SI_SIGIO -5 /* sent by queued SIGIO */
#define LINUX_SI_TKILL -6 /* sent by tkill system call */
/*
* SIGILL si_codes
*/
#define LINUX_ILL_ILLOPC 1 /* illegal opcode */
#define LINUX_ILL_ILLOPN 2 /* illegal operand */
#define LINUX_ILL_ILLADR 3 /* illegal addressing mode */
#define LINUX_ILL_ILLTRP 4 /* illegal trap */
#define LINUX_ILL_PRVOPC 5 /* privileged opcode */
#define LINUX_ILL_PRVREG 6 /* privileged register */
#define LINUX_ILL_COPROC 7 /* coprocessor error */
#define LINUX_ILL_BADSTK 8 /* internal stack error */
#define LINUX_ILL_BADIADDR 9 /* unimplemented instruction address */
#define LINUX___ILL_BREAK 10 /* (ia64) illegal break */
#define LINUX___ILL_BNDMOD 11 /* (ia64) bundle-update (modification)
* in progress
*/
/*
* SIGFPE si_codes
*/
#define LINUX_FPE_INTDIV 1 /* integer divide by zero */
#define LINUX_FPE_INTOVF 2 /* integer overflow */
#define LINUX_FPE_FLTDIV 3 /* floating point divide by zero */
#define LINUX_FPE_FLTOVF 4 /* floating point overflow */
#define LINUX_FPE_FLTUND 5 /* floating point underflow */
#define LINUX_FPE_FLTRES 6 /* floating point inexact result */
#define LINUX_FPE_FLTINV 7 /* floating point invalid operation */
#define LINUX_FPE_FLTSUB 8 /* (ia64) subscript out of range */
#define LINUX___FPE_DECOVF 9 /* (ia64) decimal overflow */
#define LINUX___FPE_DECDIV 10 /* (ia64) decimal division by zero */
#define LINUX___FPE_DECERR 11 /* (ia64) packed decimal error */
#define LINUX___FPE_INVASC 12 /* (ia64) invalid ASCII digit */
#define LINUX___FPE_INVDEC 13 /* (ia64) invalid decimal digit */
#define LINUX_FPE_FLTUNK 14 /* undiagnosed floating-point exception */
#define LINUX_FPE_CONDTRAP 15 /* trap on condition */
/*
* SIGSEGV si_codes
*/
#define LINUX_SEGV_MAPERR 1 /* address not mapped to object */
#define LINUX_SEGV_ACCERR 2 /* invalid permissions for mapped object */
#define LINUX_SEGV_BNDERR 3 /* failed address bound checks */
#ifdef __ia64__
#define LINUX___SEGV_PSTKOVF 4 /* paragraph stack overflow */
#else
#define LINUX_SEGV_PKUERR 4 /* failed protection key checks */
#endif
#define LINUX_SEGV_ACCADI 5 /* ADI not enabled for mapped object */
#define LINUX_SEGV_ADIDERR 6 /* Disrupting MCD error */
#define LINUX_SEGV_ADIPERR 7 /* Precise MCD exception */
#define LINUX_SEGV_MTEAERR 8 /* Asynchronous ARM MTE error */
#define LINUX_SEGV_MTESERR 9 /* Synchronous ARM MTE exception */
/*
* SIGBUS si_codes
*/
#define LINUX_BUS_ADRALN 1 /* invalid address alignment */
#define LINUX_BUS_ADRERR 2 /* non-existent physical address */
#define LINUX_BUS_OBJERR 3 /* object specific hardware error */
#define LINUX_BUS_MCEERR_AR 4 /* hardware memory error consumed
* on a machine check:
* action required
*/
#define LINUX_BUS_MCEERR_AO 5 /* hardware memory error detected
* in process but not consumed:
* action optional
*/
/*
* SIGTRAP si_codes
*/
#define LINUX_TRAP_BRKPT 1 /* process breakpoint */
#define LINUX_TRAP_TRACE 2 /* process trace trap */
#define LINUX_TRAP_BRANCH 3 /* process taken branch trap */
#define LINUX_TRAP_HWBKPT 4 /* hardware breakpoint/watchpoint */
#define LINUX_TRAP_UNK 5 /* undiagnosed trap */
#define LINUX_TRAP_PERF 6 /* perf event with sigtrap=1 */
/*
* SIGCHLD si_codes
*/
#define LINUX_CLD_EXITED 1 /* child has exited */
#define LINUX_CLD_KILLED 2 /* child was killed */
#define LINUX_CLD_DUMPED 3 /* child terminated abnormally */
#define LINUX_CLD_TRAPPED 4 /* traced child has trapped */
#define LINUX_CLD_STOPPED 5 /* child has stopped */
#define LINUX_CLD_CONTINUED 6 /* stopped child has continued */
/*
* SIGPOLL (or any other signal without signal specific si_codes) si_codes
*/
#define LINUX_POLL_IN 1 /* data input available */
#define LINUX_POLL_OUT 2 /* output buffers available */
#define LINUX_POLL_MSG 3 /* input message available */
#define LINUX_POLL_ERR 4 /* i/o error */
#define LINUX_POLL_PRI 5 /* high priority input available */
#define LINUX_POLL_HUP 6 /* device disconnected */
/*
* SIGSYS si_codes
*/
#define LINUX_SYS_SECCOMP 1 /* seccomp triggered */
#define LINUX_SYS_USER_DISPATCH 2 /* syscall user dispatch triggered */
/*
* SIGEMT si_codes
*/
#define LINUX_EMT_TAGOVF 1 /* tag overflow */
typedef union l_sigval {
l_int sival_int;
l_uintptr_t sival_ptr;
} l_sigval_t;
#define LINUX_SI_MAX_SIZE 128
union __sifields {
struct {
l_pid_t _pid;
l_uid_t _uid;
} _kill;
struct {
l_timer_t _tid;
l_int _overrun;
char _pad[sizeof(l_uid_t) - sizeof(int)];
union l_sigval _sigval;
l_uint _sys_private;
} _timer;
struct {
l_pid_t _pid; /* sender's pid */
l_uid_t _uid; /* sender's uid */
union l_sigval _sigval;
} _rt;
struct {
l_pid_t _pid; /* which child */
l_uid_t _uid; /* sender's uid */
l_int _status; /* exit code */
l_clock_t _utime;
l_clock_t _stime;
} _sigchld;
struct {
l_uintptr_t _addr; /* Faulting insn/memory ref. */
} _sigfault;
struct {
l_long _band; /* POLL_IN,POLL_OUT,POLL_MSG */
l_int _fd;
} _sigpoll;
};
typedef struct l_siginfo {
union {
struct {
l_int lsi_signo;
l_int lsi_errno;
l_int lsi_code;
union __sifields _sifields;
};
l_int _pad[LINUX_SI_MAX_SIZE/sizeof(l_int)];
};
} l_siginfo_t;
_Static_assert(sizeof(l_siginfo_t) == LINUX_SI_MAX_SIZE, "l_siginfo_t size");
#define lsi_pid _sifields._kill._pid
#define lsi_uid _sifields._kill._uid
#define lsi_tid _sifields._timer._tid
#define lsi_overrun _sifields._timer._overrun
#define lsi_sys_private _sifields._timer._sys_private
#define lsi_status _sifields._sigchld._status
#define lsi_utime _sifields._sigchld._utime
#define lsi_stime _sifields._sigchld._stime
#define lsi_value _sifields._rt._sigval
#define lsi_int _sifields._rt._sigval.sival_int
#define lsi_ptr _sifields._rt._sigval.sival_ptr
#define lsi_addr _sifields._sigfault._addr
#define lsi_band _sifields._sigpoll._band
#define lsi_fd _sifields._sigpoll._fd
#endif /* _LINUX_SIGINFO_H_ */
|