1 /* $Id: siginfo.h,v 1.4 1999/04/28 19:45:20 davem Exp $
5 #ifndef _SPARC_SIGINFO_H
6 #define _SPARC_SIGINFO_H
8 #include <linux/types.h>
10 typedef union sigval
{
15 #define SI_MAX_SIZE 128
16 #define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3)
18 typedef struct siginfo
{
24 int _pad
[SI_PAD_SIZE
];
28 pid_t _pid
; /* sender's pid */
29 uid_t _uid
; /* sender's uid */
38 /* POSIX.1b signals */
40 pid_t _pid
; /* sender's pid */
41 uid_t _uid
; /* sender's uid */
47 pid_t _pid
; /* which child */
48 uid_t _uid
; /* sender's uid */
49 int _status
; /* exit code */
54 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
56 void *_addr
; /* faulting insn/memory ref. */
57 int _trapno
; /* TRAP # which caused the signal */
62 int _band
; /* POLL_IN, POLL_OUT, POLL_MSG */
69 * How these fields are to be accessed.
71 #define si_pid _sifields._kill._pid
72 #define si_uid _sifields._kill._uid
73 #define si_timer1 _sifields._timer._timer1
74 #define si_timer2 _sifields._timer._timer2
75 #define si_status _sifields._sigchld._status
76 #define si_utime _sifields._sigchld._utime
77 #define si_stime _sifields._sigchld._stime
78 #define si_value _sifields._rt._sigval
79 #define si_int _sifields._rt._sigval.sival_int
80 #define si_ptr _sifields._rt._sigval.sival_ptr
81 #define si_addr _sifields._sigfault._addr
82 #define si_trapno _sifields._sigfault._trapno
83 #define si_band _sifields._sigpoll._band
84 #define si_fd _sifields._sigpoll._fd
88 * Digital reserves positive values for kernel-generated signals.
90 #define SI_USER 0 /* sent by kill, sigsend, raise */
91 #define SI_KERNEL 0x80 /* sent by the kernel from somewhere */
92 #define SI_QUEUE -1 /* sent by sigqueue */
93 #define SI_TIMER -2 /* sent by timer expiration */
94 #define SI_MESGQ -3 /* sent by real time mesq state change */
95 #define SI_ASYNCIO -4 /* sent by AIO completion */
96 #define SI_SIGIO -5 /* sent by queued SIGIO */
98 #define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
99 #define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
104 #define ILL_ILLOPC 1 /* illegal opcode */
105 #define ILL_ILLOPN 2 /* illegal operand */
106 #define ILL_ILLADR 3 /* illegal addressing mode */
107 #define ILL_ILLTRP 4 /* illegal trap */
108 #define ILL_PRVOPC 5 /* privileged opcode */
109 #define ILL_PRVREG 6 /* privileged register */
110 #define ILL_COPROC 7 /* coprocessor error */
111 #define ILL_BADSTK 8 /* internal stack error */
117 #define FPE_INTDIV 1 /* integer divide by zero */
118 #define FPE_INTOVF 2 /* integer overflow */
119 #define FPE_FLTDIV 3 /* floating point divide by zero */
120 #define FPE_FLTOVF 4 /* floating point overflow */
121 #define FPE_FLTUND 5 /* floating point underflow */
122 #define FPE_FLTRES 6 /* floating point inexact result */
123 #define FPE_FLTINV 7 /* floating point invalid operation */
124 #define FPE_FLTSUB 8 /* subscript out of range */
130 #define SEGV_MAPERR 1 /* address not mapped to object */
131 #define SEGV_ACCERR 2 /* invalid permissions for mapped object */
137 #define BUS_ADRALN 1 /* invalid address alignment */
138 #define BUS_ADRERR 2 /* non-existant physical address */
139 #define BUS_OBJERR 3 /* object specific hardware error */
145 #define TRAP_BRKPT 1 /* process breakpoint */
146 #define TRAP_TRACE 2 /* process trace trap */
152 #define CLD_EXITED 1 /* child has exited */
153 #define CLD_KILLED 2 /* child was killed */
154 #define CLD_DUMPED 3 /* child terminated abnormally */
155 #define CLD_TRAPPED 4 /* traced child has trapped */
156 #define CLD_STOPPED 5 /* child has stopped */
157 #define CLD_CONTINUED 6 /* stopped child has continued */
163 #define POLL_IN 1 /* data input available */
164 #define POLL_OUT 2 /* output buffers available */
165 #define POLL_MSG 3 /* input message available */
166 #define POLL_ERR 4 /* i/o error */
167 #define POLL_PRI 5 /* high priority input available */
168 #define POLL_HUP 6 /* device disconnected */
172 * sigevent definitions
174 * It seems likely that SIGEV_THREAD will have to be handled from
175 * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
176 * thread manager then catches and does the appropriate nonsense.
177 * However, everything is written out here so as to not get lost.
179 #define SIGEV_SIGNAL 0 /* notify via signal */
180 #define SIGEV_NONE 1 /* other notification: meaningless */
181 #define SIGEV_THREAD 2 /* deliver via thread creation */
183 #define SIGEV_MAX_SIZE 64
184 #define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
186 typedef struct sigevent
{
187 sigval_t sigev_value
;
191 int _pad
[SIGEV_PAD_SIZE
];
194 void (*_function
)(sigval_t
);
195 void *_attribute
; /* really pthread_attr_t */
200 #define sigev_notify_function _sigev_un._sigev_thread._function
201 #define sigev_notify_attributes _sigev_un._sigev_thread._attribute
203 #endif /* !(_SPARC_SIGINFO_H) */