1570af302Sopenharmony_ci#ifndef _SIGNAL_H
2570af302Sopenharmony_ci#define _SIGNAL_H
3570af302Sopenharmony_ci
4570af302Sopenharmony_ci#ifdef __cplusplus
5570af302Sopenharmony_ciextern "C" {
6570af302Sopenharmony_ci#endif
7570af302Sopenharmony_ci
8570af302Sopenharmony_ci#include <features.h>
9570af302Sopenharmony_ci
10570af302Sopenharmony_ci#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
11570af302Sopenharmony_ci || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
12570af302Sopenharmony_ci || defined(_BSD_SOURCE)
13570af302Sopenharmony_ci
14570af302Sopenharmony_ci#ifdef _GNU_SOURCE
15570af302Sopenharmony_ci#define __ucontext ucontext
16570af302Sopenharmony_ci#endif
17570af302Sopenharmony_ci
18570af302Sopenharmony_ci#define __NEED_size_t
19570af302Sopenharmony_ci#define __NEED_pid_t
20570af302Sopenharmony_ci#define __NEED_uid_t
21570af302Sopenharmony_ci#define __NEED_struct_timespec
22570af302Sopenharmony_ci#define __NEED_pthread_t
23570af302Sopenharmony_ci#define __NEED_pthread_attr_t
24570af302Sopenharmony_ci#define __NEED_time_t
25570af302Sopenharmony_ci#define __NEED_clock_t
26570af302Sopenharmony_ci#define __NEED_sigset_t
27570af302Sopenharmony_ci
28570af302Sopenharmony_ci#include <bits/alltypes.h>
29570af302Sopenharmony_ci
30570af302Sopenharmony_ci#define SIG_BLOCK     0
31570af302Sopenharmony_ci#define SIG_UNBLOCK   1
32570af302Sopenharmony_ci#define SIG_SETMASK   2
33570af302Sopenharmony_ci
34570af302Sopenharmony_ci#define SI_ASYNCNL (-60)
35570af302Sopenharmony_ci#define SI_TKILL (-6)
36570af302Sopenharmony_ci#define SI_SIGIO (-5)
37570af302Sopenharmony_ci#define SI_ASYNCIO (-4)
38570af302Sopenharmony_ci#define SI_MESGQ (-3)
39570af302Sopenharmony_ci#define SI_TIMER (-2)
40570af302Sopenharmony_ci#define SI_QUEUE (-1)
41570af302Sopenharmony_ci#define SI_USER 0
42570af302Sopenharmony_ci#define SI_KERNEL 128
43570af302Sopenharmony_ci
44570af302Sopenharmony_ci
45570af302Sopenharmony_citypedef struct sigaltstack stack_t;
46570af302Sopenharmony_ci
47570af302Sopenharmony_ci#endif
48570af302Sopenharmony_ci
49570af302Sopenharmony_ci#include <bits/signal.h>
50570af302Sopenharmony_ci
51570af302Sopenharmony_ci#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
52570af302Sopenharmony_ci || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
53570af302Sopenharmony_ci || defined(_BSD_SOURCE)
54570af302Sopenharmony_ci
55570af302Sopenharmony_ci#define SIG_HOLD ((void (*)(int)) 2)
56570af302Sopenharmony_ci
57570af302Sopenharmony_ci#define FPE_INTDIV 1
58570af302Sopenharmony_ci#define FPE_INTOVF 2
59570af302Sopenharmony_ci#define FPE_FLTDIV 3
60570af302Sopenharmony_ci#define FPE_FLTOVF 4
61570af302Sopenharmony_ci#define FPE_FLTUND 5
62570af302Sopenharmony_ci#define FPE_FLTRES 6
63570af302Sopenharmony_ci#define FPE_FLTINV 7
64570af302Sopenharmony_ci#define FPE_FLTSUB 8
65570af302Sopenharmony_ci
66570af302Sopenharmony_ci#define ILL_ILLOPC 1
67570af302Sopenharmony_ci#define ILL_ILLOPN 2
68570af302Sopenharmony_ci#define ILL_ILLADR 3
69570af302Sopenharmony_ci#define ILL_ILLTRP 4
70570af302Sopenharmony_ci#define ILL_PRVOPC 5
71570af302Sopenharmony_ci#define ILL_PRVREG 6
72570af302Sopenharmony_ci#define ILL_COPROC 7
73570af302Sopenharmony_ci#define ILL_BADSTK 8
74570af302Sopenharmony_ci
75570af302Sopenharmony_ci#define SEGV_MAPERR 1
76570af302Sopenharmony_ci#define SEGV_ACCERR 2
77570af302Sopenharmony_ci#define SEGV_BNDERR 3
78570af302Sopenharmony_ci#define SEGV_PKUERR 4
79570af302Sopenharmony_ci#define SEGV_MTEAERR 8
80570af302Sopenharmony_ci#define SEGV_MTESERR 9
81570af302Sopenharmony_ci
82570af302Sopenharmony_ci#define BUS_ADRALN 1
83570af302Sopenharmony_ci#define BUS_ADRERR 2
84570af302Sopenharmony_ci#define BUS_OBJERR 3
85570af302Sopenharmony_ci#define BUS_MCEERR_AR 4
86570af302Sopenharmony_ci#define BUS_MCEERR_AO 5
87570af302Sopenharmony_ci
88570af302Sopenharmony_ci#define CLD_EXITED 1
89570af302Sopenharmony_ci#define CLD_KILLED 2
90570af302Sopenharmony_ci#define CLD_DUMPED 3
91570af302Sopenharmony_ci#define CLD_TRAPPED 4
92570af302Sopenharmony_ci#define CLD_STOPPED 5
93570af302Sopenharmony_ci#define CLD_CONTINUED 6
94570af302Sopenharmony_ci
95570af302Sopenharmony_ciunion sigval {
96570af302Sopenharmony_ci	int sival_int;
97570af302Sopenharmony_ci	void *sival_ptr;
98570af302Sopenharmony_ci};
99570af302Sopenharmony_ci
100570af302Sopenharmony_citypedef struct {
101570af302Sopenharmony_ci#ifdef __SI_SWAP_ERRNO_CODE
102570af302Sopenharmony_ci	int si_signo, si_code, si_errno;
103570af302Sopenharmony_ci#else
104570af302Sopenharmony_ci	int si_signo, si_errno, si_code;
105570af302Sopenharmony_ci#endif
106570af302Sopenharmony_ci	union {
107570af302Sopenharmony_ci		char __pad[128 - 2*sizeof(int) - sizeof(long)];
108570af302Sopenharmony_ci		struct {
109570af302Sopenharmony_ci			union {
110570af302Sopenharmony_ci				struct {
111570af302Sopenharmony_ci					pid_t si_pid;
112570af302Sopenharmony_ci					uid_t si_uid;
113570af302Sopenharmony_ci				} __piduid;
114570af302Sopenharmony_ci				struct {
115570af302Sopenharmony_ci					int si_timerid;
116570af302Sopenharmony_ci					int si_overrun;
117570af302Sopenharmony_ci				} __timer;
118570af302Sopenharmony_ci			} __first;
119570af302Sopenharmony_ci			union {
120570af302Sopenharmony_ci				union sigval si_value;
121570af302Sopenharmony_ci				struct {
122570af302Sopenharmony_ci					int si_status;
123570af302Sopenharmony_ci					clock_t si_utime, si_stime;
124570af302Sopenharmony_ci				} __sigchld;
125570af302Sopenharmony_ci			} __second;
126570af302Sopenharmony_ci		} __si_common;
127570af302Sopenharmony_ci		struct {
128570af302Sopenharmony_ci			void *si_addr;
129570af302Sopenharmony_ci			short si_addr_lsb;
130570af302Sopenharmony_ci			union {
131570af302Sopenharmony_ci				struct {
132570af302Sopenharmony_ci					void *si_lower;
133570af302Sopenharmony_ci					void *si_upper;
134570af302Sopenharmony_ci				} __addr_bnd;
135570af302Sopenharmony_ci				unsigned si_pkey;
136570af302Sopenharmony_ci			} __first;
137570af302Sopenharmony_ci		} __sigfault;
138570af302Sopenharmony_ci		struct {
139570af302Sopenharmony_ci			long si_band;
140570af302Sopenharmony_ci			int si_fd;
141570af302Sopenharmony_ci		} __sigpoll;
142570af302Sopenharmony_ci		struct {
143570af302Sopenharmony_ci			void *si_call_addr;
144570af302Sopenharmony_ci			int si_syscall;
145570af302Sopenharmony_ci			unsigned si_arch;
146570af302Sopenharmony_ci		} __sigsys;
147570af302Sopenharmony_ci	} __si_fields;
148570af302Sopenharmony_ci} siginfo_t;
149570af302Sopenharmony_ci#define si_pid     __si_fields.__si_common.__first.__piduid.si_pid
150570af302Sopenharmony_ci#define si_uid     __si_fields.__si_common.__first.__piduid.si_uid
151570af302Sopenharmony_ci#define si_status  __si_fields.__si_common.__second.__sigchld.si_status
152570af302Sopenharmony_ci#define si_utime   __si_fields.__si_common.__second.__sigchld.si_utime
153570af302Sopenharmony_ci#define si_stime   __si_fields.__si_common.__second.__sigchld.si_stime
154570af302Sopenharmony_ci#define si_value   __si_fields.__si_common.__second.si_value
155570af302Sopenharmony_ci#define si_addr    __si_fields.__sigfault.si_addr
156570af302Sopenharmony_ci#define si_addr_lsb __si_fields.__sigfault.si_addr_lsb
157570af302Sopenharmony_ci#define si_lower   __si_fields.__sigfault.__first.__addr_bnd.si_lower
158570af302Sopenharmony_ci#define si_upper   __si_fields.__sigfault.__first.__addr_bnd.si_upper
159570af302Sopenharmony_ci#define si_pkey    __si_fields.__sigfault.__first.si_pkey
160570af302Sopenharmony_ci#define si_band    __si_fields.__sigpoll.si_band
161570af302Sopenharmony_ci#define si_fd      __si_fields.__sigpoll.si_fd
162570af302Sopenharmony_ci#define si_timerid __si_fields.__si_common.__first.__timer.si_timerid
163570af302Sopenharmony_ci#define si_overrun __si_fields.__si_common.__first.__timer.si_overrun
164570af302Sopenharmony_ci#define si_ptr     si_value.sival_ptr
165570af302Sopenharmony_ci#define si_int     si_value.sival_int
166570af302Sopenharmony_ci#define si_call_addr __si_fields.__sigsys.si_call_addr
167570af302Sopenharmony_ci#define si_syscall __si_fields.__sigsys.si_syscall
168570af302Sopenharmony_ci#define si_arch    __si_fields.__sigsys.si_arch
169570af302Sopenharmony_ci
170570af302Sopenharmony_cistruct sigaction {
171570af302Sopenharmony_ci	union {
172570af302Sopenharmony_ci		void (*sa_handler)(int);
173570af302Sopenharmony_ci		void (*sa_sigaction)(int, siginfo_t *, void *);
174570af302Sopenharmony_ci	} __sa_handler;
175570af302Sopenharmony_ci	sigset_t sa_mask;
176570af302Sopenharmony_ci	int sa_flags;
177570af302Sopenharmony_ci	void (*sa_restorer)(void);
178570af302Sopenharmony_ci};
179570af302Sopenharmony_ci#define sa_handler   __sa_handler.sa_handler
180570af302Sopenharmony_ci#define sa_sigaction __sa_handler.sa_sigaction
181570af302Sopenharmony_ci
182570af302Sopenharmony_ci#define SA_UNSUPPORTED 0x00000400
183570af302Sopenharmony_ci#define SA_EXPOSE_TAGBITS 0x00000800
184570af302Sopenharmony_ci
185570af302Sopenharmony_cistruct sigevent {
186570af302Sopenharmony_ci	union sigval sigev_value;
187570af302Sopenharmony_ci	int sigev_signo;
188570af302Sopenharmony_ci	int sigev_notify;
189570af302Sopenharmony_ci	union {
190570af302Sopenharmony_ci		char __pad[64 - 2*sizeof(int) - sizeof(union sigval)];
191570af302Sopenharmony_ci		pid_t sigev_notify_thread_id;
192570af302Sopenharmony_ci		struct {
193570af302Sopenharmony_ci			void (*sigev_notify_function)(union sigval);
194570af302Sopenharmony_ci			pthread_attr_t *sigev_notify_attributes;
195570af302Sopenharmony_ci		} __sev_thread;
196570af302Sopenharmony_ci	} __sev_fields;
197570af302Sopenharmony_ci};
198570af302Sopenharmony_ci
199570af302Sopenharmony_ci#define sigev_notify_thread_id __sev_fields.sigev_notify_thread_id
200570af302Sopenharmony_ci#define sigev_notify_function __sev_fields.__sev_thread.sigev_notify_function
201570af302Sopenharmony_ci#define sigev_notify_attributes __sev_fields.__sev_thread.sigev_notify_attributes
202570af302Sopenharmony_ci
203570af302Sopenharmony_ci#define SIGEV_SIGNAL 0
204570af302Sopenharmony_ci#define SIGEV_NONE 1
205570af302Sopenharmony_ci#define SIGEV_THREAD 2
206570af302Sopenharmony_ci#define SIGEV_THREAD_ID 4
207570af302Sopenharmony_ci
208570af302Sopenharmony_ciint __libc_current_sigrtmin(void);
209570af302Sopenharmony_ciint __libc_current_sigrtmax(void);
210570af302Sopenharmony_ci
211570af302Sopenharmony_ci#define SIGRTMIN  (__libc_current_sigrtmin())
212570af302Sopenharmony_ci#define SIGRTMAX  (__libc_current_sigrtmax())
213570af302Sopenharmony_ci
214570af302Sopenharmony_ci#define MUSL_SIGNAL_NATIVE_REMOTE (SIGRTMIN + 0)
215570af302Sopenharmony_ci#define MUSL_SIGNAL_HOOK (SIGRTMIN + 1)
216570af302Sopenharmony_ci#define MUSL_SIGNAL_UNHOOK (SIGRTMIN + 2)
217570af302Sopenharmony_ci#define MUSL_SIGNAL_NATIVE_LOCAL (SIGRTMIN + 3)
218570af302Sopenharmony_ci#define MUSL_SIGNAL_JSHEAP (SIGRTMIN + 4)
219570af302Sopenharmony_ci#define MUSL_SIGNAL_JSHEAP_PRIV (SIGRTMIN + 5)
220570af302Sopenharmony_ci#define MUSL_SIGNAL_SAMPLE_STACK (SIGRTMIN + 6)
221570af302Sopenharmony_ci#define MUSL_SIGNAL_LEAK_STACK (SIGRTMIN + 7)
222570af302Sopenharmony_ci#ifdef USE_JEMALLOC_RECYCLE_FUNC
223570af302Sopenharmony_ci#define MUSL_SIGNAL_RECYCLE_JEMALLOC (SIGRTMIN + 8)
224570af302Sopenharmony_ci#endif
225570af302Sopenharmony_ci#define MUSL_SIGNAL_MEMCHECK (SIGRTMIN + 9)
226570af302Sopenharmony_ci#define MUSL_SIGNAL_FDTRACK (SIGRTMIN + 10)
227570af302Sopenharmony_ci
228570af302Sopenharmony_ciint kill(pid_t, int);
229570af302Sopenharmony_ciint sigemptyset(sigset_t *);
230570af302Sopenharmony_ciint sigfillset(sigset_t *);
231570af302Sopenharmony_ciint sigaddset(sigset_t *, int);
232570af302Sopenharmony_ciint sigdelset(sigset_t *, int);
233570af302Sopenharmony_ciint sigismember(const sigset_t *, int);
234570af302Sopenharmony_ci
235570af302Sopenharmony_ciint sigprocmask(int, const sigset_t *__restrict, sigset_t *__restrict);
236570af302Sopenharmony_ciint sigsuspend(const sigset_t *);
237570af302Sopenharmony_ciint sigaction(int, const struct sigaction *__restrict, struct sigaction *__restrict);
238570af302Sopenharmony_ciint sigpending(sigset_t *);
239570af302Sopenharmony_ciint sigwait(const sigset_t *__restrict, int *__restrict);
240570af302Sopenharmony_ciint sigwaitinfo(const sigset_t *__restrict, siginfo_t *__restrict);
241570af302Sopenharmony_ciint sigtimedwait(const sigset_t *__restrict, siginfo_t *__restrict, const struct timespec *__restrict);
242570af302Sopenharmony_ciint sigqueue(pid_t, int, union sigval);
243570af302Sopenharmony_ci
244570af302Sopenharmony_ciint pthread_sigmask(int, const sigset_t *__restrict, sigset_t *__restrict);
245570af302Sopenharmony_ciint pthread_kill(pthread_t, int);
246570af302Sopenharmony_ci
247570af302Sopenharmony_civoid psiginfo(const siginfo_t *, const char *);
248570af302Sopenharmony_civoid psignal(int, const char *);
249570af302Sopenharmony_ci
250570af302Sopenharmony_ci#endif
251570af302Sopenharmony_ci
252570af302Sopenharmony_ci#if defined(_XOPEN_SOURCE) || defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
253570af302Sopenharmony_ciint killpg(pid_t, int);
254570af302Sopenharmony_ciint sigaltstack(const stack_t *__restrict, stack_t *__restrict);
255570af302Sopenharmony_ciint sighold(int);
256570af302Sopenharmony_ciint sigignore(int);
257570af302Sopenharmony_ciint siginterrupt(int, int);
258570af302Sopenharmony_ciint sigpause(int);
259570af302Sopenharmony_ciint sigrelse(int);
260570af302Sopenharmony_civoid (*sigset(int, void (*)(int)))(int);
261570af302Sopenharmony_ci#define TRAP_BRKPT 1
262570af302Sopenharmony_ci#define TRAP_TRACE 2
263570af302Sopenharmony_ci#define TRAP_BRANCH 3
264570af302Sopenharmony_ci#define TRAP_HWBKPT 4
265570af302Sopenharmony_ci#define TRAP_UNK 5
266570af302Sopenharmony_ci#define POLL_IN 1
267570af302Sopenharmony_ci#define POLL_OUT 2
268570af302Sopenharmony_ci#define POLL_MSG 3
269570af302Sopenharmony_ci#define POLL_ERR 4
270570af302Sopenharmony_ci#define POLL_PRI 5
271570af302Sopenharmony_ci#define POLL_HUP 6
272570af302Sopenharmony_ci#define SS_ONSTACK    1
273570af302Sopenharmony_ci#define SS_DISABLE    2
274570af302Sopenharmony_ci#define SS_AUTODISARM (1U << 31)
275570af302Sopenharmony_ci#define SS_FLAG_BITS SS_AUTODISARM
276570af302Sopenharmony_ci#endif
277570af302Sopenharmony_ci
278570af302Sopenharmony_ci#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
279570af302Sopenharmony_ci#define NSIG _NSIG
280570af302Sopenharmony_citypedef void (*sig_t)(int);
281570af302Sopenharmony_ci
282570af302Sopenharmony_ci#define SYS_SECCOMP 1
283570af302Sopenharmony_ci#define SYS_USER_DISPATCH 2
284570af302Sopenharmony_ci#endif
285570af302Sopenharmony_ci
286570af302Sopenharmony_ci#ifdef _GNU_SOURCE
287570af302Sopenharmony_citypedef void (*sighandler_t)(int);
288570af302Sopenharmony_civoid (*bsd_signal(int, void (*)(int)))(int);
289570af302Sopenharmony_ciint sigisemptyset(const sigset_t *);
290570af302Sopenharmony_ciint sigorset (sigset_t *, const sigset_t *, const sigset_t *);
291570af302Sopenharmony_ciint sigandset(sigset_t *, const sigset_t *, const sigset_t *);
292570af302Sopenharmony_ci
293570af302Sopenharmony_ci#define SA_NOMASK SA_NODEFER
294570af302Sopenharmony_ci#define SA_ONESHOT SA_RESETHAND
295570af302Sopenharmony_ci#endif
296570af302Sopenharmony_ci
297570af302Sopenharmony_ci#define SIG_ERR  ((void (*)(int))-1)
298570af302Sopenharmony_ci#define SIG_DFL  ((void (*)(int)) 0)
299570af302Sopenharmony_ci#define SIG_IGN  ((void (*)(int)) 1)
300570af302Sopenharmony_ci
301570af302Sopenharmony_citypedef int sig_atomic_t;
302570af302Sopenharmony_ci
303570af302Sopenharmony_civoid (*signal(int, void (*)(int)))(int);
304570af302Sopenharmony_ciint raise(int);
305570af302Sopenharmony_ci
306570af302Sopenharmony_ci#if _REDIR_TIME64
307570af302Sopenharmony_ci#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
308570af302Sopenharmony_ci || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
309570af302Sopenharmony_ci || defined(_BSD_SOURCE)
310570af302Sopenharmony_ci__REDIR(sigtimedwait, __sigtimedwait_time64);
311570af302Sopenharmony_ci#endif
312570af302Sopenharmony_ci#endif
313570af302Sopenharmony_ci
314570af302Sopenharmony_ci#ifdef __cplusplus
315570af302Sopenharmony_ci}
316570af302Sopenharmony_ci#endif
317570af302Sopenharmony_ci
318570af302Sopenharmony_ci#endif
319