Merge with 2.3.48.
[linux-2.6/linux-mips.git] / include / asm-ia64 / siginfo.h
blobd3b71ccaf1971ff9cd759140c71ab38cf56f6849
1 #ifndef _ASM_IA64_SIGINFO_H
2 #define _ASM_IA64_SIGINFO_H
4 /*
5 * Copyright (C) 1998, 1999 Hewlett-Packard Co
6 * Copyright (C) 1998, 1999 David Mosberger-Tang <davidm@hpl.hp.com>
7 */
9 #include <linux/types.h>
11 typedef union sigval {
12 int sival_int;
13 void *sival_ptr;
14 } sigval_t;
16 #define SI_MAX_SIZE 128
17 #define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
19 typedef struct siginfo {
20 int si_signo;
21 int si_errno;
22 int si_code;
24 union {
25 int _pad[SI_PAD_SIZE];
27 /* kill() */
28 struct {
29 pid_t _pid; /* sender's pid */
30 uid_t _uid; /* sender's uid */
31 } _kill;
33 /* POSIX.1b timers */
34 struct {
35 unsigned int _timer1;
36 unsigned int _timer2;
37 } _timer;
39 /* POSIX.1b signals */
40 struct {
41 pid_t _pid; /* sender's pid */
42 uid_t _uid; /* sender's uid */
43 sigval_t _sigval;
44 } _rt;
46 /* SIGCHLD */
47 struct {
48 pid_t _pid; /* which child */
49 uid_t _uid; /* sender's uid */
50 int _status; /* exit code */
51 clock_t _utime;
52 clock_t _stime;
53 } _sigchld;
55 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
56 struct {
57 void *_addr; /* faulting insn/memory ref. */
58 int _imm; /* immediate value for "break" */
59 } _sigfault;
61 /* SIGPOLL */
62 struct {
63 long _band; /* POLL_IN, POLL_OUT, POLL_MSG (XPG requires a "long") */
64 int _fd;
65 } _sigpoll;
66 } _sifields;
67 } siginfo_t;
70 * How these fields are to be accessed.
72 #define si_pid _sifields._kill._pid
73 #define si_uid _sifields._kill._uid
74 #define si_status _sifields._sigchld._status
75 #define si_utime _sifields._sigchld._utime
76 #define si_stime _sifields._sigchld._stime
77 #define si_value _sifields._rt._sigval
78 #define si_int _sifields._rt._sigval.sival_int
79 #define si_ptr _sifields._rt._sigval.sival_ptr
80 #define si_addr _sifields._sigfault._addr
81 #define si_imm _sifields._sigfault._imm /* as per UNIX SysV ABI spec */
82 #define si_band _sifields._sigpoll._band
83 #define si_fd _sifields._sigpoll._fd
86 * si_code values
87 * Positive values for kernel-generated signals.
89 #define SI_USER 0 /* sent by kill, sigsend, raise */
90 #define SI_KERNEL 0x80 /* sent by the kernel from somewhere */
91 #define SI_QUEUE -1 /* sent by sigqueue */
92 #define SI_TIMER -2 /* sent by timer expiration */
93 #define SI_MESGQ -3 /* sent by real time mesq state change */
94 #define SI_ASYNCIO -4 /* sent by AIO completion */
95 #define SI_SIGIO -5 /* sent by queued SIGIO */
97 #define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
98 #define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
101 * SIGILL si_codes
103 #define ILL_ILLOPC 1 /* illegal opcode */
104 #define ILL_ILLOPN 2 /* illegal operand */
105 #define ILL_ILLADR 3 /* illegal addressing mode */
106 #define ILL_ILLTRP 4 /* illegal trap */
107 #define ILL_PRVOPC 5 /* privileged opcode */
108 #define ILL_PRVREG 6 /* privileged register */
109 #define ILL_COPROC 7 /* coprocessor error */
110 #define ILL_BADSTK 8 /* internal stack error */
111 #define ILL_BADIADDR 9 /* unimplemented instruction address */
112 #define __ILL_BREAK 10 /* illegal break */
113 #define NSIGILL 10
116 * SIGFPE si_codes
118 #define FPE_INTDIV 1 /* integer divide by zero */
119 #define FPE_INTOVF 2 /* integer overflow */
120 #define FPE_FLTDIV 3 /* floating point divide by zero */
121 #define FPE_FLTOVF 4 /* floating point overflow */
122 #define FPE_FLTUND 5 /* floating point underflow */
123 #define FPE_FLTRES 6 /* floating point inexact result */
124 #define FPE_FLTINV 7 /* floating point invalid operation */
125 #define FPE_FLTSUB 8 /* subscript out of range */
126 #define __FPE_DECOVF 9 /* decimal overflow */
127 #define __FPE_DECDIV 10 /* decimal division by zero */
128 #define __FPE_DECERR 11 /* packed decimal error */
129 #define __FPE_INVASC 12 /* invalid ASCII digit */
130 #define __FPE_INVDEC 13 /* invalid decimal digit */
131 #define NSIGFPE 13
134 * SIGSEGV si_codes
136 #define SEGV_MAPERR 1 /* address not mapped to object */
137 #define SEGV_ACCERR 2 /* invalid permissions for mapped object */
138 #define __SEGV_PSTKOVF 3 /* paragraph stack overflow */
139 #define NSIGSEGV 3
142 * SIGBUS si_codes
144 #define BUS_ADRALN 1 /* invalid address alignment */
145 #define BUS_ADRERR 2 /* non-existant physical address */
146 #define BUS_OBJERR 3 /* object specific hardware error */
147 #define NSIGBUS 3
150 * SIGTRAP si_codes
152 #define TRAP_BRKPT 1 /* process breakpoint */
153 #define TRAP_TRACE 2 /* process trace trap */
154 #define TRAP_BRANCH 3 /* process taken branch trap */
155 #define NSIGTRAP 3
158 * SIGCHLD si_codes
160 #define CLD_EXITED 1 /* child has exited */
161 #define CLD_KILLED 2 /* child was killed */
162 #define CLD_DUMPED 3 /* child terminated abnormally */
163 #define CLD_TRAPPED 4 /* traced child has trapped */
164 #define CLD_STOPPED 5 /* child has stopped */
165 #define CLD_CONTINUED 6 /* stopped child has continued */
166 #define NSIGCHLD 6
169 * SIGPOLL si_codes
171 #define POLL_IN 1 /* data input available */
172 #define POLL_OUT 2 /* output buffers available */
173 #define POLL_MSG 3 /* input message available */
174 #define POLL_ERR 4 /* i/o error */
175 #define POLL_PRI 5 /* high priority input available */
176 #define POLL_HUP 6 /* device disconnected */
177 #define NSIGPOLL 6
180 * sigevent definitions
182 * It seems likely that SIGEV_THREAD will have to be handled from
183 * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
184 * thread manager then catches and does the appropriate nonsense.
185 * However, everything is written out here so as to not get lost.
187 #define SIGEV_SIGNAL 0 /* notify via signal */
188 #define SIGEV_NONE 1 /* other notification: meaningless */
189 #define SIGEV_THREAD 2 /* deliver via thread creation */
191 #define SIGEV_MAX_SIZE 64
192 #define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
194 typedef struct sigevent {
195 sigval_t sigev_value;
196 int sigev_signo;
197 int sigev_notify;
198 union {
199 int _pad[SIGEV_PAD_SIZE];
201 struct {
202 void (*_function)(sigval_t);
203 void *_attribute; /* really pthread_attr_t */
204 } _sigev_thread;
205 } _sigev_un;
206 } sigevent_t;
208 #define sigev_notify_function _sigev_un._sigev_thread._function
209 #define sigev_notify_attributes _sigev_un._sigev_thread._attribute
211 #endif /* _ASM_IA64_SIGINFO_H */