Module: wine Branch: master Commit: f8cdbecc25b589ce3e008f9d735fbd9df17ea58b URL: http://source.winehq.org/git/wine.git/?a=commit;h=f8cdbecc25b589ce3e008f9d73...
Author: Alexandre Julliard julliard@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;