diff --git a/libc/include/signal.h b/libc/include/signal.h index f1849c5d4..e23e65b80 100644 --- a/libc/include/signal.h +++ b/libc/include/signal.h @@ -48,6 +48,9 @@ # include #endif +#include +#define __BIONIC_HAVE_UCONTEXT_T + __BEGIN_DECLS typedef int sig_atomic_t; diff --git a/libc/include/sys/ucontext.h b/libc/include/sys/ucontext.h index f62380d8a..b8d4d5812 100644 --- a/libc/include/sys/ucontext.h +++ b/libc/include/sys/ucontext.h @@ -68,11 +68,9 @@ typedef struct ucontext { 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. - union { - sigset_t bionic; - uint32_t kernel[2]; - } uc_sigmask; + uint32_t __padding_rt_sigset; // 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))); @@ -152,11 +150,9 @@ typedef struct ucontext { 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. - union { - sigset_t bionic; - uint32_t kernel[2]; - } uc_sigmask; + uint32_t __padding_rt_sigset; struct _libc_fpstate __fpregs_mem; } ucontext_t;