Add uc_sigmask64.
Added to each ucontext_t for source compatibility between platforms where
sigset_t and sigset64_t differ (arm, x86) and where they're the same
(all the rest).
Bug: http://b/72493232
Test: ran tests
Change-Id: I65a37bfa177933701bbe6c2350448885fd0f9c43
diff --git a/libc/include/signal.h b/libc/include/signal.h
index 0aa798c..00860d5 100644
--- a/libc/include/signal.h
+++ b/libc/include/signal.h
@@ -34,34 +34,15 @@
#include <asm/sigcontext.h>
#include <bits/pthread_types.h>
+#include <bits/signal_types.h>
#include <bits/timespec.h>
#include <limits.h>
-/* For 64-bit (and mips), the kernel's struct sigaction doesn't match the
- * POSIX one, so we need to expose our own and translate behind the scenes.
- * For 32-bit, we're stuck with the definitions we already shipped,
- * even though they contain a sigset_t that's too small. See sigaction64.
- */
-#define sigaction __kernel_sigaction
-#include <linux/signal.h>
-#undef sigaction
-
#include <sys/ucontext.h>
#define __BIONIC_HAVE_UCONTEXT_T
__BEGIN_DECLS
-typedef int sig_atomic_t;
-
-/* The arm and x86 kernel header files don't define _NSIG. */
-#ifndef _KERNEL__NSIG
-#define _KERNEL__NSIG 64
-#endif
-
-/* Userspace's NSIG is the kernel's _NSIG + 1. */
-#define _NSIG (_KERNEL__NSIG + 1)
-#define NSIG _NSIG
-
/* The kernel headers define SIG_DFL (0) and SIG_IGN (1) but not SIG_HOLD, since
* SIG_HOLD is only used by the deprecated SysV signal API.
*/
@@ -76,79 +57,8 @@
extern const char* const sys_siglist[_NSIG];
extern const char* const sys_signame[_NSIG]; /* BSD compatibility. */
-typedef __sighandler_t sig_t; /* BSD compatibility. */
-typedef __sighandler_t sighandler_t; /* glibc compatibility. */
-
#define si_timerid si_tid /* glibc compatibility. */
-/* sigset_t is already large enough on LP64 and mips, but other LP32's sigset_t
- * is just `unsigned long`.
- */
-#if defined(__LP64__) || defined(__mips__)
-typedef sigset_t sigset64_t;
-#else
-typedef struct { unsigned long __bits[_KERNEL__NSIG/LONG_BIT]; } sigset64_t;
-#endif
-
-#if defined(__LP64__)
-
-#define __SIGACTION_BODY \
- int sa_flags; \
- union { \
- sighandler_t sa_handler; \
- void (*sa_sigaction)(int, struct siginfo*, void*); \
- }; \
- sigset_t sa_mask; \
- void (*sa_restorer)(void); \
-
-struct sigaction { __SIGACTION_BODY };
-struct sigaction64 { __SIGACTION_BODY };
-
-#undef __SIGACTION_BODY
-
-#elif defined(__mips__)
-
-#define __SIGACTION_BODY \
- int sa_flags; \
- union { \
- sighandler_t sa_handler; \
- void (*sa_sigaction)(int, struct siginfo*, void*); \
- }; \
- sigset_t sa_mask; \
-
-struct sigaction { __SIGACTION_BODY };
-struct sigaction64 { __SIGACTION_BODY };
-
-#undef __SIGACTION_BODY
-
-#else
-
-#undef sa_handler
-#undef sa_sigaction
-
-struct sigaction {
- union {
- sighandler_t sa_handler;
- void (*sa_sigaction)(int, struct siginfo*, void*);
- };
- sigset_t sa_mask;
- int sa_flags;
- void (*sa_restorer)(void);
-};
-
-/* This matches the kernel's internal structure. */
-struct sigaction64 {
- union {
- sighandler_t sa_handler;
- void (*sa_sigaction)(int, struct siginfo*, void*);
- };
- int sa_flags;
- void (*sa_restorer)(void);
- sigset64_t sa_mask;
-};
-
-#endif
-
int sigaction(int __signal, const struct sigaction* __new_action, struct sigaction* __old_action);
int sigaction64(int __signal, const struct sigaction64* __new_action, struct sigaction64* __old_action) __INTRODUCED_IN(28);