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