sys/fs/zfs.h: replace grub in comments.
[unleashed.git] / include / sys / siginfo.h
blobf6268dd8a591d58ad7bacc4374c702c87f3ad168
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
20 * CDDL HEADER END
23 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
28 /* All Rights Reserved */
30 #ifndef _SYS_SIGINFO_H
31 #define _SYS_SIGINFO_H
33 #pragma ident "%Z%%M% %I% %E% SMI"
35 #include <sys/feature_tests.h>
36 #include <sys/types.h>
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
42 #if !defined(__XOPEN_OR_POSIX) || (_POSIX_C_SOURCE > 2) || \
43 defined(__EXTENSIONS__)
46 * The union sigval is also defined in <time.h> as per X/Open and
47 * POSIX requirements.
49 #ifndef _SIGVAL
50 #define _SIGVAL
51 union sigval {
52 int sival_int; /* integer value */
53 void *sival_ptr; /* pointer value */
55 #endif /* _SIGVAL */
57 #if defined(_SYSCALL32)
59 /* Kernel view of user ILP32 sigval */
61 union sigval32 {
62 int32_t sival_int; /* integer value */
63 caddr32_t sival_ptr; /* pointer value */
66 #endif /* _SYSCALL32 */
68 #else /* needed in siginfo_t structure */
70 union __sigval {
71 int __sival_int; /* integer value */
72 void *__sival_ptr; /* pointer value */
75 #endif /* !defined(_POSIX_C_SOURCE) || (_POSIX_C_SOURCE > 2)... */
77 #if !defined(__XOPEN_OR_POSIX) || (_POSIX_C_SOURCE > 2) || \
78 defined(__EXTENSIONS__)
81 * The sigevent structure is also defined in <time.h> as per X/Open and
82 * POSIX requirements.
84 #ifndef _SIGEVENT
85 #define _SIGEVENT
86 struct sigevent {
87 int sigev_notify; /* notification mode */
88 int sigev_signo; /* signal number */
89 union sigval sigev_value; /* signal value */
90 void (*sigev_notify_function)(union sigval);
91 pthread_attr_t *sigev_notify_attributes;
92 int __sigev_pad2;
94 #endif /* _SIGEVENT */
96 /* values of sigev_notify */
97 #define SIGEV_NONE 1 /* no notification */
98 #define SIGEV_SIGNAL 2 /* queued signal notification */
99 #define SIGEV_THREAD 3 /* call back from another thread */
100 #define SIGEV_PORT 4 /* use event port for notification */
102 #if defined(_SYSCALL32)
104 /* Kernel view of user ILP32 sigevent */
106 struct sigevent32 {
107 int32_t sigev_notify; /* notification mode */
108 int32_t sigev_signo; /* signal number */
109 union sigval32 sigev_value; /* signal value */
110 caddr32_t sigev_notify_function;
111 caddr32_t sigev_notify_attributes;
112 int32_t __sigev_pad2;
115 #endif /* _SYSCALL32 */
117 #endif /* !defined(__XOPEN_OR_POSIX) || (_POSIX_C_SOURCE > 2)... */
119 #if !defined(_POSIX_C_SOURCE) || (_POSIX_C_SOURCE > 2) || \
120 defined(__EXTENSIONS__)
122 * negative signal codes are reserved for future use for user generated
123 * signals
126 #define SI_FROMUSER(sip) ((sip)->si_code <= 0)
127 #define SI_FROMKERNEL(sip) ((sip)->si_code > 0)
129 #define SI_NOINFO 32767 /* no signal information */
130 #define SI_DTRACE 2050 /* kernel generated signal via DTrace action */
131 #define SI_RCTL 2049 /* kernel generated signal via rctl action */
132 #define SI_USER 0 /* user generated signal via kill() */
133 #define SI_LWP (-1) /* user generated signal via lwp_kill() */
134 #define SI_QUEUE (-2) /* user generated signal via sigqueue() */
135 #define SI_TIMER (-3) /* from timer expiration */
136 #define SI_ASYNCIO (-4) /* from asynchronous I/O completion */
137 #define SI_MESGQ (-5) /* from message arrival */
138 #endif /* !defined(_POSIX_C_SOURCE) || (_POSIX_C_SOURCE > 2)... */
140 #if !defined(_POSIX_C_SOURCE) || defined(_XPG4_2) || defined(__EXTENSIONS__)
142 * Get the machine dependent signal codes (SIGILL, SIGFPE, SIGSEGV, and
143 * SIGBUS) from <sys/machsig.h>
146 #include <sys/machsig.h>
149 * SIGTRAP signal codes
152 #define TRAP_BRKPT 1 /* breakpoint trap */
153 #define TRAP_TRACE 2 /* trace trap */
154 #define TRAP_RWATCH 3 /* read access watchpoint trap */
155 #define TRAP_WWATCH 4 /* write access watchpoint trap */
156 #define TRAP_XWATCH 5 /* execute access watchpoint trap */
157 #define TRAP_DTRACE 6 /* problem with fasttrap DTrace provider */
158 #if !defined(_XOPEN_SOURCE) || defined(__EXTENSIONS__)
159 #define NSIGTRAP 6
160 #endif /* !defined(_XOPEN_SOURCE) || defined(__EXTENSIONS__) */
163 * SIGCLD signal codes
166 #define CLD_EXITED 1 /* child has exited */
167 #define CLD_KILLED 2 /* child was killed */
168 #define CLD_DUMPED 3 /* child has coredumped */
169 #define CLD_TRAPPED 4 /* traced child has stopped */
170 #define CLD_STOPPED 5 /* child has stopped on signal */
171 #define CLD_CONTINUED 6 /* stopped child has continued */
173 #if !defined(_XOPEN_SOURCE) || defined(__EXTENSIONS__)
174 #define NSIGCLD 6
175 #endif /* !defined(_XOPEN_SOURCE) || defined(__EXTENSIONS__) */
178 * SIGPOLL signal codes
181 #define POLL_IN 1 /* input available */
182 #define POLL_OUT 2 /* output possible */
183 #define POLL_MSG 3 /* message available */
184 #define POLL_ERR 4 /* I/O error */
185 #define POLL_PRI 5 /* high priority input available */
186 #define POLL_HUP 6 /* device disconnected */
188 #if !defined(_XOPEN_SOURCE) || defined(__EXTENSIONS__)
189 #define NSIGPOLL 6
190 #endif /* !defined(_XOPEN_SOURCE) || defined(__EXTENSIONS__) */
192 #endif /* !defined(_POSIX_C_SOURCE) || defined(_XPG4_2) ... */
194 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__)
196 * SIGPROF signal codes
199 #define PROF_SIG 1 /* have to set code non-zero */
200 #define NSIGPROF 1
202 #endif /* !defined(__XOPEN_OR_POSIX) || defined (__EXTENSIONS__) */
204 #if !defined(_POSIX_C_SOURCE) || (_POSIX_C_SOURCE > 2) || \
205 defined(__EXTENSIONS__)
207 #ifdef _LP64
208 #define SI_MAXSZ 256
209 #define SI_PAD ((SI_MAXSZ / sizeof (int)) - 4)
210 #else
211 #define SI_MAXSZ 128
212 #define SI_PAD ((SI_MAXSZ / sizeof (int)) - 3)
213 #endif
216 * Inclusion of <sys/time_impl.h> is needed for the declaration of
217 * timestruc_t. However, since inclusion of <sys/time_impl.h> results
218 * in X/Open and POSIX namespace pollution, the definition for
219 * timestruct_t has been duplicated in a standards namespace safe header
220 * <sys/time_std_impl.h>. In <sys/time_std_impl.h>, the structure
221 * name, tag, and member names, as well as the type itself, all have
222 * leading underscores to protect namespace.
224 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__)
225 #include <sys/time_impl.h>
226 #else
227 #include <sys/time_std_impl.h>
228 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */
231 * The inclusion of <sys/types.h> is needed for definitions of pid_t, etc.
232 * Placement here is due to a dependency in <sys/select.h> which is included
233 * by <sys/types.h> for the sigevent structure. Hence this inclusion must
234 * follow that definition.
236 #include <sys/types.h> /* for definitions of pid_t, etc. */
238 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__)
239 typedef struct siginfo { /* pollutes POSIX/XOPEN namespace */
240 #else
241 typedef struct {
242 #endif
243 int si_signo; /* signal from signal.h */
244 int si_code; /* code from above */
245 int si_errno; /* error from errno.h */
246 #ifdef _LP64
247 int si_pad; /* _LP64 union starts on an 8-byte boundary */
248 #endif
249 union {
251 int __pad[SI_PAD]; /* for future growth */
253 struct { /* kill(), SIGCLD, siqqueue() */
254 pid_t __pid; /* process ID */
255 union {
256 struct {
257 uid_t __uid;
258 #if !defined(__XOPEN_OR_POSIX) || (_POSIX_C_SOURCE > 2) || \
259 defined(__EXTENSIONS__)
260 union sigval __value;
261 #else
262 union __sigval __value;
263 #endif
264 } __kill;
265 struct {
266 clock_t __utime;
267 int __status;
268 clock_t __stime;
269 } __cld;
270 } __pdata;
271 ctid_t __ctid; /* contract ID */
272 zoneid_t __zoneid; /* zone ID */
273 } __proc;
275 struct { /* SIGSEGV, SIGBUS, SIGILL, SIGTRAP, SIGFPE */
276 void *__addr; /* faulting address */
277 int __trapno; /* illegal trap number */
278 caddr_t __pc; /* instruction address */
279 } __fault;
281 struct { /* SIGPOLL, SIGXFSZ */
282 /* fd not currently available for SIGPOLL */
283 int __fd; /* file descriptor */
284 long __band;
285 } __file;
287 struct { /* SIGPROF */
288 caddr_t __faddr; /* last fault address */
289 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__)
290 timestruc_t __tstamp; /* real time stamp */
291 #else
292 _timestruc_t __tstamp; /* real time stamp */
293 #endif
294 short __syscall; /* current syscall */
295 char __nsysarg; /* number of arguments */
296 char __fault; /* last fault type */
297 long __sysarg[8]; /* syscall arguments */
298 int __mstate[10]; /* see <sys/msacct.h> */
299 } __prof;
301 struct { /* SI_RCTL */
302 int32_t __entity; /* type of entity exceeding */
303 } __rctl;
304 } __data;
306 } siginfo_t;
308 #if defined(_SYSCALL32)
310 /* Kernel view of user ILP32 siginfo struct */
312 #define SI32_MAXSZ 128
313 #define SI32_PAD ((SI32_MAXSZ / sizeof (int32_t)) - 3)
315 typedef struct siginfo32 {
317 int32_t si_signo; /* signal from signal.h */
318 int32_t si_code; /* code from above */
319 int32_t si_errno; /* error from errno.h */
321 union {
323 int32_t __pad[SI32_PAD]; /* for future growth */
325 struct { /* kill(), SIGCLD, siqqueue() */
326 pid32_t __pid; /* process ID */
327 union {
328 struct {
329 uid32_t __uid;
330 union sigval32 __value;
331 } __kill;
332 struct {
333 clock32_t __utime;
334 int32_t __status;
335 clock32_t __stime;
336 } __cld;
337 } __pdata;
338 id32_t __ctid; /* contract ID */
339 id32_t __zoneid; /* zone ID */
340 } __proc;
342 struct { /* SIGSEGV, SIGBUS, SIGILL, SIGTRAP, SIGFPE */
343 caddr32_t __addr; /* faulting address */
344 int32_t __trapno; /* illegal trap number */
345 caddr32_t __pc; /* instruction address */
346 } __fault;
348 struct { /* SIGPOLL, SIGXFSZ */
349 /* fd not currently available for SIGPOLL */
350 int32_t __fd; /* file descriptor */
351 int32_t __band;
352 } __file;
354 struct { /* SIGPROF */
355 caddr32_t __faddr; /* last fault address */
356 timestruc32_t __tstamp; /* real time stamp */
357 int16_t __syscall; /* current syscall */
358 int8_t __nsysarg; /* number of arguments */
359 int8_t __fault; /* last fault type */
360 int32_t __sysarg[8]; /* syscall arguments */
361 int32_t __mstate[10]; /* see <sys/msacct.h> */
362 } __prof;
364 struct { /* SI_RCTL */
365 int32_t __entity; /* type of entity exceeding */
366 } __rctl;
368 } __data;
370 } siginfo32_t;
372 #endif /* _SYSCALL32 */
375 * XXX -- internal version is identical to siginfo_t but without the padding.
376 * This must be maintained in sync with it.
379 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__)
381 typedef struct k_siginfo {
382 int si_signo; /* signal from signal.h */
383 int si_code; /* code from above */
384 int si_errno; /* error from errno.h */
385 #ifdef _LP64
386 int si_pad; /* _LP64 union starts on an 8-byte boundary */
387 #endif
388 union {
389 struct { /* kill(), SIGCLD, siqqueue() */
390 pid_t __pid; /* process ID */
391 union {
392 struct {
393 uid_t __uid;
394 union sigval __value;
395 } __kill;
396 struct {
397 clock_t __utime;
398 int __status;
399 clock_t __stime;
400 } __cld;
401 } __pdata;
402 ctid_t __ctid; /* contract ID */
403 zoneid_t __zoneid; /* zone ID */
404 } __proc;
406 struct { /* SIGSEGV, SIGBUS, SIGILL, SIGTRAP, SIGFPE */
407 void *__addr; /* faulting address */
408 int __trapno; /* illegal trap number */
409 caddr_t __pc; /* instruction address */
410 } __fault;
412 struct { /* SIGPOLL, SIGXFSZ */
413 /* fd not currently available for SIGPOLL */
414 int __fd; /* file descriptor */
415 long __band;
416 } __file;
418 struct { /* SIGPROF */
419 caddr_t __faddr; /* last fault address */
421 #if !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__)
422 timestruc_t __tstamp; /* real time stamp */
423 #else
424 _timestruc_t __tstamp; /* real time stamp */
425 #endif
426 short __syscall; /* current syscall */
427 char __nsysarg; /* number of arguments */
428 char __fault; /* last fault type */
429 /* these are omitted to keep k_siginfo_t small */
430 /* long __sysarg[8]; */
431 /* int __mstate[10]; */
432 } __prof;
434 struct { /* SI_RCTL */
435 int32_t __entity; /* type of entity exceeding */
436 } __rctl;
438 } __data;
440 } k_siginfo_t;
442 typedef struct sigqueue {
443 struct sigqueue *sq_next;
444 k_siginfo_t sq_info;
445 void (*sq_func)(struct sigqueue *); /* destructor function */
446 void *sq_backptr; /* pointer to the data structure */
447 /* associated by sq_func() */
448 int sq_external; /* comes from outside the contract */
449 } sigqueue_t;
451 /* indication whether to queue the signal or not */
452 #define SI_CANQUEUE(c) ((c) <= SI_QUEUE)
454 #endif /* !defined(__XOPEN_OR_POSIX) || defined(__EXTENSIONS__) */
456 #define si_pid __data.__proc.__pid
457 #define si_ctid __data.__proc.__ctid
458 #define si_zoneid __data.__proc.__zoneid
459 #define si_status __data.__proc.__pdata.__cld.__status
460 #define si_stime __data.__proc.__pdata.__cld.__stime
461 #define si_utime __data.__proc.__pdata.__cld.__utime
462 #define si_uid __data.__proc.__pdata.__kill.__uid
463 #define si_value __data.__proc.__pdata.__kill.__value
464 #define si_addr __data.__fault.__addr
465 #define si_trapno __data.__fault.__trapno
466 #define si_trapafter __data.__fault.__trapno
467 #define si_pc __data.__fault.__pc
468 #define si_fd __data.__file.__fd
469 #define si_band __data.__file.__band
470 #define si_tstamp __data.__prof.__tstamp
471 #define si_syscall __data.__prof.__syscall
472 #define si_nsysarg __data.__prof.__nsysarg
473 #define si_sysarg __data.__prof.__sysarg
474 #define si_fault __data.__prof.__fault
475 #define si_faddr __data.__prof.__faddr
476 #define si_mstate __data.__prof.__mstate
477 #define si_entity __data.__rctl.__entity
479 #endif /* !defined(_POSIX_C_SOURCE) || (_POSIX_C_SOURCE > 2) ... */
482 #if defined(_SYSCALL32_IMPL)
484 extern void siginfo_kto32(const k_siginfo_t *, siginfo32_t *);
485 extern void siginfo_32tok(const siginfo32_t *, k_siginfo_t *);
487 #endif /* _SYSCALL32_IMPL */
489 #ifdef __cplusplus
491 #endif
493 #endif /* _SYS_SIGINFO_H */