Remove need for externally alloced sigdata struct
[akaros.git] / user / parlib / include / signal.h
1 /* Copyright (c) 2015 Google Inc.
2  * Kevin Klues <klueska@cs.berkeley.edu>
3  * See LICENSE for details.
4  */
5
6 #pragma once
7 #ifdef BUILDING_PARLIB
8 #include_next "signal.h"
9 #else
10 #include <signal.h>
11 #endif
12
13 #include <ros/procinfo.h>
14
15 /* Data we need to carry around as part of handling posix signals on akaros. */
16 struct sigdata {
17         struct user_context u_ctx;
18         struct ancillary_state as;
19         struct siginfo info;
20 };
21
22 /* A set of functions related to handling posix signals on akaros. The
23  * implementation of these functions is 2LS specific. */
24 struct signal_ops {
25         int (*sigaltstack)(__const struct sigaltstack *__restrict,
26                        struct sigaltstack *__restrict);
27         int (*siginterrupt)(int, int);
28         int (*sigpending)(sigset_t *);
29         int (*sigprocmask)(int, __const sigset_t *__restrict, sigset_t *__restrict);
30         int (*sigqueue)(__pid_t, int, __const union sigval);
31         int (*sigreturn)(struct sigcontext *__scp);
32         int (*sigstack)(struct sigstack *, struct sigstack *);
33         int (*sigsuspend)(__const sigset_t *);
34         int (*sigtimedwait)(__const sigset_t *__restrict, siginfo_t *__restrict,
35                             __const struct timespec *__restrict);
36         int (*sigwait)(__const sigset_t *__restrict, int *__restrict);
37         int (*sigwaitinfo)(__const sigset_t *__restrict, siginfo_t *__restrict);
38 };
39
40 /* Glibc defines the symbol for signal_ops so that the function pointers
41  * assigned in it can be used from within glibc itself. */
42 extern struct signal_ops *signal_ops;
43
44 /* External API for initializing and generating posix signals inside a 2LS. */
45 void init_posix_signals(void);
46 void trigger_posix_signal(int sig_nr, struct siginfo *info, void *aux);