1 #pragma once 2 3 #ifdef __cplusplus 4 extern "C" { 5 #endif 6 7 #include <features.h> 8 9 #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \ 10 defined(_GNU_SOURCE) || defined(_BSD_SOURCE) 11 12 #ifdef _GNU_SOURCE 13 #define __ucontext ucontext 14 #endif 15 16 #define __NEED_size_t 17 #define __NEED_pid_t 18 #define __NEED_uid_t 19 #define __NEED_struct_timespec 20 #define __NEED_pthread_t 21 #define __NEED_pthread_attr_t 22 #define __NEED_time_t 23 #define __NEED_clock_t 24 #define __NEED_sigset_t 25 26 #include <bits/alltypes.h> 27 28 #define SIG_BLOCK 0 29 #define SIG_UNBLOCK 1 30 #define SIG_SETMASK 2 31 32 #define SI_ASYNCNL (-60) 33 #define SI_TKILL (-6) 34 #define SI_SIGIO (-5) 35 #define SI_ASYNCIO (-4) 36 #define SI_MESGQ (-3) 37 #define SI_TIMER (-2) 38 #define SI_QUEUE (-1) 39 #define SI_USER 0 40 #define SI_KERNEL 128 41 42 typedef struct sigaltstack stack_t; 43 44 #endif 45 46 #include <bits/signal.h> 47 48 #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) || defined(_XOPEN_SOURCE) || \ 49 defined(_GNU_SOURCE) || defined(_BSD_SOURCE) 50 51 #define SIG_HOLD ((void (*)(int))2) 52 53 #define FPE_INTDIV 1 54 #define FPE_INTOVF 2 55 #define FPE_FLTDIV 3 56 #define FPE_FLTOVF 4 57 #define FPE_FLTUND 5 58 #define FPE_FLTRES 6 59 #define FPE_FLTINV 7 60 #define FPE_FLTSUB 8 61 62 #define ILL_ILLOPC 1 63 #define ILL_ILLOPN 2 64 #define ILL_ILLADR 3 65 #define ILL_ILLTRP 4 66 #define ILL_PRVOPC 5 67 #define ILL_PRVREG 6 68 #define ILL_COPROC 7 69 #define ILL_BADSTK 8 70 71 #define SEGV_MAPERR 1 72 #define SEGV_ACCERR 2 73 #define SEGV_BNDERR 3 74 75 #define BUS_ADRALN 1 76 #define BUS_ADRERR 2 77 #define BUS_OBJERR 3 78 #define BUS_MCEERR_AR 4 79 #define BUS_MCEERR_AO 5 80 81 #define CLD_EXITED 1 82 #define CLD_KILLED 2 83 #define CLD_DUMPED 3 84 #define CLD_TRAPPED 4 85 #define CLD_STOPPED 5 86 #define CLD_CONTINUED 6 87 88 union sigval { 89 int sival_int; 90 void* sival_ptr; 91 }; 92 93 typedef struct { 94 #ifdef __SI_SWAP_ERRNO_CODE 95 int si_signo, si_code, si_errno; 96 #else 97 int si_signo, si_errno, si_code; 98 #endif 99 union { 100 char __pad[128 - 2 * sizeof(int) - sizeof(long)]; 101 struct { 102 union { 103 struct { 104 pid_t si_pid; 105 uid_t si_uid; 106 } __piduid; 107 struct { 108 int si_timerid; 109 int si_overrun; 110 } __timer; 111 } __first; 112 union { 113 union sigval si_value; 114 struct { 115 int si_status; 116 clock_t si_utime, si_stime; 117 } __sigchld; 118 } __second; 119 } __si_common; 120 struct { 121 void* si_addr; 122 short si_addr_lsb; 123 struct { 124 void* si_lower; 125 void* si_upper; 126 } __addr_bnd; 127 } __sigfault; 128 struct { 129 long si_band; 130 int si_fd; 131 } __sigpoll; 132 struct { 133 void* si_call_addr; 134 int si_syscall; 135 unsigned si_arch; 136 } __sigsys; 137 } __si_fields; 138 } siginfo_t; 139 #define si_pid __si_fields.__si_common.__first.__piduid.si_pid 140 #define si_uid __si_fields.__si_common.__first.__piduid.si_uid 141 #define si_status __si_fields.__si_common.__second.__sigchld.si_status 142 #define si_utime __si_fields.__si_common.__second.__sigchld.si_utime 143 #define si_stime __si_fields.__si_common.__second.__sigchld.si_stime 144 #define si_value __si_fields.__si_common.__second.si_value 145 #define si_addr __si_fields.__sigfault.si_addr 146 #define si_addr_lsb __si_fields.__sigfault.si_addr_lsb 147 #define si_lower __si_fields.__sigfault.__addr_bnd.si_lower 148 #define si_upper __si_fields.__sigfault.__addr_bnd.si_upper 149 #define si_band __si_fields.__sigpoll.si_band 150 #define si_fd __si_fields.__sigpoll.si_fd 151 #define si_timerid __si_fields.__si_common.__first.__timer.si_timerid 152 #define si_overrun __si_fields.__si_common.__first.__timer.si_overrun 153 #define si_ptr si_value.sival_ptr 154 #define si_int si_value.sival_int 155 #define si_call_addr __si_fields.__sigsys.si_call_addr 156 #define si_syscall __si_fields.__sigsys.si_syscall 157 #define si_arch __si_fields.__sigsys.si_arch 158 159 struct sigaction { 160 union { 161 void (*sa_handler)(int); 162 void (*sa_sigaction)(int, siginfo_t*, void*); 163 } __sa_handler; 164 sigset_t sa_mask; 165 int sa_flags; 166 void (*sa_restorer)(void); 167 }; 168 #define sa_handler __sa_handler.sa_handler 169 #define sa_sigaction __sa_handler.sa_sigaction 170 171 struct sigevent { 172 union sigval sigev_value; 173 int sigev_signo; 174 int sigev_notify; 175 void (*sigev_notify_function)(union sigval); 176 pthread_attr_t* sigev_notify_attributes; 177 char __pad[56 - 3 * sizeof(long)]; 178 }; 179 180 #define SIGEV_SIGNAL 0 181 #define SIGEV_NONE 1 182 #define SIGEV_THREAD 2 183 184 int __libc_current_sigrtmin(void); 185 int __libc_current_sigrtmax(void); 186 187 #define SIGRTMIN (__libc_current_sigrtmin()) 188 #define SIGRTMAX (__libc_current_sigrtmax()) 189 190 int kill(pid_t, int); 191 192 int sigemptyset(sigset_t*); 193 int sigfillset(sigset_t*); 194 int sigaddset(sigset_t*, int); 195 int sigdelset(sigset_t*, int); 196 int sigismember(const sigset_t*, int); 197 198 int sigprocmask(int, const sigset_t* __restrict, sigset_t* __restrict); 199 int sigsuspend(const sigset_t*); 200 int sigaction(int, const struct sigaction* __restrict, struct sigaction* __restrict); 201 int sigpending(sigset_t*); 202 int sigwait(const sigset_t* __restrict, int* __restrict); 203 int sigwaitinfo(const sigset_t* __restrict, siginfo_t* __restrict); 204 int sigtimedwait(const sigset_t* __restrict, siginfo_t* __restrict, 205 const struct timespec* __restrict); 206 int sigqueue(pid_t, int, const union sigval); 207 208 int pthread_sigmask(int, const sigset_t* __restrict, sigset_t* __restrict); 209 int pthread_kill(pthread_t, int); 210 211 void psiginfo(const siginfo_t*, const char*); 212 void psignal(int, const char*); 213 214 #endif 215 216 #if defined(_XOPEN_SOURCE) || defined(_BSD_SOURCE) || defined(_GNU_SOURCE) 217 int killpg(pid_t, int); 218 int sigaltstack(const stack_t* __restrict, stack_t* __restrict); 219 int siginterrupt(int, int); 220 int sigpause(int); 221 #define TRAP_BRKPT 1 222 #define TRAP_TRACE 2 223 #define POLL_IN 1 224 #define POLL_OUT 2 225 #define POLL_MSG 3 226 #define POLL_ERR 4 227 #define POLL_PRI 5 228 #define POLL_HUP 6 229 #define SS_ONSTACK 1 230 #define SS_DISABLE 2 231 #endif 232 233 #if defined(_BSD_SOURCE) || defined(_GNU_SOURCE) 234 #define NSIG _NSIG 235 typedef void (*sig_t)(int); 236 #endif 237 238 #ifdef _GNU_SOURCE 239 typedef void (*sighandler_t)(int); 240 void (*bsd_signal(int, void (*)(int)))(int); 241 int sigisemptyset(const sigset_t*); 242 int sigorset(sigset_t*, const sigset_t*, const sigset_t*); 243 int sigandset(sigset_t*, const sigset_t*, const sigset_t*); 244 245 #define SA_NOMASK SA_NODEFER 246 #define SA_ONESHOT SA_RESETHAND 247 #endif 248 249 #define SIG_ERR ((void (*)(int)) - 1) 250 #define SIG_DFL ((void (*)(int))0) 251 #define SIG_IGN ((void (*)(int))1) 252 253 typedef int sig_atomic_t; 254 255 void (*signal(int, void (*)(int)))(int); 256 int raise(int); 257 258 #ifdef __cplusplus 259 } 260 #endif 261