blob: b6711bc4c953292e5a1d15df2258a29ae372bd6d [file] [log] [blame]
Colin Cross07a58322022-02-08 19:45:27 -08001#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
Jordan Demeulenaere2d505822022-08-11 17:20:14 +0200181#define SA_UNSUPPORTED 0x00000400
182#define SA_EXPOSE_TAGBITS 0x00000800
183
Colin Cross07a58322022-02-08 19:45:27 -0800184struct 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);
232int pthread_sigqueue(pthread_t, int, union sigval);
233
234void psiginfo(const siginfo_t *, const char *);
235void psignal(int, const char *);
236
237#endif
238
239#if defined(_XOPEN_SOURCE) || defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
240int killpg(pid_t, int);
241int sigaltstack(const stack_t *__restrict, stack_t *__restrict);
242int sighold(int);
243int sigignore(int);
244int siginterrupt(int, int);
245int sigpause(int);
246int sigrelse(int);
247void (*sigset(int, void (*)(int)))(int);
248#define TRAP_BRKPT 1
249#define TRAP_TRACE 2
250#define TRAP_BRANCH 3
251#define TRAP_HWBKPT 4
252#define TRAP_UNK 5
253#define POLL_IN 1
254#define POLL_OUT 2
255#define POLL_MSG 3
256#define POLL_ERR 4
257#define POLL_PRI 5
258#define POLL_HUP 6
259#define SS_ONSTACK 1
260#define SS_DISABLE 2
261#define SS_AUTODISARM (1U << 31)
262#define SS_FLAG_BITS SS_AUTODISARM
263#endif
264
265#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
266#define NSIG _NSIG
267typedef void (*sig_t)(int);
Jordan Demeulenaere2d505822022-08-11 17:20:14 +0200268
269#define SYS_SECCOMP 1
270#define SYS_USER_DISPATCH 2
Colin Cross07a58322022-02-08 19:45:27 -0800271#endif
272
273#ifdef _GNU_SOURCE
274typedef void (*sighandler_t)(int);
275void (*bsd_signal(int, void (*)(int)))(int);
276int sigisemptyset(const sigset_t *);
277int sigorset (sigset_t *, const sigset_t *, const sigset_t *);
278int sigandset(sigset_t *, const sigset_t *, const sigset_t *);
279
280#define SA_NOMASK SA_NODEFER
281#define SA_ONESHOT SA_RESETHAND
282#endif
283
284#define SIG_ERR ((void (*)(int))-1)
285#define SIG_DFL ((void (*)(int)) 0)
286#define SIG_IGN ((void (*)(int)) 1)
287
288typedef int sig_atomic_t;
289
290void (*signal(int, void (*)(int)))(int);
291int raise(int);
292
293#if _REDIR_TIME64
294#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
295 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
296 || defined(_BSD_SOURCE)
297__REDIR(sigtimedwait, __sigtimedwait_time64);
298#endif
299#endif
300
301#ifdef __cplusplus
302}
303#endif
304
305#endif