~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/include/asm-sparc64/siginfo.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef _SPARC64_SIGINFO_H
  2 #define _SPARC64_SIGINFO_H
  3 
  4 #include <linux/types.h>
  5 
  6 typedef union sigval {
  7         int sival_int;
  8         void *sival_ptr;
  9 } sigval_t;
 10 
 11 #ifdef __KERNEL__
 12 
 13 typedef union sigval32 {
 14         int sival_int;
 15         u32 sival_ptr;
 16 } sigval_t32;
 17 
 18 #endif /* __KERNEL__ */
 19 
 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)
 23 
 24 typedef struct siginfo {
 25         int si_signo;
 26         int si_errno;
 27         int si_code;
 28 
 29         union {
 30                 int _pad[SI_PAD_SIZE];
 31 
 32                 /* kill() */
 33                 struct {
 34                         pid_t _pid;             /* sender's pid */
 35                         uid_t _uid;             /* sender's uid */
 36                 } _kill;
 37 
 38                 /* POSIX.1b timers */
 39                 struct {
 40                         unsigned int _timer1;
 41                         unsigned int _timer2;
 42                 } _timer;
 43 
 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;
 50 
 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;
 59 
 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;
 65 
 66                 /* SIGPOLL */
 67                 struct {
 68                         long _band;     /* POLL_IN, POLL_OUT, POLL_MSG */
 69                         int _fd;
 70                 } _sigpoll;
 71         } _sifields;
 72 } siginfo_t;
 73 
 74 #ifdef __KERNEL__
 75 
 76 typedef struct siginfo32 {
 77         int si_signo;
 78         int si_errno;
 79         int si_code;
 80 
 81         union {
 82                 int _pad[SI_PAD_SIZE32];
 83 
 84                 /* kill() */
 85                 struct {
 86                         __kernel_pid_t32 _pid;          /* sender's pid */
 87                         unsigned int _uid;              /* sender's uid */
 88                 } _kill;
 89 
 90                 /* POSIX.1b timers */
 91                 struct {
 92                         unsigned int _timer1;
 93                         unsigned int _timer2;
 94                 } _timer;
 95 
 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;
102 
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;
111 
112                 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGEMT */
113                 struct {
114                         u32 _addr; /* faulting insn/memory ref. */
115                         int _trapno;
116                 } _sigfault;
117 
118                 /* SIGPOLL */
119                 struct {
120                         int _band;      /* POLL_IN, POLL_OUT, POLL_MSG */
121                         int _fd;
122                 } _sigpoll;
123         } _sifields;
124 } siginfo_t32;
125 
126 #endif /* __KERNEL__ */
127 
128 /*
129  * How these fields are to be accessed.
130  */
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
143 
144 #ifdef __KERNEL__
145 #define __SI_MASK       0xffff0000
146 #define __SI_KILL       (0 << 16)
147 #define __SI_TIMER      (1 << 16)
148 #define __SI_POLL       (2 << 16)
149 #define __SI_FAULT      (3 << 16)
150 #define __SI_CHLD       (4 << 16)
151 #define __SI_RT         (5 << 16)
152 #define __SI_CODE(T,N)  ((T) << 16 | ((N) & 0xffff))
153 #else
154 #define __SI_KILL       0
155 #define __SI_TIMER      0
156 #define __SI_POLL       0
157 #define __SI_FAULT      0
158 #define __SI_CHLD       0
159 #define __SI_RT         0
160 #define __SI_CODE(T,N)  (N)
161 #endif
162 
163 /*
164  * si_code values
165  * Digital reserves positive values for kernel-generated signals.
166  */
167 #define SI_NOINFO       32767           /* no information in siginfo_t */
168 #define SI_USER         0               /* sent by kill, sigsend, raise */
169 #define SI_KERNEL       0x80            /* sent by the kernel from somewhere */
170 #define SI_QUEUE        -1              /* sent by sigqueue */
171 #define SI_TIMER __SI_CODE(__SI_TIMER,-2) /* sent by timer expiration */
172 #define SI_MESGQ        -3              /* sent by real time mesq state change */
173 #define SI_ASYNCIO      -4              /* sent by AIO completion */
174 #define SI_SIGIO        -5              /* sent by queued SIGIO */
175 
176 #define SI_FROMUSER(siptr)      ((siptr)->si_code <= 0)
177 #define SI_FROMKERNEL(siptr)    ((siptr)->si_code > 0)
178 
179 /*
180  * SIGILL si_codes
181  */
182 #define ILL_ILLOPC      (__SI_FAULT|1)  /* illegal opcode */
183 #define ILL_ILLOPN      (__SI_FAULT|2)  /* illegal operand */
184 #define ILL_ILLADR      (__SI_FAULT|3)  /* illegal addressing mode */
185 #define ILL_ILLTRP      (__SI_FAULT|4)  /* illegal trap */
186 #define ILL_PRVOPC      (__SI_FAULT|5)  /* privileged opcode */
187 #define ILL_PRVREG      (__SI_FAULT|6)  /* privileged register */
188 #define ILL_COPROC      (__SI_FAULT|7)  /* coprocessor error */
189 #define ILL_BADSTK      (__SI_FAULT|8)  /* internal stack error */
190 #define NSIGILL         8
191 
192 /*
193  * SIGFPE si_codes
194  */
195 #define FPE_INTDIV      (__SI_FAULT|1)  /* integer divide by zero */
196 #define FPE_INTOVF      (__SI_FAULT|2)  /* integer overflow */
197 #define FPE_FLTDIV      (__SI_FAULT|3)  /* floating point divide by zero */
198 #define FPE_FLTOVF      (__SI_FAULT|4)  /* floating point overflow */
199 #define FPE_FLTUND      (__SI_FAULT|5)  /* floating point underflow */
200 #define FPE_FLTRES      (__SI_FAULT|6)  /* floating point inexact result */
201 #define FPE_FLTINV      (__SI_FAULT|7)  /* floating point invalid operation */
202 #define FPE_FLTSUB      (__SI_FAULT|8)  /* subscript out of range */
203 #define NSIGFPE         8
204 
205 /*
206  * SIGSEGV si_codes
207  */
208 #define SEGV_MAPERR     (__SI_FAULT|1)  /* address not mapped to object */
209 #define SEGV_ACCERR     (__SI_FAULT|2)  /* invalid permissions for mapped object */
210 #define NSIGSEGV        2
211 
212 /*
213  * SIGBUS si_codes
214  */
215 #define BUS_ADRALN      (__SI_FAULT|1)  /* invalid address alignment */
216 #define BUS_ADRERR      (__SI_FAULT|2)  /* non-existant physical address */
217 #define BUS_OBJERR      (__SI_FAULT|3)  /* object specific hardware error */
218 #define NSIGBUS         3
219 
220 /*
221  * SIGTRAP si_codes
222  */
223 #define TRAP_BRKPT      (__SI_FAULT|1)  /* process breakpoint */
224 #define TRAP_TRACE      (__SI_FAULT|2)  /* process trace trap */
225 #define NSIGTRAP        2
226 
227 /*
228  * SIGCHLD si_codes
229  */
230 #define CLD_EXITED      (__SI_CHLD|1)   /* child has exited */
231 #define CLD_KILLED      (__SI_CHLD|2)   /* child was killed */
232 #define CLD_DUMPED      (__SI_CHLD|3)   /* child terminated abnormally */
233 #define CLD_TRAPPED     (__SI_CHLD|4)   /* traced child has trapped */
234 #define CLD_STOPPED     (__SI_CHLD|5)   /* child has stopped */
235 #define CLD_CONTINUED   (__SI_CHLD|6)   /* stopped child has continued */
236 #define NSIGCHLD        6
237 
238 /*
239  * SIGPOLL si_codes
240  */
241 #define POLL_IN         (__SI_POLL|1)   /* data input available */
242 #define POLL_OUT        (__SI_POLL|2)   /* output buffers available */
243 #define POLL_MSG        (__SI_POLL|3)   /* input message available */
244 #define POLL_ERR        (__SI_POLL|4)   /* i/o error */
245 #define POLL_PRI        (__SI_POLL|5)   /* high priority input available */
246 #define POLL_HUP        (__SI_POLL|6)   /* device disconnected */
247 #define NSIGPOLL        6
248 
249 /*
250  * SIGEMT si_codes
251  */
252 #define EMT_TAGOVF      (__SI_FAULT|1)  /* tag overflow */
253 #define NSIGEMT         1
254 
255 /*
256  * sigevent definitions
257  * 
258  * It seems likely that SIGEV_THREAD will have to be handled from 
259  * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
260  * thread manager then catches and does the appropriate nonsense.
261  * However, everything is written out here so as to not get lost.
262  */
263 #define SIGEV_SIGNAL    0       /* notify via signal */
264 #define SIGEV_NONE      1       /* other notification: meaningless */
265 #define SIGEV_THREAD    2       /* deliver via thread creation */
266 
267 #define SIGEV_MAX_SIZE  64
268 #define SIGEV_PAD_SIZE  ((SIGEV_MAX_SIZE/sizeof(int)) - 4)
269 #define SIGEV_PAD_SIZE32 ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
270 
271 typedef struct sigevent {
272         sigval_t sigev_value;
273         int sigev_signo;
274         int sigev_notify;
275         union {
276                 int _pad[SIGEV_PAD_SIZE];
277 
278                 struct {
279                         void (*_function)(sigval_t);
280                         void *_attribute;       /* really pthread_attr_t */
281                 } _sigev_thread;
282         } _sigev_un;
283 } sigevent_t;
284 
285 #ifdef __KERNEL__
286 
287 typedef struct sigevent32 {
288         sigval_t sigev_value;
289         int sigev_signo;
290         int sigev_notify;
291         union {
292                 int _pad[SIGEV_PAD_SIZE32];
293 
294                 struct {
295                         u32 _function;
296                         u32 _attribute; /* really pthread_attr_t */
297                 } _sigev_thread;
298         } _sigev_un;
299 } sigevent_t32;
300 
301 #include <linux/string.h>
302 
303 extern inline void copy_siginfo(siginfo_t *to, siginfo_t *from)
304 {
305         if (from->si_code < 0)
306                 *to = *from;
307         else
308                 /* _sigchld is currently the largest know union member */
309                 memcpy(to, from, 4*sizeof(int) + sizeof(from->_sifields._sigchld));
310 }
311 
312 extern int copy_siginfo_to_user(siginfo_t *to, siginfo_t *from);
313 extern int copy_siginfo_to_user32(siginfo_t32 *to, siginfo_t *from);
314 
315 #endif /* __KERNEL__ */
316 
317 #define sigev_notify_function   _sigev_un._sigev_thread._function
318 #define sigev_notify_attributes _sigev_un._sigev_thread._attribute
319 
320 #endif
321 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.