siginfo.h
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020: #if !defined _SIGNAL_H && !defined __need_siginfo_t \
021: && !defined __need_sigevent_t
022: # error "Never include this file directly. Use <signal.h> instead"
023: #endif
024:
025: #include <bits/wordsize.h>
026:
027: #if (!defined __have_sigval_t \
028: && (defined _SIGNAL_H || defined __need_siginfo_t \
029: || defined __need_sigevent_t))
030: # define __have_sigval_t 1
031:
032:
033: typedef union sigval
034: {
035: int sival_int;
036: void *sival_ptr;
037: } sigval_t;
038: #endif
039:
040: #if (!defined __have_siginfo_t \
041: && (defined _SIGNAL_H || defined __need_siginfo_t))
042: # define __have_siginfo_t 1
043:
044: # define __SI_MAX_SIZE 128
045: # if __WORDSIZE == 64
046: # define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4)
047: # else
048: # define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3)
049: # endif
050:
051: typedef struct siginfo
052: {
053: int si_signo;
054: int si_errno;
055:
056: int si_code;
057:
058: union
059: {
060: int _pad[__SI_PAD_SIZE];
061:
062:
063: struct
064: {
065: __pid_t si_pid;
066: __uid_t si_uid;
067: } _kill;
068:
069:
070: struct
071: {
072: int si_tid;
073: int si_overrun;
074: sigval_t si_sigval;
075: } _timer;
076:
077:
078: struct
079: {
080: __pid_t si_pid;
081: __uid_t si_uid;
082: sigval_t si_sigval;
083: } _rt;
084:
085:
086: struct
087: {
088: __pid_t si_pid;
089: __uid_t si_uid;
090: int si_status;
091: __clock_t si_utime;
092: __clock_t si_stime;
093: } _sigchld;
094:
095:
096: struct
097: {
098: void *si_addr;
099: } _sigfault;
100:
101:
102: struct
103: {
104: long int si_band;
105: int si_fd;
106: } _sigpoll;
107: } _sifields;
108: } siginfo_t;
109:
110:
111:
112: # define si_pid _sifields._kill.si_pid
113: # define si_uid _sifields._kill.si_uid
114: # define si_timerid _sifields._timer.si_tid
115: # define si_overrun _sifields._timer.si_overrun
116: # define si_status _sifields._sigchld.si_status
117: # define si_utime _sifields._sigchld.si_utime
118: # define si_stime _sifields._sigchld.si_stime
119: # define si_value _sifields._rt.si_sigval
120: # define si_int _sifields._rt.si_sigval.sival_int
121: # define si_ptr _sifields._rt.si_sigval.sival_ptr
122: # define si_addr _sifields._sigfault.si_addr
123: # define si_band _sifields._sigpoll.si_band
124: # define si_fd _sifields._sigpoll.si_fd
125:
126:
127:
128:
129: enum
130: {
131: SI_ASYNCNL = -60,
132: # define SI_ASYNCNL SI_ASYNCNL
133: SI_TKILL = -6,
134: # define SI_TKILL SI_TKILL
135: SI_SIGIO,
136: # define SI_SIGIO SI_SIGIO
137: SI_ASYNCIO,
138: # define SI_ASYNCIO SI_ASYNCIO
139: SI_MESGQ,
140: # define SI_MESGQ SI_MESGQ
141: SI_TIMER,
142: # define SI_TIMER SI_TIMER
143: SI_QUEUE,
144: # define SI_QUEUE SI_QUEUE
145: SI_USER,
146: # define SI_USER SI_USER
147: SI_KERNEL = 0x80
148: #define SI_KERNEL SI_KERNEL
149: };
150:
151:
152:
153: enum
154: {
155: ILL_ILLOPC = 1,
156: # define ILL_ILLOPC ILL_ILLOPC
157: ILL_ILLOPN,
158: # define ILL_ILLOPN ILL_ILLOPN
159: ILL_ILLADR,
160: # define ILL_ILLADR ILL_ILLADR
161: ILL_ILLTRP,
162: # define ILL_ILLTRP ILL_ILLTRP
163: ILL_PRVOPC,
164: # define ILL_PRVOPC ILL_PRVOPC
165: ILL_PRVREG,
166: # define ILL_PRVREG ILL_PRVREG
167: ILL_COPROC,
168: # define ILL_COPROC ILL_COPROC
169: ILL_BADSTK
170: # define ILL_BADSTK ILL_BADSTK
171: };
172:
173:
174: enum
175: {
176: FPE_INTDIV = 1,
177: # define FPE_INTDIV FPE_INTDIV
178: FPE_INTOVF,
179: # define FPE_INTOVF FPE_INTOVF
180: FPE_FLTDIV,
181: # define FPE_FLTDIV FPE_FLTDIV
182: FPE_FLTOVF,
183: # define FPE_FLTOVF FPE_FLTOVF
184: FPE_FLTUND,
185: # define FPE_FLTUND FPE_FLTUND
186: FPE_FLTRES,
187: # define FPE_FLTRES FPE_FLTRES
188: FPE_FLTINV,
189: # define FPE_FLTINV FPE_FLTINV
190: FPE_FLTSUB
191: # define FPE_FLTSUB FPE_FLTSUB
192: };
193:
194:
195: enum
196: {
197: SEGV_MAPERR = 1,
198: # define SEGV_MAPERR SEGV_MAPERR
199: SEGV_ACCERR
200: # define SEGV_ACCERR SEGV_ACCERR
201: };
202:
203:
204: enum
205: {
206: BUS_ADRALN = 1,
207: # define BUS_ADRALN BUS_ADRALN
208: BUS_ADRERR,
209: # define BUS_ADRERR BUS_ADRERR
210: BUS_OBJERR
211: # define BUS_OBJERR BUS_OBJERR
212: };
213:
214:
215: enum
216: {
217: TRAP_BRKPT = 1,
218: # define TRAP_BRKPT TRAP_BRKPT
219: TRAP_TRACE
220: # define TRAP_TRACE TRAP_TRACE
221: };
222:
223:
224: enum
225: {
226: CLD_EXITED = 1,
227: # define CLD_EXITED CLD_EXITED
228: CLD_KILLED,
229: # define CLD_KILLED CLD_KILLED
230: CLD_DUMPED,
231: # define CLD_DUMPED CLD_DUMPED
232: CLD_TRAPPED,
233: # define CLD_TRAPPED CLD_TRAPPED
234: CLD_STOPPED,
235: # define CLD_STOPPED CLD_STOPPED
236: CLD_CONTINUED
237: # define CLD_CONTINUED CLD_CONTINUED
238: };
239:
240:
241: enum
242: {
243: POLL_IN = 1,
244: # define POLL_IN POLL_IN
245: POLL_OUT,
246: # define POLL_OUT POLL_OUT
247: POLL_MSG,
248: # define POLL_MSG POLL_MSG
249: POLL_ERR,
250: # define POLL_ERR POLL_ERR
251: POLL_PRI,
252: # define POLL_PRI POLL_PRI
253: POLL_HUP
254: # define POLL_HUP POLL_HUP
255: };
256:
257: # undef __need_siginfo_t
258: #endif
259:
260:
261: #if (defined _SIGNAL_H || defined __need_sigevent_t) \
262: && !defined __have_sigevent_t
263: # define __have_sigevent_t 1
264:
265:
266: # define __SIGEV_MAX_SIZE 64
267: # if __WORDSIZE == 64
268: # define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4)
269: # else
270: # define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
271: # endif
272:
273: typedef struct sigevent
274: {
275: sigval_t sigev_value;
276: int sigev_signo;
277: int sigev_notify;
278:
279: union
280: {
281: int _pad[__SIGEV_PAD_SIZE];
282:
283:
284:
285: __pid_t _tid;
286:
287: struct
288: {
289: void (*_function) (sigval_t);
290: void *_attribute;
291: } _sigev_thread;
292: } _sigev_un;
293: } sigevent_t;
294:
295:
296: # define sigev_notify_function _sigev_un._sigev_thread._function
297: # define sigev_notify_attributes _sigev_un._sigev_thread._attribute
298:
299:
300: enum
301: {
302: SIGEV_SIGNAL = 0,
303: # define SIGEV_SIGNAL SIGEV_SIGNAL
304: SIGEV_NONE,
305: # define SIGEV_NONE SIGEV_NONE
306: SIGEV_THREAD,
307: # define SIGEV_THREAD SIGEV_THREAD
308:
309: SIGEV_THREAD_ID = 4
310: #define SIGEV_THREAD_ID SIGEV_THREAD_ID
311: };
312:
313: #endif
314:
© Andrew Scott 2006 -
2025,
All Rights Reserved