master
1#ifndef _SIGNAL_H
2#define _SIGNAL_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
8#include <features.h>
9
10#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
11 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
12 || defined(_BSD_SOURCE)
13
14#ifdef _GNU_SOURCE
15#define __ucontext ucontext
16#endif
17
18#define __NEED_size_t
19#define __NEED_pid_t
20#define __NEED_uid_t
21#define __NEED_struct_timespec
22#define __NEED_pthread_t
23#define __NEED_pthread_attr_t
24#define __NEED_time_t
25#define __NEED_clock_t
26#define __NEED_sigset_t
27
28#include <bits/alltypes.h>
29
30#define SIG_BLOCK 0
31#define SIG_UNBLOCK 1
32#define SIG_SETMASK 2
33
34#define SI_ASYNCNL (-60)
35#define SI_TKILL (-6)
36#define SI_SIGIO (-5)
37#define SI_ASYNCIO (-4)
38#define SI_MESGQ (-3)
39#define SI_TIMER (-2)
40#define SI_QUEUE (-1)
41#define SI_USER 0
42#define SI_KERNEL 128
43
44typedef struct sigaltstack stack_t;
45
46#endif
47
48#include <bits/signal.h>
49
50#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
51 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
52 || defined(_BSD_SOURCE)
53
54#define SIG_HOLD ((void (*)(int)) 2)
55
56#define FPE_INTDIV 1
57#define FPE_INTOVF 2
58#define FPE_FLTDIV 3
59#define FPE_FLTOVF 4
60#define FPE_FLTUND 5
61#define FPE_FLTRES 6
62#define FPE_FLTINV 7
63#define FPE_FLTSUB 8
64
65#define ILL_ILLOPC 1
66#define ILL_ILLOPN 2
67#define ILL_ILLADR 3
68#define ILL_ILLTRP 4
69#define ILL_PRVOPC 5
70#define ILL_PRVREG 6
71#define ILL_COPROC 7
72#define ILL_BADSTK 8
73
74#define SEGV_MAPERR 1
75#define SEGV_ACCERR 2
76#define SEGV_BNDERR 3
77#define SEGV_PKUERR 4
78#define SEGV_MTEAERR 8
79#define SEGV_MTESERR 9
80
81#define BUS_ADRALN 1
82#define BUS_ADRERR 2
83#define BUS_OBJERR 3
84#define BUS_MCEERR_AR 4
85#define BUS_MCEERR_AO 5
86
87#define CLD_EXITED 1
88#define CLD_KILLED 2
89#define CLD_DUMPED 3
90#define CLD_TRAPPED 4
91#define CLD_STOPPED 5
92#define CLD_CONTINUED 6
93
94union sigval {
95 int sival_int;
96 void *sival_ptr;
97};
98
99typedef struct {
100#ifdef __SI_SWAP_ERRNO_CODE
101 int si_signo, si_code, si_errno;
102#else
103 int si_signo, si_errno, si_code;
104#endif
105 union {
106 char __pad[128 - 2*sizeof(int) - sizeof(long)];
107 struct {
108 union {
109 struct {
110 pid_t si_pid;
111 uid_t si_uid;
112 } __piduid;
113 struct {
114 int si_timerid;
115 int si_overrun;
116 } __timer;
117 } __first;
118 union {
119 union sigval si_value;
120 struct {
121 int si_status;
122 clock_t si_utime, si_stime;
123 } __sigchld;
124 } __second;
125 } __si_common;
126 struct {
127 void *si_addr;
128 short si_addr_lsb;
129 union {
130 struct {
131 void *si_lower;
132 void *si_upper;
133 } __addr_bnd;
134 unsigned si_pkey;
135 } __first;
136 } __sigfault;
137 struct {
138 long si_band;
139 int si_fd;
140 } __sigpoll;
141 struct {
142 void *si_call_addr;
143 int si_syscall;
144 unsigned si_arch;
145 } __sigsys;
146 } __si_fields;
147} siginfo_t;
148#define si_pid __si_fields.__si_common.__first.__piduid.si_pid
149#define si_uid __si_fields.__si_common.__first.__piduid.si_uid
150#define si_status __si_fields.__si_common.__second.__sigchld.si_status
151#define si_utime __si_fields.__si_common.__second.__sigchld.si_utime
152#define si_stime __si_fields.__si_common.__second.__sigchld.si_stime
153#define si_value __si_fields.__si_common.__second.si_value
154#define si_addr __si_fields.__sigfault.si_addr
155#define si_addr_lsb __si_fields.__sigfault.si_addr_lsb
156#define si_lower __si_fields.__sigfault.__first.__addr_bnd.si_lower
157#define si_upper __si_fields.__sigfault.__first.__addr_bnd.si_upper
158#define si_pkey __si_fields.__sigfault.__first.si_pkey
159#define si_band __si_fields.__sigpoll.si_band
160#define si_fd __si_fields.__sigpoll.si_fd
161#define si_timerid __si_fields.__si_common.__first.__timer.si_timerid
162#define si_overrun __si_fields.__si_common.__first.__timer.si_overrun
163#define si_ptr si_value.sival_ptr
164#define si_int si_value.sival_int
165#define si_call_addr __si_fields.__sigsys.si_call_addr
166#define si_syscall __si_fields.__sigsys.si_syscall
167#define si_arch __si_fields.__sigsys.si_arch
168
169struct sigaction {
170 union {
171 void (*sa_handler)(int);
172 void (*sa_sigaction)(int, siginfo_t *, void *);
173 } __sa_handler;
174 sigset_t sa_mask;
175 int sa_flags;
176 void (*sa_restorer)(void);
177};
178#define sa_handler __sa_handler.sa_handler
179#define sa_sigaction __sa_handler.sa_sigaction
180
181#define SA_UNSUPPORTED 0x00000400
182#define SA_EXPOSE_TAGBITS 0x00000800
183
184struct sigevent {
185 union sigval sigev_value;
186 int sigev_signo;
187 int sigev_notify;
188 union {
189 char __pad[64 - 2*sizeof(int) - sizeof(union sigval)];
190 pid_t sigev_notify_thread_id;
191 struct {
192 void (*sigev_notify_function)(union sigval);
193 pthread_attr_t *sigev_notify_attributes;
194 } __sev_thread;
195 } __sev_fields;
196};
197
198#define sigev_notify_thread_id __sev_fields.sigev_notify_thread_id
199#define sigev_notify_function __sev_fields.__sev_thread.sigev_notify_function
200#define sigev_notify_attributes __sev_fields.__sev_thread.sigev_notify_attributes
201
202#define SIGEV_SIGNAL 0
203#define SIGEV_NONE 1
204#define SIGEV_THREAD 2
205#define SIGEV_THREAD_ID 4
206
207int __libc_current_sigrtmin(void);
208int __libc_current_sigrtmax(void);
209
210#define SIGRTMIN (__libc_current_sigrtmin())
211#define SIGRTMAX (__libc_current_sigrtmax())
212
213int kill(pid_t, int);
214
215int sigemptyset(sigset_t *);
216int sigfillset(sigset_t *);
217int sigaddset(sigset_t *, int);
218int sigdelset(sigset_t *, int);
219int sigismember(const sigset_t *, int);
220
221int sigprocmask(int, const sigset_t *__restrict, sigset_t *__restrict);
222int sigsuspend(const sigset_t *);
223int sigaction(int, const struct sigaction *__restrict, struct sigaction *__restrict);
224int sigpending(sigset_t *);
225int sigwait(const sigset_t *__restrict, int *__restrict);
226int sigwaitinfo(const sigset_t *__restrict, siginfo_t *__restrict);
227int sigtimedwait(const sigset_t *__restrict, siginfo_t *__restrict, const struct timespec *__restrict);
228int sigqueue(pid_t, int, union sigval);
229
230int pthread_sigmask(int, const sigset_t *__restrict, sigset_t *__restrict);
231int pthread_kill(pthread_t, int);
232
233void psiginfo(const siginfo_t *, const char *);
234void psignal(int, const char *);
235
236#endif
237
238#if defined(_XOPEN_SOURCE) || defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
239int killpg(pid_t, int);
240int sigaltstack(const stack_t *__restrict, stack_t *__restrict);
241int sighold(int);
242int sigignore(int);
243int siginterrupt(int, int);
244int sigpause(int);
245int sigrelse(int);
246void (*sigset(int, void (*)(int)))(int);
247#define TRAP_BRKPT 1
248#define TRAP_TRACE 2
249#define TRAP_BRANCH 3
250#define TRAP_HWBKPT 4
251#define TRAP_UNK 5
252#define POLL_IN 1
253#define POLL_OUT 2
254#define POLL_MSG 3
255#define POLL_ERR 4
256#define POLL_PRI 5
257#define POLL_HUP 6
258#define SS_ONSTACK 1
259#define SS_DISABLE 2
260#define SS_AUTODISARM (1U << 31)
261#define SS_FLAG_BITS SS_AUTODISARM
262#endif
263
264#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
265#define NSIG _NSIG
266typedef void (*sig_t)(int);
267
268#define SYS_SECCOMP 1
269#define SYS_USER_DISPATCH 2
270#endif
271
272#ifdef _GNU_SOURCE
273typedef void (*sighandler_t)(int);
274void (*bsd_signal(int, void (*)(int)))(int);
275int sigisemptyset(const sigset_t *);
276int sigorset (sigset_t *, const sigset_t *, const sigset_t *);
277int sigandset(sigset_t *, const sigset_t *, const sigset_t *);
278
279#define SA_NOMASK SA_NODEFER
280#define SA_ONESHOT SA_RESETHAND
281#endif
282
283#define SIG_ERR ((void (*)(int))-1)
284#define SIG_DFL ((void (*)(int)) 0)
285#define SIG_IGN ((void (*)(int)) 1)
286
287typedef int sig_atomic_t;
288
289void (*signal(int, void (*)(int)))(int);
290int raise(int);
291
292#if _REDIR_TIME64
293#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
294 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
295 || defined(_BSD_SOURCE)
296__REDIR(sigtimedwait, __sigtimedwait_time64);
297#endif
298#endif
299
300#ifdef __cplusplus
301}
302#endif
303
304#endif