1 #include "pthread_impl.h"
2 #include "syscall.h"
3 #include <signal.h>
4
5 static const unsigned long all_mask[] = {
6 #if ULONG_MAX == 0xffffffff && _NSIG == 129
7 -1UL, -1UL, -1UL, -1UL
8 #elif ULONG_MAX == 0xffffffff
9 -1UL, -1UL
10 #else
11 -1UL
12 #endif
13 };
14
15 static const unsigned long app_mask[] = {
16 #if ULONG_MAX == 0xffffffff
17 #if _NSIG == 65
18 0x7fffffff, 0xfffffffc
19 #else
20 0x7fffffff, 0xfffffffc, -1UL, -1UL
21 #endif
22 #else
23 #if _NSIG == 65
24 0xfffffffc7fffffff
25 #else
26 0xfffffffc7fffffff, -1UL
27 #endif
28 #endif
29 };
30
__block_all_sigs(void * set)31 void __block_all_sigs(void *set)
32 {
33 __syscall(SYS_rt_sigprocmask, SIG_BLOCK, &all_mask, set, _NSIG/8);
34 }
35
__block_app_sigs(void * set)36 void __block_app_sigs(void *set)
37 {
38 __syscall(SYS_rt_sigprocmask, SIG_BLOCK, &app_mask, set, _NSIG/8);
39 }
40
__restore_sigs(void * set)41 void __restore_sigs(void *set)
42 {
43 __syscall(SYS_rt_sigprocmask, SIG_SETMASK, set, 0, _NSIG/8);
44 }
45