xref: /nrf52832-nimble/rt-thread/include/libc/libc_signal.h (revision 104654410c56c573564690304ae786df310c91fc)
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