source: mainline/uspace/lib/posix/signal.h@ 102a729

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 102a729 was 3f466c33, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 14 years ago

More additions to time.h (still WIP)

  • Property mode set to 100644
File size: 7.2 KB
RevLine 
[098eeba3]1/*
2 * Copyright (c) 2011 Jiri Zarevucky
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
[4f4b4e7]29/** @addtogroup libposix
30 * @{
31 */
32/** @file
33 */
34
[098eeba3]35#ifndef POSIX_SIGNAL_H_
36#define POSIX_SIGNAL_H_
37
[4f4b4e7]38#include "libc/errno.h"
[fa9815d9]39#include "sys/types.h"
[098eeba3]40
[d3ce33fa]41extern void __posix_default_signal_handler(int signo);
42extern void __posix_hold_signal_handler(int signo);
43extern void __posix_ignore_signal_handler(int signo);
[098eeba3]44
[4f4b4e7]45#undef SIG_DFL
[d3ce33fa]46#define SIG_DFL ((void (*)(int)) __posix_default_signal_handler)
[4f4b4e7]47#undef SIG_ERR
[d3ce33fa]48#define SIG_ERR ((void (*)(int)) NULL)
[fa9815d9]49#undef SIG_HOLD
[d3ce33fa]50#define SIG_HOLD ((void (*)(int)) __posix_hold_signal_handler)
[4f4b4e7]51#undef SIG_IGN
[d3ce33fa]52#define SIG_IGN ((void (*)(int)) __posix_ignore_signal_handler)
[098eeba3]53
[4f4b4e7]54typedef int posix_sig_atomic_t;
[d3ce33fa]55typedef uint32_t posix_sigset_t;
[fa9815d9]56typedef struct posix_mcontext {
[1a552fd]57 // FIXME: should not be empty to avoid compiler warnings (-pedantic)
58 int dummy;
[fa9815d9]59} posix_mcontext_t;
60
61union posix_sigval {
62 int sival_int;
63 void *sival_ptr;
64};
65
66struct posix_sigevent {
67 int sigev_notify; /* Notification type. */
68 int sigev_signo; /* Signal number. */
69 union posix_sigval sigev_value; /* Signal value. */
[1a552fd]70 void (*sigev_notify_function)(union posix_sigval); /* Notification function. */
[fa9815d9]71 posix_thread_attr_t *sigev_notify_attributes; /* Notification attributes. */
72};
73
74typedef struct {
75 int si_signo;
76 int si_code;
77
78 int si_errno;
79
[7530a00]80 posix_pid_t si_pid;
81 posix_uid_t si_uid;
[fa9815d9]82 void *si_addr;
83 int si_status;
84
85 long si_band;
86
87 union posix_sigval si_value;
88} posix_siginfo_t;
89
90struct posix_sigaction {
91 void (*sa_handler)(int);
92 posix_sigset_t sa_mask;
93 int sa_flags;
94 void (*sa_sigaction)(int, posix_siginfo_t *, void *);
95};
96
97typedef struct {
98 void *ss_sp;
99 size_t ss_size;
100 int ss_flags;
101} posix_stack_t;
102
103typedef struct posix_ucontext {
104 struct posix_ucontext *uc_link;
105 posix_sigset_t uc_sigmask;
106 posix_stack_t uc_stack;
107 posix_mcontext_t uc_mcontext;
108} posix_ucontext_t;
109
110
111/* Values of posix_sigevent::sigev_notify */
112#undef SIGEV_NONE
113#undef SIGEV_SIGNAL
114#undef SIGEV_THREAD
[d3ce33fa]115#define SIGEV_NONE 0
116#define SIGEV_SIGNAL 0
[fa9815d9]117#define SIGEV_THREAD 0
118
119#undef SIGRT_MIN
120#undef SIGRT_MAX
[d3ce33fa]121#define SIGRT_MIN 0
[fa9815d9]122#define SIGRT_MAX 0
123
124#undef SIG_BLOCK
125#undef SIG_UNBLOCK
126#undef SIG_SETMASK
[d3ce33fa]127#define SIG_BLOCK 0
128#define SIG_UNBLOCK 1
129#define SIG_SETMASK 2
[fa9815d9]130
131#undef SA_NOCLDSTOP
132#undef SA_ONSTACK
133#undef SA_RESETHAND
134#undef SA_RESTART
135#undef SA_SIGINFO
136#undef SA_NOCLDWAIT
137#undef SA_NODEFER
[d3ce33fa]138#define SA_NOCLDSTOP (1 << 0)
139#define SA_ONSTACK (1 << 1)
140#define SA_RESETHAND (1 << 2)
141#define SA_RESTART (1 << 3)
142#define SA_SIGINFO (1 << 4)
143#define SA_NOCLDWAIT (1 << 5)
144#define SA_NODEFER (1 << 6)
[fa9815d9]145
146#undef SS_ONSTACK
147#undef SS_DISABLE
[d3ce33fa]148#define SS_ONSTACK 0
[fa9815d9]149#define SS_DISABLE 0
150
151#undef MINSIGSTKSZ
152#undef SIGSTKSZ
[d3ce33fa]153#define MINSIGSTKSZ 0
[fa9815d9]154#define SIGSTKSZ 0
[098eeba3]155
156/* full POSIX set */
157enum {
[d3ce33fa]158 /* Termination Signals */
[098eeba3]159 SIGABRT,
[d3ce33fa]160 SIGQUIT,
161 SIGINT,
162 SIGTERM,
163
164 /* Child Signal */
[098eeba3]165 SIGCHLD,
[d3ce33fa]166
167 /* User signals */
168 SIGUSR1,
169 SIGUSR2,
170
171 /* Timer */
172 SIGALRM,
173 SIGVTALRM,
174 SIGPROF, /* obsolete */
175
176 _TOP_CATCHABLE_SIGNAL = SIGPROF,
177
178 /* Process Scheduler Interaction - not supported */
179 SIGSTOP,
[098eeba3]180 SIGCONT,
[d3ce33fa]181
182 /* Process Termination - can't be caught */
183 SIGKILL,
184
185 _TOP_SENDABLE_SIGNAL = SIGKILL,
186
187 /* Hardware Exceptions - can't be caught or sent */
[098eeba3]188 SIGFPE,
[d3ce33fa]189 SIGBUS,
[098eeba3]190 SIGILL,
191 SIGSEGV,
[d3ce33fa]192
193 /* Other Exceptions - not supported */
[098eeba3]194 SIGSYS,
[d3ce33fa]195 SIGXCPU,
196 SIGXFSZ,
197
198 /* Debugging - not supported */
[098eeba3]199 SIGTRAP,
[d3ce33fa]200
201 /* Communication Signals - not supported */
202 SIGHUP,
203 SIGPIPE,
204 SIGPOLL, /* obsolete */
[098eeba3]205 SIGURG,
[d3ce33fa]206
207 /* Terminal Signals - not supported */
208 SIGTSTP,
209 SIGTTIN,
210 SIGTTOU,
211
212 _TOP_SIGNAL = SIGTTOU
[098eeba3]213};
214
[d3ce33fa]215/* Values for sigaction field si_code. */
216
217enum {
218 SI_USER,
219 SI_QUEUE,
220 SI_TIMER,
221 SI_ASYNCIO,
222 SI_MESGQ,
223 ILL_ILLOPC,
224 ILL_ILLOPN,
225 ILL_ILLADR,
226 ILL_ILLTRP,
227 ILL_PRVOPC,
228 ILL_PRVREG,
229 ILL_COPROC,
230 ILL_BADSTK,
231 FPE_INTDIV,
232 FPE_INTOVF,
233 FPE_FLTDIV,
234 FPE_FLTOVF,
235 FPE_FLTUND,
236 FPE_FLTRES,
237 FPE_FLTINV,
238 FPE_FLTSUB,
239 SEGV_MAPERR,
240 SEGV_ACCERR,
241 BUS_ADRALN,
242 BUS_ADRERR,
243 BUS_OBJERR,
244 TRAP_BRKPT,
245 TRAP_TRACE,
246 CLD_EXITED,
247 CLD_KILLED,
248 CLD_DUMPED,
249 CLD_TRAPPED,
250 CLD_STOPPED,
251 CLD_CONTINUED,
252 POLL_IN,
253 POLL_OUT,
254 POLL_MSG,
255 POLL_ERR,
256 POLL_PRI,
257 POLL_HUP
258};
259
260extern int posix_sigaction(int sig, const struct posix_sigaction *restrict act,
261 struct posix_sigaction *restrict oact);
262
[7530a00]263extern void (*posix_signal(int sig, void (*func)(int)))(int);
264extern int posix_raise(int sig);
265extern int posix_kill(posix_pid_t pid, int sig);
[d3ce33fa]266extern int posix_killpg(posix_pid_t pid, int sig);
267
268extern void posix_psiginfo(const posix_siginfo_t *pinfo, const char *message);
269extern void posix_psignal(int signum, const char *message);
[7530a00]270
[1a552fd]271extern int posix_sigemptyset(posix_sigset_t *set);
[d3ce33fa]272extern int posix_sigfillset(posix_sigset_t *set);
273extern int posix_sigaddset(posix_sigset_t *set, int signo);
274extern int posix_sigdelset(posix_sigset_t *set, int signo);
275extern int posix_sigismember(const posix_sigset_t *set, int signo);
276
277extern int posix_thread_sigmask(int how, const posix_sigset_t *restrict set,
278 posix_sigset_t *restrict oset);
[1a552fd]279extern int posix_sigprocmask(int how, const posix_sigset_t *restrict set,
280 posix_sigset_t *restrict oset);
281
[491e1ee]282#ifndef LIBPOSIX_INTERNAL
[4f4b4e7]283 #define sig_atomic_t posix_sig_atomic_t
[fa9815d9]284 #define sigset_t posix_sigset_t
285 #define sigval posix_sigval
[3f466c33]286 #ifndef sigevent
287 #define sigevent posix_sigevent
288 #endif
[fa9815d9]289 #define sigaction posix_sigaction
290 #define mcontext_t posix_mcontext_t
291 #define ucontext_t posix_ucontext_t
292 #define stack_t posix_stack_t
293 #define siginfo_t posix_siginfo_t
[7530a00]294
295 #define signal posix_signal
296 #define raise posix_raise
297 #define kill posix_kill
[d3ce33fa]298 #define killpg posix_killpg
299
300 #define psiginfo posix_psiginfo
301 #define psignal posix_psignal
302
[1a552fd]303 #define sigemptyset posix_sigemptyset
[d3ce33fa]304 #define sigfillset posix_sigfillset
305 #define sigaddset posix_sigaddset
306 #define sigdelset posix_sigdelset
307 #define sigismember posix_sigismember
308
309 #define pthread_sigmask posix_thread_sigmask
[1a552fd]310 #define sigprocmask posix_sigprocmask
[4f4b4e7]311#endif
312
[098eeba3]313#endif /* POSIX_SIGNAL_H_ */
314
[4f4b4e7]315/** @}
316 */
Note: See TracBrowser for help on using the repository browser.