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 typedef 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 94 union sigval { 95 int sival_int; 96 void *sival_ptr; 97 }; 98 99 typedef 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 169 struct 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 184 struct sigevent { 185 union sigval sigev_value; 186 int sigev_signo; 187 int sigev_notify; 188 union { 189 char __pad[64 - 2*sizeof(int) - sizeof(union sigval)]; 190 pid_t sigev_notify_thread_id; 191 struct { 192 void (*sigev_notify_function)(union sigval); 193 pthread_attr_t *sigev_notify_attributes; 194 } __sev_thread; 195 } __sev_fields; 196 }; 197 198 #define sigev_notify_thread_id __sev_fields.sigev_notify_thread_id 199 #define sigev_notify_function __sev_fields.__sev_thread.sigev_notify_function 200 #define sigev_notify_attributes __sev_fields.__sev_thread.sigev_notify_attributes 201 202 #define SIGEV_SIGNAL 0 203 #define SIGEV_NONE 1 204 #define SIGEV_THREAD 2 205 #define SIGEV_THREAD_ID 4 206 207 int __libc_current_sigrtmin(void); 208 int __libc_current_sigrtmax(void); 209 210 #define SIGRTMIN (__libc_current_sigrtmin()) 211 #define SIGRTMAX (__libc_current_sigrtmax()) 212 213 int kill(pid_t, int); 214 215 int sigemptyset(sigset_t *); 216 int sigfillset(sigset_t *); 217 int sigaddset(sigset_t *, int); 218 int sigdelset(sigset_t *, int); 219 int sigismember(const sigset_t *, int); 220 221 int sigprocmask(int, const sigset_t *__restrict, sigset_t *__restrict); 222 int sigsuspend(const sigset_t *); 223 int sigaction(int, const struct sigaction *__restrict, struct sigaction *__restrict); 224 int sigpending(sigset_t *); 225 int sigwait(const sigset_t *__restrict, int *__restrict); 226 int sigwaitinfo(const sigset_t *__restrict, siginfo_t *__restrict); 227 int sigtimedwait(const sigset_t *__restrict, siginfo_t *__restrict, const struct timespec *__restrict); 228 int sigqueue(pid_t, int, union sigval); 229 230 int pthread_sigmask(int, const sigset_t *__restrict, sigset_t *__restrict); 231 int pthread_kill(pthread_t, int); 232 233 void psiginfo(const siginfo_t *, const char *); 234 void psignal(int, const char *); 235 236 #endif 237 238 #if defined(_XOPEN_SOURCE) || defined(_BSD_SOURCE) || defined(_GNU_SOURCE) 239 int killpg(pid_t, int); 240 int sigaltstack(const stack_t *__restrict, stack_t *__restrict); 241 int sighold(int); 242 int sigignore(int); 243 int siginterrupt(int, int); 244 int sigpause(int); 245 int sigrelse(int); 246 void (*sigset(int, void (*)(int)))(int); 247 #define TRAP_BRKPT 1 248 #define TRAP_TRACE 2 249 #define TRAP_BRANCH 3 250 #define TRAP_HWBKPT 4 251 #define TRAP_UNK 5 252 #define POLL_IN 1 253 #define POLL_OUT 2 254 #define POLL_MSG 3 255 #define POLL_ERR 4 256 #define POLL_PRI 5 257 #define POLL_HUP 6 258 #define SS_ONSTACK 1 259 #define SS_DISABLE 2 260 #define SS_AUTODISARM (1U << 31) 261 #define SS_FLAG_BITS SS_AUTODISARM 262 #endif 263 264 #if defined(_BSD_SOURCE) || defined(_GNU_SOURCE) 265 #define NSIG _NSIG 266 typedef void (*sig_t)(int); 267 268 #define SYS_SECCOMP 1 269 #define SYS_USER_DISPATCH 2 270 #endif 271 272 #ifdef _GNU_SOURCE 273 typedef void (*sighandler_t)(int); 274 void (*bsd_signal(int, void (*)(int)))(int); 275 int sigisemptyset(const sigset_t *); 276 int sigorset (sigset_t *, const sigset_t *, const sigset_t *); 277 int sigandset(sigset_t *, const sigset_t *, const sigset_t *); 278 279 #define SA_NOMASK SA_NODEFER 280 #define SA_ONESHOT SA_RESETHAND 281 #endif 282 283 #define SIG_ERR ((void (*)(int))-1) 284 #define SIG_DFL ((void (*)(int)) 0) 285 #define SIG_IGN ((void (*)(int)) 1) 286 287 typedef int sig_atomic_t; 288 289 void (*signal(int, void (*)(int)))(int); 290 int raise(int); 291 292 #if _REDIR_TIME64 293 #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ 294 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ 295 || defined(_BSD_SOURCE) 296 __REDIR(sigtimedwait, __sigtimedwait_time64); 297 #endif 298 #endif 299 300 #ifdef __cplusplus 301 } 302 #endif 303 304 #endif 305