Annotation of sys/sys/siginfo.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: siginfo.h,v 1.9 2005/12/13 00:35:23 millert 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: * SIGCLD 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(), SIGCLD, siqqueue() */
139: pid_t _pid; /* process ID */
140: union {
141: struct {
142: uid_t _uid;
143: union sigval _value;
144: } _kill;
145: struct {
146: clock_t _utime;
147: int _status;
148: clock_t _stime;
149: } _cld;
150: } _pdata;
151: } _proc;
152: struct { /* SIGSEGV, SIGBUS, SIGILL and SIGFPE */
153: caddr_t _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:
177: #define si_status _data._proc._pdata._cld._status
178: #define si_stime _data._proc._pdata._cld._stime
179: #define si_utime _data._proc._pdata._cld._utime
180: #define si_uid _data._proc._pdata._kill._uid
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 */
CVSweb