fix libc-internal signal blocking on mips archs
[musl.git] / src / signal / block.c
blobcc8698f0bb7fbcf5508ceaf43edd4c8954e81075
1 #include "pthread_impl.h"
2 #include "syscall.h"
3 #include <signal.h>
5 static const unsigned long all_mask[] = {
6 #if ULONG_MAX == 0xffffffff && _NSIG > 65
7 -1UL, -1UL, -1UL, -1UL
8 #elif ULONG_MAX == 0xffffffff || _NSIG > 65
9 -1UL, -1UL
10 #else
11 -1UL
12 #endif
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
31 void __block_all_sigs(void *set)
33 __syscall(SYS_rt_sigprocmask, SIG_BLOCK, &all_mask, set, _NSIG/8);
36 void __block_app_sigs(void *set)
38 __syscall(SYS_rt_sigprocmask, SIG_BLOCK, &app_mask, set, _NSIG/8);
41 void __restore_sigs(void *set)
43 __syscall(SYS_rt_sigprocmask, SIG_SETMASK, set, 0, _NSIG/8);