master
  1#ifndef _SIGNAL_H
  2#define _SIGNAL_H
  3
  4#ifdef __cplusplus
  5extern "C" {
  6#endif
  7
  8#include <features.h>
  9
 10#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
 11 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
 12 || defined(_BSD_SOURCE)
 13
 14#ifdef _GNU_SOURCE
 15#define __ucontext ucontext
 16#endif
 17
 18#define __NEED_size_t
 19#define __NEED_pid_t
 20#define __NEED_uid_t
 21#define __NEED_struct_timespec
 22#define __NEED_pthread_t
 23#define __NEED_pthread_attr_t
 24#define __NEED_time_t
 25#define __NEED_clock_t
 26#define __NEED_sigset_t
 27
 28#include <bits/alltypes.h>
 29
 30#define SIG_BLOCK     0
 31#define SIG_UNBLOCK   1
 32#define SIG_SETMASK   2
 33
 34#define SI_ASYNCNL (-60)
 35#define SI_TKILL (-6)
 36#define SI_SIGIO (-5)
 37#define SI_ASYNCIO (-4)
 38#define SI_MESGQ (-3)
 39#define SI_TIMER (-2)
 40#define SI_QUEUE (-1)
 41#define SI_USER 0
 42#define SI_KERNEL 128
 43
 44typedef struct sigaltstack stack_t;
 45
 46#endif
 47
 48#include <bits/signal.h>
 49
 50#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
 51 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
 52 || defined(_BSD_SOURCE)
 53
 54#define SIG_HOLD ((void (*)(int)) 2)
 55
 56#define FPE_INTDIV 1
 57#define FPE_INTOVF 2
 58#define FPE_FLTDIV 3
 59#define FPE_FLTOVF 4
 60#define FPE_FLTUND 5
 61#define FPE_FLTRES 6
 62#define FPE_FLTINV 7
 63#define FPE_FLTSUB 8
 64
 65#define ILL_ILLOPC 1
 66#define ILL_ILLOPN 2
 67#define ILL_ILLADR 3
 68#define ILL_ILLTRP 4
 69#define ILL_PRVOPC 5
 70#define ILL_PRVREG 6
 71#define ILL_COPROC 7
 72#define ILL_BADSTK 8
 73
 74#define SEGV_MAPERR 1
 75#define SEGV_ACCERR 2
 76#define SEGV_BNDERR 3
 77#define SEGV_PKUERR 4
 78#define SEGV_MTEAERR 8
 79#define SEGV_MTESERR 9
 80
 81#define BUS_ADRALN 1
 82#define BUS_ADRERR 2
 83#define BUS_OBJERR 3
 84#define BUS_MCEERR_AR 4
 85#define BUS_MCEERR_AO 5
 86
 87#define CLD_EXITED 1
 88#define CLD_KILLED 2
 89#define CLD_DUMPED 3
 90#define CLD_TRAPPED 4
 91#define CLD_STOPPED 5
 92#define CLD_CONTINUED 6
 93
 94union sigval {
 95	int sival_int;
 96	void *sival_ptr;
 97};
 98
 99typedef struct {
100#ifdef __SI_SWAP_ERRNO_CODE
101	int si_signo, si_code, si_errno;
102#else
103	int si_signo, si_errno, si_code;
104#endif
105	union {
106		char __pad[128 - 2*sizeof(int) - sizeof(long)];
107		struct {
108			union {
109				struct {
110					pid_t si_pid;
111					uid_t si_uid;
112				} __piduid;
113				struct {
114					int si_timerid;
115					int si_overrun;
116				} __timer;
117			} __first;
118			union {
119				union sigval si_value;
120				struct {
121					int si_status;
122					clock_t si_utime, si_stime;
123				} __sigchld;
124			} __second;
125		} __si_common;
126		struct {
127			void *si_addr;
128			short si_addr_lsb;
129			union {
130				struct {
131					void *si_lower;
132					void *si_upper;
133				} __addr_bnd;
134				unsigned si_pkey;
135			} __first;
136		} __sigfault;
137		struct {
138			long si_band;
139			int si_fd;
140		} __sigpoll;
141		struct {
142			void *si_call_addr;
143			int si_syscall;
144			unsigned si_arch;
145		} __sigsys;
146	} __si_fields;
147} siginfo_t;
148#define si_pid     __si_fields.__si_common.__first.__piduid.si_pid
149#define si_uid     __si_fields.__si_common.__first.__piduid.si_uid
150#define si_status  __si_fields.__si_common.__second.__sigchld.si_status
151#define si_utime   __si_fields.__si_common.__second.__sigchld.si_utime
152#define si_stime   __si_fields.__si_common.__second.__sigchld.si_stime
153#define si_value   __si_fields.__si_common.__second.si_value
154#define si_addr    __si_fields.__sigfault.si_addr
155#define si_addr_lsb __si_fields.__sigfault.si_addr_lsb
156#define si_lower   __si_fields.__sigfault.__first.__addr_bnd.si_lower
157#define si_upper   __si_fields.__sigfault.__first.__addr_bnd.si_upper
158#define si_pkey    __si_fields.__sigfault.__first.si_pkey
159#define si_band    __si_fields.__sigpoll.si_band
160#define si_fd      __si_fields.__sigpoll.si_fd
161#define si_timerid __si_fields.__si_common.__first.__timer.si_timerid
162#define si_overrun __si_fields.__si_common.__first.__timer.si_overrun
163#define si_ptr     si_value.sival_ptr
164#define si_int     si_value.sival_int
165#define si_call_addr __si_fields.__sigsys.si_call_addr
166#define si_syscall __si_fields.__sigsys.si_syscall
167#define si_arch    __si_fields.__sigsys.si_arch
168
169struct sigaction {
170	union {
171		void (*sa_handler)(int);
172		void (*sa_sigaction)(int, siginfo_t *, void *);
173	} __sa_handler;
174	sigset_t sa_mask;
175	int sa_flags;
176	void (*sa_restorer)(void);
177};
178#define sa_handler   __sa_handler.sa_handler
179#define sa_sigaction __sa_handler.sa_sigaction
180
181#define SA_UNSUPPORTED 0x00000400
182#define SA_EXPOSE_TAGBITS 0x00000800
183
184struct sigevent {
185	union sigval sigev_value;
186	int sigev_signo;
187	int sigev_notify;
188	union {
189		char __pad[64 - 2*sizeof(int) - sizeof(union sigval)];
190		pid_t sigev_notify_thread_id;
191		struct {
192			void (*sigev_notify_function)(union sigval);
193			pthread_attr_t *sigev_notify_attributes;
194		} __sev_thread;
195	} __sev_fields;
196};
197
198#define sigev_notify_thread_id __sev_fields.sigev_notify_thread_id
199#define sigev_notify_function __sev_fields.__sev_thread.sigev_notify_function
200#define sigev_notify_attributes __sev_fields.__sev_thread.sigev_notify_attributes
201
202#define SIGEV_SIGNAL 0
203#define SIGEV_NONE 1
204#define SIGEV_THREAD 2
205#define SIGEV_THREAD_ID 4
206
207int __libc_current_sigrtmin(void);
208int __libc_current_sigrtmax(void);
209
210#define SIGRTMIN  (__libc_current_sigrtmin())
211#define SIGRTMAX  (__libc_current_sigrtmax())
212
213int kill(pid_t, int);
214
215int sigemptyset(sigset_t *);
216int sigfillset(sigset_t *);
217int sigaddset(sigset_t *, int);
218int sigdelset(sigset_t *, int);
219int sigismember(const sigset_t *, int);
220
221int sigprocmask(int, const sigset_t *__restrict, sigset_t *__restrict);
222int sigsuspend(const sigset_t *);
223int sigaction(int, const struct sigaction *__restrict, struct sigaction *__restrict);
224int sigpending(sigset_t *);
225int sigwait(const sigset_t *__restrict, int *__restrict);
226int sigwaitinfo(const sigset_t *__restrict, siginfo_t *__restrict);
227int sigtimedwait(const sigset_t *__restrict, siginfo_t *__restrict, const struct timespec *__restrict);
228int sigqueue(pid_t, int, union sigval);
229
230int pthread_sigmask(int, const sigset_t *__restrict, sigset_t *__restrict);
231int pthread_kill(pthread_t, int);
232
233void psiginfo(const siginfo_t *, const char *);
234void psignal(int, const char *);
235
236#endif
237
238#if defined(_XOPEN_SOURCE) || defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
239int killpg(pid_t, int);
240int sigaltstack(const stack_t *__restrict, stack_t *__restrict);
241int sighold(int);
242int sigignore(int);
243int siginterrupt(int, int);
244int sigpause(int);
245int sigrelse(int);
246void (*sigset(int, void (*)(int)))(int);
247#define TRAP_BRKPT 1
248#define TRAP_TRACE 2
249#define TRAP_BRANCH 3
250#define TRAP_HWBKPT 4
251#define TRAP_UNK 5
252#define POLL_IN 1
253#define POLL_OUT 2
254#define POLL_MSG 3
255#define POLL_ERR 4
256#define POLL_PRI 5
257#define POLL_HUP 6
258#define SS_ONSTACK    1
259#define SS_DISABLE    2
260#define SS_AUTODISARM (1U << 31)
261#define SS_FLAG_BITS SS_AUTODISARM
262#endif
263
264#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
265#define NSIG _NSIG
266typedef void (*sig_t)(int);
267
268#define SYS_SECCOMP 1
269#define SYS_USER_DISPATCH 2
270#endif
271
272#ifdef _GNU_SOURCE
273typedef void (*sighandler_t)(int);
274void (*bsd_signal(int, void (*)(int)))(int);
275int sigisemptyset(const sigset_t *);
276int sigorset (sigset_t *, const sigset_t *, const sigset_t *);
277int sigandset(sigset_t *, const sigset_t *, const sigset_t *);
278
279#define SA_NOMASK SA_NODEFER
280#define SA_ONESHOT SA_RESETHAND
281#endif
282
283#define SIG_ERR  ((void (*)(int))-1)
284#define SIG_DFL  ((void (*)(int)) 0)
285#define SIG_IGN  ((void (*)(int)) 1)
286
287typedef int sig_atomic_t;
288
289void (*signal(int, void (*)(int)))(int);
290int raise(int);
291
292#if _REDIR_TIME64
293#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
294 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
295 || defined(_BSD_SOURCE)
296__REDIR(sigtimedwait, __sigtimedwait_time64);
297#endif
298#endif
299
300#ifdef __cplusplus
301}
302#endif
303
304#endif