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