Index: sandbox/linux/services/android_i386_ucontext.h |
diff --git a/sandbox/linux/services/android_i386_ucontext.h b/sandbox/linux/services/android_i386_ucontext.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..580ac70a06aa1f95025996a1bf2d86e47a54875d |
--- /dev/null |
+++ b/sandbox/linux/services/android_i386_ucontext.h |
@@ -0,0 +1,79 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef SANDBOX_LINUX_SERVICES_ANDROID_I386_UCONTEXT_H_ |
+#define SANDBOX_LINUX_SERVICES_ANDROID_I386_UCONTEXT_H_ |
+ |
+// We do something compatible with glibc. Hopefully, at some point Android will |
+// provide that for us, and __BIONIC_HAVE_UCONTEXT_T should be defined. |
+// This is mostly copied from breakpad (common/android/include/sys/ucontext.h), |
+// except we do use sigset_t for uc_sigmask instead of a custom type. |
+ |
+#if !defined(__BIONIC_HAVE_UCONTEXT_T) |
+#include <asm/sigcontext.h> |
+ |
+/* 80-bit floating-point register */ |
+struct _libc_fpreg { |
+ unsigned short significand[4]; |
+ unsigned short exponent; |
+}; |
+ |
+/* Simple floating-point state, see FNSTENV instruction */ |
+struct _libc_fpstate { |
+ unsigned long cw; |
+ unsigned long sw; |
+ unsigned long tag; |
+ unsigned long ipoff; |
+ unsigned long cssel; |
+ unsigned long dataoff; |
+ unsigned long datasel; |
+ struct _libc_fpreg _st[8]; |
+ unsigned long status; |
+}; |
+ |
+typedef uint32_t greg_t; |
+ |
+typedef struct { |
+ uint32_t gregs[19]; |
+ struct _libc_fpstate* fpregs; |
+ uint32_t oldmask; |
+ uint32_t cr2; |
+} mcontext_t; |
+ |
+enum { |
+ REG_GS = 0, |
+ REG_FS, |
+ REG_ES, |
+ REG_DS, |
+ REG_EDI, |
+ REG_ESI, |
+ REG_EBP, |
+ REG_ESP, |
+ REG_EBX, |
+ REG_EDX, |
+ REG_ECX, |
+ REG_EAX, |
+ REG_TRAPNO, |
+ REG_ERR, |
+ REG_EIP, |
+ REG_CS, |
+ REG_EFL, |
+ REG_UESP, |
+ REG_SS, |
Markus (顧孟勤)
2013/01/18 00:09:34
You could add a NUM_INTEGER_REGS. Then you can do
|
+}; |
+ |
+typedef struct ucontext { |
+ uint32_t uc_flags; |
+ struct ucontext* uc_link; |
+ stack_t uc_stack; |
+ mcontext_t uc_mcontext; |
+ sigset_t uc_sigmask; |
+ struct _libc_fpstate __fpregs_mem; |
+} ucontext_t; |
+ |
+#else |
+#include <sys/ucontext.h> |
+#endif // __BIONIC_HAVE_UCONTEXT_T |
+ |
+#endif // SANDBOX_LINUX_SERVICES_ANDROID_I386_UCONTEXT_H_ |