blob: 1014440d45d4ba159a3424b901cbba636e9d75c8 [file] [log] [blame]
Rich Felker0b44a032011-02-12 00:22:29 -05001#ifndef _SIGNAL_H
2#define _SIGNAL_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
Rich Felkerc1a96582012-09-07 23:13:55 -04008#include <features.h>
Rich Felker400c5e52012-09-06 22:44:55 -04009
Rich Felker1322cb82011-02-14 20:33:54 -050010#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
Rich Felker419ae6d2012-05-22 21:52:08 -040011 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
12 || defined(_BSD_SOURCE)
Rich Felker1322cb82011-02-14 20:33:54 -050013
Rich Felker03a83622011-09-20 10:58:18 -040014#ifdef _GNU_SOURCE
15#define __siginfo siginfo
16#endif
17
Rich Felker0b44a032011-02-12 00:22:29 -050018#define __NEED_size_t
19#define __NEED_pid_t
20#define __NEED_uid_t
21#define __NEED_struct_timespec
22#define __NEED_pthread_t
Rich Felker80c4dcd2011-03-29 13:01:25 -040023#define __NEED_pthread_attr_t
Rich Felker0b44a032011-02-12 00:22:29 -050024#define __NEED_time_t
25#define __NEED_clock_t
26#define __NEED_sigset_t
27#define __NEED_siginfo_t
28
29#include <bits/alltypes.h>
30
Rich Felker81a55772011-09-21 22:25:31 -040031#define SIG_HOLD ((void (*)(int)) 2)
32
Rich Felkerf780ac52011-09-19 20:02:12 -040033#define SIG_BLOCK 0
34#define SIG_UNBLOCK 1
35#define SIG_SETMASK 2
36
Rich Felkerf780ac52011-09-19 20:02:12 -040037#define SI_ASYNCNL (-60)
38#define SI_TKILL (-6)
39#define SI_SIGIO (-5)
40#define SI_ASYNCIO (-4)
41#define SI_MESGQ (-3)
42#define SI_TIMER (-2)
43#define SI_QUEUE (-1)
44#define SI_USER 0
45#define SI_KERNEL 128
46
47#define FPE_INTDIV 1
48#define FPE_INTOVF 2
49#define FPE_FLTDIV 3
50#define FPE_FLTOVF 4
Rich Felker8eb9a3a2012-01-25 15:30:42 -050051#define FPE_FLTUND 5
Rich Felkerf780ac52011-09-19 20:02:12 -040052#define FPE_FLTRES 6
53#define FPE_FLTINV 7
54#define FPE_FLTSUB 8
55
56#define ILL_ILLOPC 1
57#define ILL_ILLOPN 2
58#define ILL_ILLADR 3
59#define ILL_ILLTRP 4
60#define ILL_PRVOPC 5
61#define ILL_PRVREG 6
62#define ILL_COPROC 7
63#define ILL_BADSTK 8
64
65#define SEGV_MAPERR 1
66#define SEGV_ACCERR 2
67
68#define BUS_ADRALN 1
69#define BUS_ADRERR 2
70#define BUS_OBJERR 3
71
72#define CLD_EXITED 1
73#define CLD_KILLED 2
74#define CLD_DUMPED 3
75#define CLD_TRAPPED 4
76#define CLD_STOPPED 5
77#define CLD_CONTINUED 6
78
Rich Felker80c4dcd2011-03-29 13:01:25 -040079struct sigaction {
Rich Felker0b44a032011-02-12 00:22:29 -050080 union {
81 void (*sa_handler)(int);
82 void (*sa_sigaction)(int, siginfo_t *, void *);
83 } __sa_handler;
84 sigset_t sa_mask;
85 int sa_flags;
Rich Felker0115a6e2012-04-13 23:06:54 -040086 void (*sa_restorer)(void);
Rich Felker0b44a032011-02-12 00:22:29 -050087};
88#define sa_handler __sa_handler.sa_handler
89#define sa_sigaction __sa_handler.sa_sigaction
90
Rich Felker80c4dcd2011-03-29 13:01:25 -040091typedef struct {
Rich Felker0b44a032011-02-12 00:22:29 -050092 void *ss_sp;
93 int ss_flags;
94 size_t ss_size;
95} stack_t;
96
Rich Felker80c4dcd2011-03-29 13:01:25 -040097union sigval {
Rich Felker0b44a032011-02-12 00:22:29 -050098 int sival_int;
99 void *sival_ptr;
100};
101
Rich Felker03a83622011-09-20 10:58:18 -0400102struct __siginfo {
Rich Felkerf780ac52011-09-19 20:02:12 -0400103 int si_signo, si_errno, si_code;
104 union {
105 char __pad[128 - 3*sizeof(int)];
106 struct {
107 pid_t si_pid;
108 uid_t si_uid;
109 union sigval si_sigval;
110 } __rt;
111 struct {
112 unsigned int si_timer1, si_timer2;
113 } __timer;
114 struct {
115 pid_t si_pid;
116 uid_t si_uid;
117 int si_status;
118 clock_t si_utime, si_stime;
119 } __sigchld;
120 struct {
121 void *si_addr;
122 } __sigfault;
123 struct {
124 long si_band;
125 int si_fd;
126 } __sigpoll;
127 } __si_fields;
128};
129#define si_pid __si_fields.__sigchld.si_pid
130#define si_uid __si_fields.__sigchld.si_uid
131#define si_status __si_fields.__sigchld.si_status
132#define si_utime __si_fields.__sigchld.si_utime
133#define si_stime __si_fields.__sigchld.si_stime
134#define si_value __si_fields.__rt.si_sigval
135#define si_addr __si_fields.__sigfault.si_addr
136#define si_band __si_fields.__sigpoll.si_band
137#define si_fd __si_fields.__sigpoll.si_fd
138#define si_timer1 __si_fields.__timer.si_timer1
139#define si_timer2 __si_fields.__timer.si_timer2
Rich Felker8c07f6e2011-09-19 22:27:02 -0400140#define si_ptr __si_fields.__rt.si_sigval.sival_ptr
141#define si_int __si_fields.__rt.si_sigval.sival_int
Rich Felkerf780ac52011-09-19 20:02:12 -0400142
Rich Felker80c4dcd2011-03-29 13:01:25 -0400143struct sigevent {
144 union sigval sigev_value;
145 int sigev_signo;
146 int sigev_notify;
147 void (*sigev_notify_function)(union sigval);
148 pthread_attr_t *sigev_notify_attributes;
Rich Felker7f547152011-06-16 17:11:35 -0400149 char __pad[56-3*sizeof(long)];
Rich Felker80c4dcd2011-03-29 13:01:25 -0400150};
151
152#define SIGEV_SIGNAL 0
153#define SIGEV_NONE 1
154#define SIGEV_THREAD 2
155
Rich Felker0b44a032011-02-12 00:22:29 -0500156int __libc_current_sigrtmin(void);
157int __libc_current_sigrtmax(void);
158
159#define SIGRTMIN (__libc_current_sigrtmin())
160#define SIGRTMAX (__libc_current_sigrtmax())
161
Rich Felker0b44a032011-02-12 00:22:29 -0500162int kill(pid_t, int);
Rich Felker0b44a032011-02-12 00:22:29 -0500163
164int sigemptyset(sigset_t *);
165int sigfillset(sigset_t *);
166int sigaddset(sigset_t *, int);
167int sigdelset(sigset_t *, int);
168int sigismember(const sigset_t *, int);
169
Rich Felker400c5e52012-09-06 22:44:55 -0400170int sigprocmask(int, const sigset_t *__restrict, sigset_t *__restrict);
Rich Felker0b44a032011-02-12 00:22:29 -0500171int sigsuspend(const sigset_t *);
Rich Felker400c5e52012-09-06 22:44:55 -0400172int sigaction(int, const struct sigaction *__restrict, struct sigaction *__restrict);
Rich Felker0b44a032011-02-12 00:22:29 -0500173int sigpending(sigset_t *);
Rich Felker400c5e52012-09-06 22:44:55 -0400174int sigwait(const sigset_t *__restrict, int *__restrict);
175int sigwaitinfo(const sigset_t *__restrict, siginfo_t *__restrict);
176int sigtimedwait(const sigset_t *__restrict, siginfo_t *__restrict, const struct timespec *__restrict);
Rich Felker0b44a032011-02-12 00:22:29 -0500177int sigqueue(pid_t, int, const union sigval);
178
Rich Felker400c5e52012-09-06 22:44:55 -0400179int pthread_sigmask(int, const sigset_t *__restrict, sigset_t *__restrict);
Rich Felker0b44a032011-02-12 00:22:29 -0500180int pthread_kill(pthread_t, int);
181
Rich Felkeradb70932011-09-02 14:25:43 -0400182void psiginfo(const siginfo_t *, const char *);
183void psignal(int, const char *);
184
Rich Felker1322cb82011-02-14 20:33:54 -0500185#endif
186
187#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE)
188int killpg(pid_t, int);
Rich Felker400c5e52012-09-06 22:44:55 -0400189int sigaltstack(const stack_t *__restrict, stack_t *__restrict);
Rich Felker1322cb82011-02-14 20:33:54 -0500190int sighold(int);
191int sigignore(int);
192int siginterrupt(int, int);
193int sigpause(int);
194int sigrelse(int);
195void (*sigset(int, void (*)(int)))(int);
Rich Felkerf780ac52011-09-19 20:02:12 -0400196#define TRAP_BRKPT 1
197#define TRAP_TRACE 2
198#define POLL_IN 1
199#define POLL_OUT 2
200#define POLL_MSG 3
201#define POLL_ERR 4
202#define POLL_PRI 5
203#define POLL_HUP 6
204#define SS_ONSTACK 1
205#define SS_DISABLE 2
206#define MINSIGSTKSZ 2048
207#define SIGSTKSZ 8192
Rich Felker1322cb82011-02-14 20:33:54 -0500208#endif
209
Rich Felker419ae6d2012-05-22 21:52:08 -0400210#ifdef _BSD_SOURCE
211typedef void (*sig_t)(int);
212#endif
213
Rich Felker0b44a032011-02-12 00:22:29 -0500214#ifdef _GNU_SOURCE
Rich Felker0f5b4352011-04-13 08:45:28 -0400215typedef void (*sighandler_t)(int);
Rich Felker9f370fa2012-05-22 21:54:19 -0400216void (*bsd_signal(int, void (*)(int)))(int);
Rich Felkerfb80e042011-09-12 00:00:30 -0400217int sigisemptyset(const sigset_t *);
Rich Felker20291142011-05-05 17:44:06 -0400218#define SA_NOMASK SA_NODEFER
Rich Felkerf780ac52011-09-19 20:02:12 -0400219#define SA_ONESHOT SA_RESETHAND
Rich Felker0b44a032011-02-12 00:22:29 -0500220#endif
221
Rich Felker3eb9fea2011-02-15 15:10:00 -0500222#include <bits/signal.h>
223
Rich Felker81a55772011-09-21 22:25:31 -0400224#define SIG_ERR ((void (*)(int))-1)
225#define SIG_DFL ((void (*)(int)) 0)
226#define SIG_IGN ((void (*)(int)) 1)
227
Rich Felker1322cb82011-02-14 20:33:54 -0500228typedef int sig_atomic_t;
229
230void (*signal(int, void (*)(int)))(int);
231int raise(int);
232
Rich Felker0b44a032011-02-12 00:22:29 -0500233#ifdef __cplusplus
234}
235#endif
236
237#endif