Import 2.3.18pre1
[davej-history.git] / include / asm-sparc64 / siginfo.h
blob9e60d6015ab31da304ff48138e396c56d878352e
1 #ifndef _SPARC64_SIGINFO_H
2 #define _SPARC64_SIGINFO_H
4 #include <linux/types.h>
6 typedef union sigval {
7 int sival_int;
8 void *sival_ptr;
9 } sigval_t;
11 #ifdef __KERNEL__
13 typedef union sigval32 {
14 int sival_int;
15 u32 sival_ptr;
16 } sigval_t32;
18 #endif /* __KERNEL__ */
20 #define SI_MAX_SIZE 128
21 #define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 4)
22 #define SI_PAD_SIZE32 ((SI_MAX_SIZE/sizeof(int)) - 3)
24 typedef struct siginfo {
25 int si_signo;
26 int si_errno;
27 int si_code;
29 union {
30 int _pad[SI_PAD_SIZE];
32 /* kill() */
33 struct {
34 pid_t _pid; /* sender's pid */
35 uid_t _uid; /* sender's uid */
36 } _kill;
38 /* POSIX.1b timers */
39 struct {
40 unsigned int _timer1;
41 unsigned int _timer2;
42 } _timer;
44 /* POSIX.1b signals */
45 struct {
46 pid_t _pid; /* sender's pid */
47 uid_t _uid; /* sender's uid */
48 sigval_t _sigval;
49 } _rt;
51 /* SIGCHLD */
52 struct {
53 pid_t _pid; /* which child */
54 uid_t _uid; /* sender's uid */
55 int _status; /* exit code */
56 clock_t _utime;
57 clock_t _stime;
58 } _sigchld;
60 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGEMT */
61 struct {
62 void *_addr; /* faulting insn/memory ref. */
63 int _trapno; /* TRAP # which caused the signal */
64 } _sigfault;
66 /* SIGPOLL */
67 struct {
68 int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
69 int _fd;
70 } _sigpoll;
71 } _sifields;
72 } siginfo_t;
74 #ifdef __KERNEL__
76 typedef struct siginfo32 {
77 int si_signo;
78 int si_errno;
79 int si_code;
81 union {
82 int _pad[SI_PAD_SIZE32];
84 /* kill() */
85 struct {
86 __kernel_pid_t32 _pid; /* sender's pid */
87 unsigned int _uid; /* sender's uid */
88 } _kill;
90 /* POSIX.1b timers */
91 struct {
92 unsigned int _timer1;
93 unsigned int _timer2;
94 } _timer;
96 /* POSIX.1b signals */
97 struct {
98 __kernel_pid_t32 _pid; /* sender's pid */
99 unsigned int _uid; /* sender's uid */
100 sigval_t32 _sigval;
101 } _rt;
103 /* SIGCHLD */
104 struct {
105 __kernel_pid_t32 _pid; /* which child */
106 unsigned int _uid; /* sender's uid */
107 int _status; /* exit code */
108 __kernel_clock_t32 _utime;
109 __kernel_clock_t32 _stime;
110 } _sigchld;
112 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGEMT */
113 struct {
114 u32 _addr; /* faulting insn/memory ref. */
115 int _trapno;
116 } _sigfault;
118 /* SIGPOLL */
119 struct {
120 int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
121 int _fd;
122 } _sigpoll;
123 } _sifields;
124 } siginfo_t32;
126 #endif /* __KERNEL__ */
129 * How these fields are to be accessed.
131 #define si_pid _sifields._kill._pid
132 #define si_uid _sifields._kill._uid
133 #define si_status _sifields._sigchld._status
134 #define si_utime _sifields._sigchld._utime
135 #define si_stime _sifields._sigchld._stime
136 #define si_value _sifields._rt._sigval
137 #define si_int _sifields._rt._sigval.sival_int
138 #define si_ptr _sifields._rt._sigval.sival_ptr
139 #define si_addr _sifields._sigfault._addr
140 #define si_trapno _sifields._sigfault._trapno
141 #define si_band _sifields._sigpoll._band
142 #define si_fd _sifields._sigpoll._fd
145 * si_code values
146 * Digital reserves positive values for kernel-generated signals.
148 #define SI_NOINFO 32767 /* no information in siginfo_t */
149 #define SI_USER 0 /* sent by kill, sigsend, raise */
150 #define SI_KERNEL 0x80 /* sent by the kernel from somewhere */
151 #define SI_QUEUE -1 /* sent by sigqueue */
152 #define SI_TIMER -2 /* sent by timer expiration */
153 #define SI_MESGQ -3 /* sent by real time mesq state change */
154 #define SI_ASYNCIO -4 /* sent by AIO completion */
155 #define SI_SIGIO -5 /* sent by queued SIGIO */
157 #define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
158 #define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
161 * SIGILL si_codes
163 #define ILL_ILLOPC 1 /* illegal opcode */
164 #define ILL_ILLOPN 2 /* illegal operand */
165 #define ILL_ILLADR 3 /* illegal addressing mode */
166 #define ILL_ILLTRP 4 /* illegal trap */
167 #define ILL_PRVOPC 5 /* privileged opcode */
168 #define ILL_PRVREG 6 /* privileged register */
169 #define ILL_COPROC 7 /* coprocessor error */
170 #define ILL_BADSTK 8 /* internal stack error */
171 #define NSIGILL 8
174 * SIGFPE si_codes
176 #define FPE_INTDIV 1 /* integer divide by zero */
177 #define FPE_INTOVF 2 /* integer overflow */
178 #define FPE_FLTDIV 3 /* floating point divide by zero */
179 #define FPE_FLTOVF 4 /* floating point overflow */
180 #define FPE_FLTUND 5 /* floating point underflow */
181 #define FPE_FLTRES 6 /* floating point inexact result */
182 #define FPE_FLTINV 7 /* floating point invalid operation */
183 #define FPE_FLTSUB 8 /* subscript out of range */
184 #define NSIGFPE 8
187 * SIGSEGV si_codes
189 #define SEGV_MAPERR 1 /* address not mapped to object */
190 #define SRGV_ACCERR 2 /* invalid permissions for mapped object */
191 #define NSIGSEGV 2
194 * SIGBUS si_codes
196 #define BUS_ADRALN 1 /* invalid address alignment */
197 #define BUS_ADRERR 2 /* non-existant physical address */
198 #define BUS_OBJERR 3 /* object specific hardware error */
199 #define NSIGBUS 3
202 * SIGTRAP si_codes
204 #define TRAP_BRKPT 1 /* process breakpoint */
205 #define TRAP_TRACE 2 /* process trace trap */
206 #define NSIGTRAP 2
209 * SIGCHLD si_codes
211 #define CLD_EXITED 1 /* child has exited */
212 #define CLD_KILLED 2 /* child was killed */
213 #define CLD_DUMPED 3 /* child terminated abnormally */
214 #define CLD_TRAPPED 4 /* traced child has trapped */
215 #define CLD_STOPPED 5 /* child has stopped */
216 #define CLD_CONTINUED 6 /* stopped child has continued */
217 #define NSIGCHLD
220 * SIGPOLL si_codes
222 #define POLL_IN 1 /* data input available */
223 #define POLL_OUT 2 /* output buffers available */
224 #define POLL_MSG 3 /* input message available */
225 #define POLL_ERR 4 /* i/o error */
226 #define POLL_PRI 5 /* high priority input available */
227 #define POLL_HUP 6 /* device disconnected */
228 #define NSIGPOLL 6
231 * SIGEMT si_codes
233 #define EMT_TAGOVF 1 /* tag overflow */
234 #define NSIGEMT 1
237 * sigevent definitions
239 * It seems likely that SIGEV_THREAD will have to be handled from
240 * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
241 * thread manager then catches and does the appropriate nonsense.
242 * However, everything is written out here so as to not get lost.
244 #define SIGEV_SIGNAL 0 /* notify via signal */
245 #define SIGEV_NONE 1 /* other notification: meaningless */
246 #define SIGEV_THREAD 2 /* deliver via thread creation */
248 #define SIGEV_MAX_SIZE 64
249 #define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 4)
250 #define SIGEV_PAD_SIZE32 ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
252 typedef struct sigevent {
253 sigval_t sigev_value;
254 int sigev_signo;
255 int sigev_notify;
256 union {
257 int _pad[SIGEV_PAD_SIZE];
259 struct {
260 void (*_function)(sigval_t);
261 void *_attribute; /* really pthread_attr_t */
262 } _sigev_thread;
263 } _sigev_un;
264 } sigevent_t;
266 #ifdef __KERNEL__
268 typedef struct sigevent32 {
269 sigval_t sigev_value;
270 int sigev_signo;
271 int sigev_notify;
272 union {
273 int _pad[SIGEV_PAD_SIZE32];
275 struct {
276 u32 _function;
277 u32 _attribute; /* really pthread_attr_t */
278 } _sigev_thread;
279 } _sigev_un;
280 } sigevent_t32;
282 #endif /* __KERNEL__ */
284 #define sigev_notify_function _sigev_un._sigev_thread._function
285 #define sigev_notify_attributes _sigev_un._sigev_thread._attribute
287 #endif