1 #ifndef _SIGNAL_H 2 #define _SIGNAL_H 3 4 #ifdef __cplusplus 5 extern "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 45 typedef 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 #define SEGV_MTEAERR 8 80 #define SEGV_MTESERR 9 81 82 #define BUS_ADRALN 1 83 #define BUS_ADRERR 2 84 #define BUS_OBJERR 3 85 #define BUS_MCEERR_AR 4 86 #define BUS_MCEERR_AO 5 87 88 #define CLD_EXITED 1 89 #define CLD_KILLED 2 90 #define CLD_DUMPED 3 91 #define CLD_TRAPPED 4 92 #define CLD_STOPPED 5 93 #define CLD_CONTINUED 6 94 95 union sigval { 96 int sival_int; 97 void *sival_ptr; 98 }; 99 100 typedef struct { 101 #ifdef __SI_SWAP_ERRNO_CODE 102 int si_signo, si_code, si_errno; 103 #else 104 int si_signo, si_errno, si_code; 105 #endif 106 union { 107 char __pad[128 - 2*sizeof(int) - sizeof(long)]; 108 struct { 109 union { 110 struct { 111 pid_t si_pid; 112 uid_t si_uid; 113 } __piduid; 114 struct { 115 int si_timerid; 116 int si_overrun; 117 } __timer; 118 } __first; 119 union { 120 union sigval si_value; 121 struct { 122 int si_status; 123 clock_t si_utime, si_stime; 124 } __sigchld; 125 } __second; 126 } __si_common; 127 struct { 128 void *si_addr; 129 short si_addr_lsb; 130 union { 131 struct { 132 void *si_lower; 133 void *si_upper; 134 } __addr_bnd; 135 unsigned si_pkey; 136 } __first; 137 } __sigfault; 138 struct { 139 long si_band; 140 int si_fd; 141 } __sigpoll; 142 struct { 143 void *si_call_addr; 144 int si_syscall; 145 unsigned si_arch; 146 } __sigsys; 147 } __si_fields; 148 } siginfo_t; 149 #define si_pid __si_fields.__si_common.__first.__piduid.si_pid 150 #define si_uid __si_fields.__si_common.__first.__piduid.si_uid 151 #define si_status __si_fields.__si_common.__second.__sigchld.si_status 152 #define si_utime __si_fields.__si_common.__second.__sigchld.si_utime 153 #define si_stime __si_fields.__si_common.__second.__sigchld.si_stime 154 #define si_value __si_fields.__si_common.__second.si_value 155 #define si_addr __si_fields.__sigfault.si_addr 156 #define si_addr_lsb __si_fields.__sigfault.si_addr_lsb 157 #define si_lower __si_fields.__sigfault.__first.__addr_bnd.si_lower 158 #define si_upper __si_fields.__sigfault.__first.__addr_bnd.si_upper 159 #define si_pkey __si_fields.__sigfault.__first.si_pkey 160 #define si_band __si_fields.__sigpoll.si_band 161 #define si_fd __si_fields.__sigpoll.si_fd 162 #define si_timerid __si_fields.__si_common.__first.__timer.si_timerid 163 #define si_overrun __si_fields.__si_common.__first.__timer.si_overrun 164 #define si_ptr si_value.sival_ptr 165 #define si_int si_value.sival_int 166 #define si_call_addr __si_fields.__sigsys.si_call_addr 167 #define si_syscall __si_fields.__sigsys.si_syscall 168 #define si_arch __si_fields.__sigsys.si_arch 169 170 struct sigaction { 171 union { 172 void (*sa_handler)(int); 173 void (*sa_sigaction)(int, siginfo_t *, void *); 174 } __sa_handler; 175 sigset_t sa_mask; 176 int sa_flags; 177 void (*sa_restorer)(void); 178 }; 179 #define sa_handler __sa_handler.sa_handler 180 #define sa_sigaction __sa_handler.sa_sigaction 181 182 #define SA_UNSUPPORTED 0x00000400 183 #define SA_EXPOSE_TAGBITS 0x00000800 184 185 struct sigevent { 186 union sigval sigev_value; 187 int sigev_signo; 188 int sigev_notify; 189 union { 190 char __pad[64 - 2*sizeof(int) - sizeof(union sigval)]; 191 pid_t sigev_notify_thread_id; 192 struct { 193 void (*sigev_notify_function)(union sigval); 194 pthread_attr_t *sigev_notify_attributes; 195 } __sev_thread; 196 } __sev_fields; 197 }; 198 199 #define sigev_notify_thread_id __sev_fields.sigev_notify_thread_id 200 #define sigev_notify_function __sev_fields.__sev_thread.sigev_notify_function 201 #define sigev_notify_attributes __sev_fields.__sev_thread.sigev_notify_attributes 202 203 #define SIGEV_SIGNAL 0 204 #define SIGEV_NONE 1 205 #define SIGEV_THREAD 2 206 #define SIGEV_THREAD_ID 4 207 208 int __libc_current_sigrtmin(void); 209 int __libc_current_sigrtmax(void); 210 211 #define SIGRTMIN (__libc_current_sigrtmin()) 212 #define SIGRTMAX (__libc_current_sigrtmax()) 213 214 #define MUSL_SIGNAL_NATIVE_REMOTE (SIGRTMIN + 0) 215 #define MUSL_SIGNAL_HOOK (SIGRTMIN + 1) 216 #define MUSL_SIGNAL_UNHOOK (SIGRTMIN + 2) 217 #define MUSL_SIGNAL_NATIVE_LOCAL (SIGRTMIN + 3) 218 #define MUSL_SIGNAL_JSHEAP (SIGRTMIN + 4) 219 #define MUSL_SIGNAL_JSHEAP_PRIV (SIGRTMIN + 5) 220 #define MUSL_SIGNAL_SAMPLE_STACK (SIGRTMIN + 6) 221 #define MUSL_SIGNAL_LEAK_STACK (SIGRTMIN + 7) 222 #ifdef USE_JEMALLOC_RECYCLE_FUNC 223 #define MUSL_SIGNAL_RECYCLE_JEMALLOC (SIGRTMIN + 8) 224 #endif 225 #define MUSL_SIGNAL_MEMCHECK (SIGRTMIN + 9) 226 #define MUSL_SIGNAL_FDTRACK (SIGRTMIN + 10) 227 228 int kill(pid_t, int); 229 int sigemptyset(sigset_t *); 230 int sigfillset(sigset_t *); 231 int sigaddset(sigset_t *, int); 232 int sigdelset(sigset_t *, int); 233 int sigismember(const sigset_t *, int); 234 235 int sigprocmask(int, const sigset_t *__restrict, sigset_t *__restrict); 236 int sigsuspend(const sigset_t *); 237 int sigaction(int, const struct sigaction *__restrict, struct sigaction *__restrict); 238 int sigpending(sigset_t *); 239 int sigwait(const sigset_t *__restrict, int *__restrict); 240 int sigwaitinfo(const sigset_t *__restrict, siginfo_t *__restrict); 241 int sigtimedwait(const sigset_t *__restrict, siginfo_t *__restrict, const struct timespec *__restrict); 242 int sigqueue(pid_t, int, union sigval); 243 244 int pthread_sigmask(int, const sigset_t *__restrict, sigset_t *__restrict); 245 int pthread_kill(pthread_t, int); 246 247 void psiginfo(const siginfo_t *, const char *); 248 void psignal(int, const char *); 249 250 #endif 251 252 #if defined(_XOPEN_SOURCE) || defined(_BSD_SOURCE) || defined(_GNU_SOURCE) 253 int killpg(pid_t, int); 254 int sigaltstack(const stack_t *__restrict, stack_t *__restrict); 255 int sighold(int); 256 int sigignore(int); 257 int siginterrupt(int, int); 258 int sigpause(int); 259 int sigrelse(int); 260 void (*sigset(int, void (*)(int)))(int); 261 #define TRAP_BRKPT 1 262 #define TRAP_TRACE 2 263 #define TRAP_BRANCH 3 264 #define TRAP_HWBKPT 4 265 #define TRAP_UNK 5 266 #define POLL_IN 1 267 #define POLL_OUT 2 268 #define POLL_MSG 3 269 #define POLL_ERR 4 270 #define POLL_PRI 5 271 #define POLL_HUP 6 272 #define SS_ONSTACK 1 273 #define SS_DISABLE 2 274 #define SS_AUTODISARM (1U << 31) 275 #define SS_FLAG_BITS SS_AUTODISARM 276 #endif 277 278 #if defined(_BSD_SOURCE) || defined(_GNU_SOURCE) 279 #define NSIG _NSIG 280 typedef void (*sig_t)(int); 281 282 #define SYS_SECCOMP 1 283 #define SYS_USER_DISPATCH 2 284 #endif 285 286 #ifdef _GNU_SOURCE 287 typedef void (*sighandler_t)(int); 288 void (*bsd_signal(int, void (*)(int)))(int); 289 int sigisemptyset(const sigset_t *); 290 int sigorset (sigset_t *, const sigset_t *, const sigset_t *); 291 int sigandset(sigset_t *, const sigset_t *, const sigset_t *); 292 293 #define SA_NOMASK SA_NODEFER 294 #define SA_ONESHOT SA_RESETHAND 295 #endif 296 297 #define SIG_ERR ((void (*)(int))-1) 298 #define SIG_DFL ((void (*)(int)) 0) 299 #define SIG_IGN ((void (*)(int)) 1) 300 301 typedef int sig_atomic_t; 302 303 void (*signal(int, void (*)(int)))(int); 304 int raise(int); 305 306 #if _REDIR_TIME64 307 #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ 308 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ 309 || defined(_BSD_SOURCE) 310 __REDIR(sigtimedwait, __sigtimedwait_time64); 311 #endif 312 #endif 313 314 #ifdef __cplusplus 315 } 316 #endif 317 318 #endif 319