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