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/sys/ucontext.h b/libc/include/sys/ucontext.h
index 4cc66eb..730ac69 100644
--- a/libc/include/sys/ucontext.h
+++ b/libc/include/sys/ucontext.h
@@ -87,9 +87,14 @@
struct ucontext* uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
- sigset_t uc_sigmask;
- /* Android has a wrong (smaller) sigset_t on ARM. */
- uint32_t __padding_rt_sigset;
+ union {
+ struct {
+ sigset_t uc_sigmask;
+ /* Android has a wrong (smaller) sigset_t on ARM. */
+ uint32_t __padding_rt_sigset;
+ };
+ sigset64_t uc_sigmask64;
+ };
/* The kernel adds extra padding after uc_sigmask to match glibc sigset_t on ARM. */
char __padding[120];
unsigned long uc_regspace[128] __attribute__((__aligned__(8)));
@@ -109,7 +114,10 @@
unsigned long uc_flags;
struct ucontext *uc_link;
stack_t uc_stack;
- sigset_t uc_sigmask;
+ union {
+ sigset_t uc_sigmask;
+ sigset64_t uc_sigmask64;
+ };
/* The kernel adds extra padding after uc_sigmask to match glibc sigset_t on ARM64. */
char __padding[128 - sizeof(sigset_t)];
mcontext_t uc_mcontext;
@@ -194,9 +202,14 @@
struct ucontext* uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
- sigset_t uc_sigmask;
- /* Android has a wrong (smaller) sigset_t on x86. */
- uint32_t __padding_rt_sigset;
+ union {
+ struct {
+ sigset_t uc_sigmask;
+ /* Android has a wrong (smaller) sigset_t on x86. */
+ uint32_t __padding_rt_sigset;
+ };
+ sigset64_t uc_sigmask64;
+ };
struct _libc_fpstate __fpregs_mem;
} ucontext_t;
@@ -266,7 +279,10 @@
struct ucontext* uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
- sigset_t uc_sigmask;
+ union {
+ sigset_t uc_sigmask;
+ sigset64_t uc_sigmask64;
+ };
} ucontext_t;
#elif defined(__x86_64__)
@@ -362,7 +378,10 @@
struct ucontext* uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
- sigset_t uc_sigmask;
+ union {
+ sigset_t uc_sigmask;
+ sigset64_t uc_sigmask64;
+ };
struct _libc_fpstate __fpregs_mem;
} ucontext_t;