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