source: GPL/include/asm/siginfo.h@ 18

Last change on this file since 18 was 18, checked in by vladest, 20 years ago

initial import

File size: 5.3 KB
Line 
1#ifndef _I386_SIGINFO_H
2#define _I386_SIGINFO_H
3
4#include <linux/types.h>
5
6/* XXX: This structure was copied from the Alpha; is there an iBCS version? */
7
8typedef union sigval {
9 int sival_int;
10 void *sival_ptr;
11} sigval_t;
12
13#define SI_MAX_SIZE 128
14#define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
15
16typedef struct siginfo {
17 int si_signo;
18 int si_errno;
19 int si_code;
20
21 union {
22 int _pad[SI_PAD_SIZE];
23
24 /* kill() */
25 struct {
26 pid_t _pid; /* sender's pid */
27 uid_t _uid; /* sender's uid */
28 } _kill;
29
30 /* POSIX.1b timers */
31 struct {
32 unsigned int _timer1;
33 unsigned int _timer2;
34 } _timer;
35
36 /* POSIX.1b signals */
37 struct {
38 pid_t _pid; /* sender's pid */
39 uid_t _uid; /* sender's uid */
40 sigval_t _sigval;
41 } _rt;
42
43 /* SIGCHLD */
44 struct {
45 pid_t _pid; /* which child */
46 uid_t _uid; /* sender's uid */
47 int _status; /* exit code */
48 clock_t _utime;
49 clock_t _stime;
50 } _sigchld;
51
52 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
53 struct {
54 void *_addr; /* faulting insn/memory ref. */
55 } _sigfault;
56
57 /* SIGPOLL */
58 struct {
59 int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
60 int _fd;
61 } _sigpoll;
62 } _sifields;
63} siginfo_t;
64
65/*
66 * How these fields are to be accessed.
67 */
68#define si_pid _sifields._kill._pid
69#define si_uid _sifields._kill._uid
70#define si_status _sifields._sigchld._status
71#define si_utime _sifields._sigchld._utime
72#define si_stime _sifields._sigchld._stime
73#define si_value _sifields._rt._sigval
74#define si_int _sifields._rt._sigval.sival_int
75#define si_ptr _sifields._rt._sigval.sival_ptr
76#define si_addr _sifields._sigfault._addr
77#define si_band _sifields._sigpoll._band
78#define si_fd _sifields._sigpoll._fd
79
80/*
81 * si_code values
82 * Digital reserves positive values for kernel-generated signals.
83 */
84#define SI_USER 0 /* sent by kill, sigsend, raise */
85#define SI_KERNEL 0x80 /* sent by the kernel from somewhere */
86#define SI_QUEUE -1 /* sent by sigqueue */
87#define SI_TIMER -2 /* sent by timer expiration */
88#define SI_MESGQ -3 /* sent by real time mesq state change */
89#define SI_ASYNCIO -4 /* sent by AIO completion */
90#define SI_SIGIO -5 /* sent by queued SIGIO */
91
92#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
93#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
94
95/*
96 * SIGILL si_codes
97 */
98#define ILL_ILLOPC 1 /* illegal opcode */
99#define ILL_ILLOPN 2 /* illegal operand */
100#define ILL_ILLADR 3 /* illegal addressing mode */
101#define ILL_ILLTRP 4 /* illegal trap */
102#define ILL_PRVOPC 5 /* privileged opcode */
103#define ILL_PRVREG 6 /* privileged register */
104#define ILL_COPROC 7 /* coprocessor error */
105#define ILL_BADSTK 8 /* internal stack error */
106#define NSIGILL 8
107
108/*
109 * SIGFPE si_codes
110 */
111#define FPE_INTDIV 1 /* integer divide by zero */
112#define FPE_INTOVF 2 /* integer overflow */
113#define FPE_FLTDIV 3 /* floating point divide by zero */
114#define FPE_FLTOVF 4 /* floating point overflow */
115#define FPE_FLTUND 5 /* floating point underflow */
116#define FPE_FLTRES 6 /* floating point inexact result */
117#define FPE_FLTINV 7 /* floating point invalid operation */
118#define FPE_FLTSUB 8 /* subscript out of range */
119#define NSIGFPE 8
120
121/*
122 * SIGSEGV si_codes
123 */
124#define SEGV_MAPERR 1 /* address not mapped to object */
125#define SEGV_ACCERR 2 /* invalid permissions for mapped object */
126#define NSIGSEGV 2
127
128/*
129 * SIGBUS si_codes
130 */
131#define BUS_ADRALN 1 /* invalid address alignment */
132#define BUS_ADRERR 2 /* non-existant physical address */
133#define BUS_OBJERR 3 /* object specific hardware error */
134#define NSIGBUS 3
135
136/*
137 * SIGTRAP si_codes
138 */
139#define TRAP_BRKPT 1 /* process breakpoint */
140#define TRAP_TRACE 2 /* process trace trap */
141#define NSIGTRAP 2
142
143/*
144 * SIGCHLD si_codes
145 */
146#define CLD_EXITED 1 /* child has exited */
147#define CLD_KILLED 2 /* child was killed */
148#define CLD_DUMPED 3 /* child terminated abnormally */
149#define CLD_TRAPPED 4 /* traced child has trapped */
150#define CLD_STOPPED 5 /* child has stopped */
151#define CLD_CONTINUED 6 /* stopped child has continued */
152#define NSIGCHLD
153
154/*
155 * SIGPOLL si_codes
156 */
157#define POLL_IN 1 /* data input available */
158#define POLL_OUT 2 /* output buffers available */
159#define POLL_MSG 3 /* input message available */
160#define POLL_ERR 4 /* i/o error */
161#define POLL_PRI 5 /* high priority input available */
162#define POLL_HUP 6 /* device disconnected */
163#define NSIGPOLL 6
164
165/*
166 * sigevent definitions
167 *
168 * It seems likely that SIGEV_THREAD will have to be handled from
169 * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
170 * thread manager then catches and does the appropriate nonsense.
171 * However, everything is written out here so as to not get lost.
172 */
173#define SIGEV_SIGNAL 0 /* notify via signal */
174#define SIGEV_NONE 1 /* other notification: meaningless */
175#define SIGEV_THREAD 2 /* deliver via thread creation */
176
177#define SIGEV_MAX_SIZE 64
178#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
179
180typedef struct sigevent {
181 sigval_t sigev_value;
182 int sigev_signo;
183 int sigev_notify;
184 union {
185 int _pad[SIGEV_PAD_SIZE];
186
187 struct {
188 void (*_function)(sigval_t);
189 void *_attribute; /* really pthread_attr_t */
190 } _sigev_thread;
191 } _sigev_un;
192} sigevent_t;
193
194#define sigev_notify_function _sigev_un._sigev_thread._function
195#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
196
197#endif
Note: See TracBrowser for help on using the repository browser.