aarch64: add hwcap header file
[uclibc-ng.git] / libc / sysdeps / linux / common / sigprocmask.c
blobd8010b1929f0b00dd27cd9d610739e119b9f3a3d
1 /*
2 * sigprocmask() for uClibc
4 * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
6 * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
7 */
9 #include <sys/syscall.h>
11 #if defined __USE_POSIX
12 #include <signal.h>
13 #ifdef __UCLIBC_HAS_THREADS_NATIVE__
14 # include <pthreadP.h> /* SIGCANCEL */
15 #endif
17 #undef sigprocmask
19 libc_hidden_proto(sigprocmask)
21 #ifdef __NR_rt_sigprocmask
23 # define __NR___rt_sigprocmask __NR_rt_sigprocmask
24 static __always_inline
25 _syscall4(int, __rt_sigprocmask, int, how, const sigset_t *, set,
26 sigset_t *, oldset, size_t, size)
28 int sigprocmask(int how, const sigset_t * set, sigset_t * oldset)
30 #ifdef SIGCANCEL
31 sigset_t local_newmask;
34 * The only thing we have to make sure here is that SIGCANCEL and
35 * SIGSETXID are not blocked.
37 if (set != NULL && (unlikely (__sigismember (set, SIGCANCEL))
38 # ifdef SIGSETXID
39 || unlikely (__sigismember (set, SIGSETXID))
40 # endif
43 local_newmask = *set;
44 __sigdelset (&local_newmask, SIGCANCEL);
45 # ifdef SIGSETXID
46 __sigdelset (&local_newmask, SIGSETXID);
47 # endif
48 set = &local_newmask;
50 #endif
52 return __rt_sigprocmask(how, set, oldset, __SYSCALL_SIGSET_T_SIZE);
56 #else
58 # define __NR___syscall_sigprocmask __NR_sigprocmask
59 static __always_inline
60 _syscall3(int, __syscall_sigprocmask, int, how, const sigset_t *, set,
61 sigset_t *, oldset)
63 int sigprocmask(int how, const sigset_t * set, sigset_t * oldset)
65 #ifdef SIGCANCEL
66 sigset_t local_newmask;
69 * The only thing we have to make sure here is that SIGCANCEL and
70 * SIGSETXID are not blocked.
72 if (set != NULL && (unlikely (__sigismember (set, SIGCANCEL))
73 # ifdef SIGSETXID
74 || unlikely (__sigismember (set, SIGSETXID))
75 # endif
78 local_newmask = *set;
79 __sigdelset (&local_newmask, SIGCANCEL);
80 # ifdef SIGSETXID
81 __sigdelset (&local_newmask, SIGSETXID);
82 # endif
83 set = &local_newmask;
85 #endif
87 return (__syscall_sigprocmask(how, set, oldset));
89 #endif
90 libc_hidden_def(sigprocmask)
91 #endif