Alexandre Julliard : ntdll: Add context definitions missing from the Android NDK.

Alexandre Julliard julliard at winehq.org
Tue Jul 30 14:14:21 CDT 2013


Module: wine
Branch: master
Commit: f8cdbecc25b589ce3e008f9d735fbd9df17ea58b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f8cdbecc25b589ce3e008f9d735fbd9df17ea58b

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Jul 30 14:11:42 2013 +0200

ntdll: Add context definitions missing from the Android NDK.

---

 dlls/ntdll/signal_arm.c  |   12 ++++++++++++
 dlls/ntdll/signal_i386.c |   37 ++++++++++++++++++++++++++++++++++++-
 2 files changed, 48 insertions(+), 1 deletions(-)

diff --git a/dlls/ntdll/signal_arm.c b/dlls/ntdll/signal_arm.c
index 6334a6e..9b0f1eb 100644
--- a/dlls/ntdll/signal_arm.c
+++ b/dlls/ntdll/signal_arm.c
@@ -68,6 +68,18 @@ static pthread_key_t teb_key;
  */
 #ifdef linux
 
+#ifdef __ANDROID__
+typedef struct ucontext
+{
+    unsigned long uc_flags;
+    struct ucontext *uc_link;
+    stack_t uc_stack;
+    struct sigcontext uc_mcontext;
+    sigset_t uc_sigmask;
+    unsigned long uc_regspace[128] __attribute__((__aligned__(8)));
+} ucontext_t;
+#endif
+
 typedef ucontext_t SIGCONTEXT;
 
 /* All Registers access - only for local access */
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index 0344a29..b29405b 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -100,7 +100,42 @@ typedef struct
  * signal context platform-specific definitions
  */
 
-#if defined (__linux__)
+#ifdef __ANDROID__
+
+typedef struct ucontext
+{
+    unsigned long     uc_flags;
+    struct ucontext  *uc_link;
+    stack_t           uc_stack;
+    struct sigcontext uc_mcontext;
+    sigset_t          uc_sigmask;
+} SIGCONTEXT;
+
+#define EAX_sig(context)     ((context)->uc_mcontext.eax)
+#define EBX_sig(context)     ((context)->uc_mcontext.ebx)
+#define ECX_sig(context)     ((context)->uc_mcontext.ecx)
+#define EDX_sig(context)     ((context)->uc_mcontext.edx)
+#define ESI_sig(context)     ((context)->uc_mcontext.esi)
+#define EDI_sig(context)     ((context)->uc_mcontext.edi)
+#define EBP_sig(context)     ((context)->uc_mcontext.ebp)
+#define ESP_sig(context)     ((context)->uc_mcontext.esp)
+
+#define CS_sig(context)      ((context)->uc_mcontext.cs)
+#define DS_sig(context)      ((context)->uc_mcontext.ds)
+#define ES_sig(context)      ((context)->uc_mcontext.es)
+#define SS_sig(context)      ((context)->uc_mcontext.ss)
+#define FS_sig(context)      ((context)->uc_mcontext.fs)
+#define GS_sig(context)      ((context)->uc_mcontext.gs)
+
+#define EFL_sig(context)     ((context)->uc_mcontext.eflags)
+#define EIP_sig(context)     ((context)->uc_mcontext.eip)
+#define TRAP_sig(context)    ((context)->uc_mcontext.trapno)
+#define ERROR_sig(context)   ((context)->uc_mcontext.err)
+
+#define FPU_sig(context)     ((FLOATING_SAVE_AREA*)((context)->uc_mcontext.fpstate))
+#define FPUX_sig(context)    (FPU_sig(context) && !((context)->uc_mcontext.fpstate->status >> 16) ? (XMM_SAVE_AREA32 *)(FPU_sig(context) + 1) : NULL)
+
+#elif defined (__linux__)
 
 typedef ucontext_t SIGCONTEXT;
 




More information about the wine-cvs mailing list