OSDN Git Service

POSIX says <signal.h> gets you ucontext_t.
authorElliott Hughes <enh@google.com>
Sat, 13 Sep 2014 03:04:40 +0000 (20:04 -0700)
committerElliott Hughes <enh@google.com>
Wed, 29 Oct 2014 18:55:02 +0000 (11:55 -0700)
POSIX also says that ucontext_t's uc_sigmask has type sigset_t.

MIPS64 strace needs this.

The #define is to keep chromium off our lawn; otherwise it tries to redefine
all this stuff itself. We should probably clean that up and remove the #define.

(cherry picked from commit 26a8eb50a84e131d34d10d5d167d67e9995399bd)

Bug: 18172268
Change-Id: I49d7d09dabfc6c6926a8e1f4b235d041e2f2fc4d

libc/include/signal.h
libc/include/sys/ucontext.h

index f1849c5..e23e65b 100644 (file)
@@ -48,6 +48,9 @@
 #  include <linux/signal.h>
 #endif
 
+#include <sys/ucontext.h>
+#define __BIONIC_HAVE_UCONTEXT_T
+
 __BEGIN_DECLS
 
 typedef int sig_atomic_t;
index f62380d..b8d4d58 100644 (file)
@@ -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;