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	void (*sigev_notify_function)(union sigval);
189	pthread_attr_t *sigev_notify_attributes;
190	char __pad[56-3*sizeof(long)];
191};
192
193#define SIGEV_SIGNAL 0
194#define SIGEV_NONE 1
195#define SIGEV_THREAD 2
196#define SIGEV_THREAD_ID 4
197
198int __libc_current_sigrtmin(void);
199int __libc_current_sigrtmax(void);
200
201#define SIGRTMIN  (__libc_current_sigrtmin())
202#define SIGRTMAX  (__libc_current_sigrtmax())
203
204int kill(pid_t, int);
205
206#define sigaddset(what, sig)   (*(what) |= (1U << (sig)), 0)
207#define sigdelset(what, sig)   (*(what) &= ~(1U << (sig)), 0)
208#define sigemptyset(what)      (*(what) = 0, 0)
209#define sigfillset(what)       (*(what) = ~(0), 0)
210#define sigismember(what, sig) (((*(what)) & (1U << (sig))) != 0)
211
212int sigprocmask(int, const sigset_t *__restrict, sigset_t *__restrict);
213int sigsuspend(const sigset_t *);
214int sigaction(int, const struct sigaction *__restrict, struct sigaction *__restrict);
215int sigpending(sigset_t *);
216int sigwait(const sigset_t *__restrict, int *__restrict);
217int sigwaitinfo(const sigset_t *__restrict, siginfo_t *__restrict);
218int sigtimedwait(const sigset_t *__restrict, siginfo_t *__restrict, const struct timespec *__restrict);
219int sigqueue(pid_t, int, union sigval);
220
221int pthread_sigmask(int, const sigset_t *__restrict, sigset_t *__restrict);
222int pthread_kill(pthread_t, int);
223
224void psiginfo(const siginfo_t *, const char *);
225void psignal(int, const char *);
226
227#endif
228
229#if defined(_XOPEN_SOURCE) || defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
230int killpg(pid_t, int);
231int sigaltstack(const stack_t *__restrict, stack_t *__restrict);
232int sighold(int);
233int sigignore(int);
234int siginterrupt(int, int);
235int sigpause(int);
236int sigrelse(int);
237void (*sigset(int, void (*)(int)))(int);
238#define TRAP_BRKPT 1
239#define TRAP_TRACE 2
240#define TRAP_BRANCH 3
241#define TRAP_HWBKPT 4
242#define TRAP_UNK 5
243#define POLL_IN 1
244#define POLL_OUT 2
245#define POLL_MSG 3
246#define POLL_ERR 4
247#define POLL_PRI 5
248#define POLL_HUP 6
249#define SS_ONSTACK    1
250#define SS_DISABLE    2
251#define SS_AUTODISARM (1U << 31)
252#define SS_FLAG_BITS SS_AUTODISARM
253#endif
254
255#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
256#define NSIG _NSIG
257typedef void (*sig_t)(int);
258
259#define SYS_SECCOMP 1
260#define SYS_USER_DISPATCH 2
261#endif
262
263#ifdef _GNU_SOURCE
264typedef void (*sighandler_t)(int);
265void (*bsd_signal(int, void (*)(int)))(int);
266int sigisemptyset(const sigset_t *);
267int sigorset (sigset_t *, const sigset_t *, const sigset_t *);
268int sigandset(sigset_t *, const sigset_t *, const sigset_t *);
269
270#define SA_NOMASK SA_NODEFER
271#define SA_ONESHOT SA_RESETHAND
272#endif
273
274#define SIG_ERR  ((void (*)(int))-1)
275#define SIG_DFL  ((void (*)(int)) 0)
276#define SIG_IGN  ((void (*)(int)) 1)
277
278typedef int sig_atomic_t;
279
280void (*signal(int, void (*)(int)))(int);
281int raise(int);
282
283#if _REDIR_TIME64
284#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
285 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
286 || defined(_BSD_SOURCE)
287__REDIR(sigtimedwait, __sigtimedwait_time64);
288#endif
289#endif
290
291#ifdef __cplusplus
292}
293#endif
294
295#endif
296