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