1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
/**
* @file
*
* @brief POSIX Signals Support
*
* This include file defines internal information about POSIX signals.
*/
/*
* COPYRIGHT (c) 1989-2013.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*/
#ifndef _RTEMS_POSIX_PSIGNALIMPL_H
#define _RTEMS_POSIX_PSIGNALIMPL_H
/**
* @defgroup POSIX_SIGNALS POSIX Signals Support
*
* @ingroup POSIXAPI
*
* @brief Internal Information about POSIX Signals
*
*/
/**@{**/
#include <rtems/posix/psignal.h>
#include <rtems/posix/pthread.h>
#include <rtems/posix/sigset.h>
#include <rtems/score/apiext.h>
#include <rtems/score/isrlock.h>
#include <rtems/score/threadq.h>
#define _States_Is_interruptible_signal( _states ) \
( ((_states) & \
(STATES_WAITING_FOR_SIGNAL|STATES_INTERRUPTIBLE_BY_SIGNAL)) == \
(STATES_WAITING_FOR_SIGNAL|STATES_INTERRUPTIBLE_BY_SIGNAL))
#define SIGACTION_TERMINATE \
{ 0, SIGNAL_ALL_MASK, {_POSIX_signals_Abnormal_termination_handler} }
#define SIGACTION_IGNORE \
{ 0, SIGNAL_ALL_MASK, {SIG_IGN} }
#define SIGACTION_STOP \
{ 0, SIGNAL_ALL_MASK, {_POSIX_signals_Stop_handler} }
#define SIGACTION_CONTINUE \
{ 0, SIGNAL_ALL_MASK, {_POSIX_signals_Continue_handler} }
#define SIG_ARRAY_MAX (SIGRTMAX + 1)
/*
* Variables
*/
extern ISR_lock_Control _POSIX_signals_Lock;
extern sigset_t _POSIX_signals_Pending;
extern const struct sigaction _POSIX_signals_Default_vectors[ SIG_ARRAY_MAX ];
extern struct sigaction _POSIX_signals_Vectors[ SIG_ARRAY_MAX ];
extern Thread_queue_Control _POSIX_signals_Wait_queue;
extern Chain_Control _POSIX_signals_Inactive_siginfo;
extern Chain_Control _POSIX_signals_Siginfo[ SIG_ARRAY_MAX ];
extern API_extensions_Post_switch_control _POSIX_signals_Post_switch;
/*
* Internal routines
*/
/**
* @brief POSIX signals manager initialization.
*/
void _POSIX_signals_Manager_Initialization(void);
#define _POSIX_signals_Acquire( lock_context ) \
_ISR_lock_ISR_disable_and_acquire( &_POSIX_signals_Lock, lock_context )
#define _POSIX_signals_Release( lock_context ) \
_ISR_lock_Release_and_ISR_enable( &_POSIX_signals_Lock, lock_context )
static inline void _POSIX_signals_Add_post_switch_extension(void)
{
_API_extensions_Add_post_switch( &_POSIX_signals_Post_switch );
}
/**
* @brief Unlock POSIX signals thread.
*/
bool _POSIX_signals_Unblock_thread(
Thread_Control *the_thread,
int signo,
siginfo_t *info
);
/**
* @brief Check POSIX signal.
*/
bool _POSIX_signals_Check_signal(
POSIX_API_Control *api,
int signo,
bool is_global
);
/**
* @brief Clear POSIX signals.
*/
bool _POSIX_signals_Clear_signals(
POSIX_API_Control *api,
int signo,
siginfo_t *info,
bool is_global,
bool check_blocked,
bool do_signals_acquire_release
);
int killinfo(
pid_t pid,
int sig,
const union sigval *value
);
/**
* @brief Set POSIX process signals.
*/
void _POSIX_signals_Set_process_signals(
sigset_t mask
);
void _POSIX_signals_Clear_process_signals(
int signo
);
/*
* Default signal handlers
*/
#define _POSIX_signals_Stop_handler NULL
#define _POSIX_signals_Continue_handler NULL
void _POSIX_signals_Abnormal_termination_handler( int signo );
/** @} */
#endif
/* end of file */
|