1*10465441SEvalZero /* 2*10465441SEvalZero * Copyright (c) 2006-2018, RT-Thread Development Team 3*10465441SEvalZero * 4*10465441SEvalZero * SPDX-License-Identifier: Apache-2.0 5*10465441SEvalZero * 6*10465441SEvalZero * Change Logs: 7*10465441SEvalZero * Date Author Notes 8*10465441SEvalZero * 2017-09-12 Bernard The first version 9*10465441SEvalZero */ 10*10465441SEvalZero 11*10465441SEvalZero #ifndef LIBC_SIGNAL_H__ 12*10465441SEvalZero #define LIBC_SIGNAL_H__ 13*10465441SEvalZero 14*10465441SEvalZero #ifdef __cplusplus 15*10465441SEvalZero extern "C" { 16*10465441SEvalZero #endif 17*10465441SEvalZero 18*10465441SEvalZero #ifdef HAVE_CCONFIG_H 19*10465441SEvalZero #include <cconfig.h> 20*10465441SEvalZero #endif 21*10465441SEvalZero 22*10465441SEvalZero #ifndef HAVE_SIGVAL 23*10465441SEvalZero /* Signal Generation and Delivery, P1003.1b-1993, p. 63 24*10465441SEvalZero NOTE: P1003.1c/D10, p. 34 adds sigev_notify_function and 25*10465441SEvalZero sigev_notify_attributes to the sigevent structure. */ 26*10465441SEvalZero 27*10465441SEvalZero union sigval 28*10465441SEvalZero { 29*10465441SEvalZero int sival_int; /* Integer signal value */ 30*10465441SEvalZero void *sival_ptr; /* Pointer signal value */ 31*10465441SEvalZero }; 32*10465441SEvalZero #endif 33*10465441SEvalZero 34*10465441SEvalZero #ifndef HAVE_SIGEVENT 35*10465441SEvalZero struct sigevent 36*10465441SEvalZero { 37*10465441SEvalZero int sigev_notify; /* Notification type */ 38*10465441SEvalZero int sigev_signo; /* Signal number */ 39*10465441SEvalZero union sigval sigev_value; /* Signal value */ 40*10465441SEvalZero void (*sigev_notify_function)( union sigval ); 41*10465441SEvalZero /* Notification function */ 42*10465441SEvalZero void *sigev_notify_attributes; /* Notification Attributes, really pthread_attr_t */ 43*10465441SEvalZero }; 44*10465441SEvalZero #endif 45*10465441SEvalZero 46*10465441SEvalZero #ifndef HAVE_SIGINFO 47*10465441SEvalZero struct siginfo 48*10465441SEvalZero { 49*10465441SEvalZero rt_uint16_t si_signo; 50*10465441SEvalZero rt_uint16_t si_code; 51*10465441SEvalZero 52*10465441SEvalZero union sigval si_value; 53*10465441SEvalZero }; 54*10465441SEvalZero typedef struct siginfo siginfo_t; 55*10465441SEvalZero #endif 56*10465441SEvalZero 57*10465441SEvalZero #define SI_USER 0x01 /* Signal sent by kill(). */ 58*10465441SEvalZero #define SI_QUEUE 0x02 /* Signal sent by sigqueue(). */ 59*10465441SEvalZero #define SI_TIMER 0x03 /* Signal generated by expiration of a 60*10465441SEvalZero timer set by timer_settime(). */ 61*10465441SEvalZero #define SI_ASYNCIO 0x04 /* Signal generated by completion of an 62*10465441SEvalZero asynchronous I/O request. */ 63*10465441SEvalZero #define SI_MESGQ 0x05 /* Signal generated by arrival of a 64*10465441SEvalZero message on an empty message queue. */ 65*10465441SEvalZero 66*10465441SEvalZero #ifdef RT_USING_NEWLIB 67*10465441SEvalZero #include <sys/signal.h> 68*10465441SEvalZero #endif 69*10465441SEvalZero 70*10465441SEvalZero #if defined(__CC_ARM) || defined(__CLANG_ARM) 71*10465441SEvalZero #include <signal.h> 72*10465441SEvalZero typedef unsigned long sigset_t; 73*10465441SEvalZero 74*10465441SEvalZero #define SIGHUP 1 75*10465441SEvalZero /* #define SIGINT 2 */ 76*10465441SEvalZero #define SIGQUIT 3 77*10465441SEvalZero /* #define SIGILL 4 */ 78*10465441SEvalZero #define SIGTRAP 5 79*10465441SEvalZero /* #define SIGABRT 6 */ 80*10465441SEvalZero #define SIGEMT 7 81*10465441SEvalZero /* #define SIGFPE 8 */ 82*10465441SEvalZero #define SIGKILL 9 83*10465441SEvalZero #define SIGBUS 10 84*10465441SEvalZero /* #define SIGSEGV 11 */ 85*10465441SEvalZero #define SIGSYS 12 86*10465441SEvalZero #define SIGPIPE 13 87*10465441SEvalZero #define SIGALRM 14 88*10465441SEvalZero /* #define SIGTERM 15 */ 89*10465441SEvalZero #define SIGURG 16 90*10465441SEvalZero #define SIGSTOP 17 91*10465441SEvalZero #define SIGTSTP 18 92*10465441SEvalZero #define SIGCONT 19 93*10465441SEvalZero #define SIGCHLD 20 94*10465441SEvalZero #define SIGTTIN 21 95*10465441SEvalZero #define SIGTTOU 22 96*10465441SEvalZero #define SIGPOLL 23 97*10465441SEvalZero #define SIGWINCH 24 98*10465441SEvalZero /* #define SIGUSR1 25 */ 99*10465441SEvalZero /* #define SIGUSR2 26 */ 100*10465441SEvalZero #define SIGRTMIN 27 101*10465441SEvalZero #define SIGRTMAX 31 102*10465441SEvalZero #define NSIG 32 103*10465441SEvalZero 104*10465441SEvalZero #define SIG_SETMASK 0 /* set mask with sigprocmask() */ 105*10465441SEvalZero #define SIG_BLOCK 1 /* set of signals to block */ 106*10465441SEvalZero #define SIG_UNBLOCK 2 /* set of signals to, well, unblock */ 107*10465441SEvalZero 108*10465441SEvalZero typedef void (*_sig_func_ptr)(int); 109*10465441SEvalZero 110*10465441SEvalZero struct sigaction 111*10465441SEvalZero { 112*10465441SEvalZero _sig_func_ptr sa_handler; 113*10465441SEvalZero sigset_t sa_mask; 114*10465441SEvalZero int sa_flags; 115*10465441SEvalZero }; 116*10465441SEvalZero 117*10465441SEvalZero #define sigaddset(what,sig) (*(what) |= (1<<(sig)), 0) 118*10465441SEvalZero #define sigdelset(what,sig) (*(what) &= ~(1<<(sig)), 0) 119*10465441SEvalZero #define sigemptyset(what) (*(what) = 0, 0) 120*10465441SEvalZero #define sigfillset(what) (*(what) = ~(0), 0) 121*10465441SEvalZero #define sigismember(what,sig) (((*(what)) & (1<<(sig))) != 0) 122*10465441SEvalZero 123*10465441SEvalZero int sigprocmask (int how, const sigset_t *set, sigset_t *oset); 124*10465441SEvalZero int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); 125*10465441SEvalZero 126*10465441SEvalZero #elif defined(__IAR_SYSTEMS_ICC__) 127*10465441SEvalZero #include <signal.h> 128*10465441SEvalZero typedef unsigned long sigset_t; 129*10465441SEvalZero 130*10465441SEvalZero #define SIGHUP 1 131*10465441SEvalZero #define SIGINT 2 132*10465441SEvalZero #define SIGQUIT 3 133*10465441SEvalZero #define SIGILL 4 134*10465441SEvalZero #define SIGTRAP 5 135*10465441SEvalZero /* #define SIGABRT 6 */ 136*10465441SEvalZero #define SIGEMT 7 137*10465441SEvalZero #define SIGFPE 8 138*10465441SEvalZero #define SIGKILL 9 139*10465441SEvalZero #define SIGBUS 10 140*10465441SEvalZero #define SIGSEGV 11 141*10465441SEvalZero #define SIGSYS 12 142*10465441SEvalZero #define SIGPIPE 13 143*10465441SEvalZero #define SIGALRM 14 144*10465441SEvalZero #define SIGTERM 15 145*10465441SEvalZero #define SIGURG 16 146*10465441SEvalZero #define SIGSTOP 17 147*10465441SEvalZero #define SIGTSTP 18 148*10465441SEvalZero #define SIGCONT 19 149*10465441SEvalZero #define SIGCHLD 20 150*10465441SEvalZero #define SIGTTIN 21 151*10465441SEvalZero #define SIGTTOU 22 152*10465441SEvalZero #define SIGPOLL 23 153*10465441SEvalZero #define SIGWINCH 24 154*10465441SEvalZero #define SIGUSR1 25 155*10465441SEvalZero #define SIGUSR2 26 156*10465441SEvalZero #define SIGRTMIN 27 157*10465441SEvalZero #define SIGRTMAX 31 158*10465441SEvalZero #define NSIG 32 159*10465441SEvalZero 160*10465441SEvalZero #define SIG_SETMASK 0 /* set mask with sigprocmask() */ 161*10465441SEvalZero #define SIG_BLOCK 1 /* set of signals to block */ 162*10465441SEvalZero #define SIG_UNBLOCK 2 /* set of signals to, well, unblock */ 163*10465441SEvalZero 164*10465441SEvalZero typedef void (*_sig_func_ptr)(int); 165*10465441SEvalZero 166*10465441SEvalZero struct sigaction 167*10465441SEvalZero { 168*10465441SEvalZero _sig_func_ptr sa_handler; 169*10465441SEvalZero sigset_t sa_mask; 170*10465441SEvalZero int sa_flags; 171*10465441SEvalZero }; 172*10465441SEvalZero 173*10465441SEvalZero #define sigaddset(what,sig) (*(what) |= (1<<(sig)), 0) 174*10465441SEvalZero #define sigdelset(what,sig) (*(what) &= ~(1<<(sig)), 0) 175*10465441SEvalZero #define sigemptyset(what) (*(what) = 0, 0) 176*10465441SEvalZero #define sigfillset(what) (*(what) = ~(0), 0) 177*10465441SEvalZero #define sigismember(what,sig) (((*(what)) & (1<<(sig))) != 0) 178*10465441SEvalZero 179*10465441SEvalZero int sigprocmask (int how, const sigset_t *set, sigset_t *oset); 180*10465441SEvalZero int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); 181*10465441SEvalZero #endif 182*10465441SEvalZero 183*10465441SEvalZero #ifdef __cplusplus 184*10465441SEvalZero } 185*10465441SEvalZero #endif 186*10465441SEvalZero 187*10465441SEvalZero #endif 188*10465441SEvalZero 189