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