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