summaryrefslogtreecommitdiffstats
path: root/sandbox/linux/services/android_arm_ucontext.h
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/linux/services/android_arm_ucontext.h')
-rw-r--r--sandbox/linux/services/android_arm_ucontext.h21
1 files changed, 18 insertions, 3 deletions
diff --git a/sandbox/linux/services/android_arm_ucontext.h b/sandbox/linux/services/android_arm_ucontext.h
index 0c21e20..c4d748e 100644
--- a/sandbox/linux/services/android_arm_ucontext.h
+++ b/sandbox/linux/services/android_arm_ucontext.h
@@ -5,10 +5,20 @@
#ifndef SANDBOX_LINUX_SERVICES_ANDROID_ARM_UCONTEXT_H_
#define SANDBOX_LINUX_SERVICES_ANDROID_ARM_UCONTEXT_H_
+#if !defined(__BIONIC_HAVE_UCONTEXT_T)
#include <asm/sigcontext.h>
-typedef long int greg_t;
-typedef unsigned long sigset_t;
+// We also need greg_t for the sandbox, include it in this header as well.
+typedef unsigned long greg_t;
+
+// sigset_t from arch/arm/include/asm/signal.h in the Linux kernel.
+typedef struct {
+ unsigned long sig[64 / 8 / sizeof(long)]; // Always 64 bits (yes we assume
+ // 8 bits per char).
+} android_header_sigset_t; // Change name to avoid collissions if sigset_t
+ // gets defined in newer Android headers.
+
+//typedef unsigned long sigset_t;
typedef struct ucontext {
unsigned long uc_flags;
struct ucontext *uc_link;
@@ -16,9 +26,14 @@ typedef struct ucontext {
struct sigcontext uc_mcontext;
sigset_t uc_sigmask;
/* Allow for uc_sigmask growth. Glibc uses a 1024-bit sigset_t. */
- int __not_used[32 - (sizeof (sigset_t) / sizeof (int))];
+ int __not_used[32 - (sizeof (android_header_sigset_t) / sizeof (int))];
/* Last for extensibility. Eight byte aligned because some
coprocessors require eight byte alignment. */
unsigned long uc_regspace[128] __attribute__((__aligned__(8)));
} ucontext_t;
+
+#else
+#include <sys/ucontext.h>
+#endif // __BIONIC_HAVE_UCONTEXT_T
+
#endif // SANDBOX_LINUX_SERVICES_ANDROID_ARM_UCONTEXT_H_