Module: wine Branch: master Commit: 0d16a7bbe4b4ab510dfb68e267109418ca9f2ea5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0d16a7bbe4b4ab510dfb68e267...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Mar 12 16:14:18 2007 +0100
Fixed some compilation issues on Mac OS X Leopard.
---
dlls/ntdll/signal_i386.c | 28 +++++++++++++++++++++++----- server/mach.c | 29 +++++++++++++++++++++++++++-- 2 files changed, 50 insertions(+), 7 deletions(-)
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c index 75385c2..0c32374 100644 --- a/dlls/ntdll/signal_i386.c +++ b/dlls/ntdll/signal_i386.c @@ -243,6 +243,27 @@ typedef struct ucontext SIGCONTEXT;
typedef ucontext_t SIGCONTEXT;
+/* work around silly renaming of struct members in OS X 10.5 */ +#if __DARWIN_UNIX03 && defined(_STRUCT_X86_EXCEPTION_STATE32) +#define EAX_sig(context) ((context)->uc_mcontext->__ss.__eax) +#define EBX_sig(context) ((context)->uc_mcontext->__ss.__ebx) +#define ECX_sig(context) ((context)->uc_mcontext->__ss.__ecx) +#define EDX_sig(context) ((context)->uc_mcontext->__ss.__edx) +#define ESI_sig(context) ((context)->uc_mcontext->__ss.__esi) +#define EDI_sig(context) ((context)->uc_mcontext->__ss.__edi) +#define EBP_sig(context) ((context)->uc_mcontext->__ss.__ebp) +#define CS_sig(context) ((context)->uc_mcontext->__ss.__cs) +#define DS_sig(context) ((context)->uc_mcontext->__ss.__ds) +#define ES_sig(context) ((context)->uc_mcontext->__ss.__es) +#define FS_sig(context) ((context)->uc_mcontext->__ss.__fs) +#define GS_sig(context) ((context)->uc_mcontext->__ss.__gs) +#define SS_sig(context) ((context)->uc_mcontext->__ss.__ss) +#define EFL_sig(context) ((context)->uc_mcontext->__ss.__eflags) +#define EIP_sig(context) (*((unsigned long*)&(context)->uc_mcontext->__ss.__eip)) +#define ESP_sig(context) (*((unsigned long*)&(context)->uc_mcontext->__ss.__esp)) +#define TRAP_sig(context) ((context)->uc_mcontext->__es.__trapno) +#define ERROR_sig(context) ((context)->uc_mcontext->__es.__err) +#else #define EAX_sig(context) ((context)->uc_mcontext->ss.eax) #define EBX_sig(context) ((context)->uc_mcontext->ss.ebx) #define ECX_sig(context) ((context)->uc_mcontext->ss.ecx) @@ -250,21 +271,18 @@ typedef ucontext_t SIGCONTEXT; #define ESI_sig(context) ((context)->uc_mcontext->ss.esi) #define EDI_sig(context) ((context)->uc_mcontext->ss.edi) #define EBP_sig(context) ((context)->uc_mcontext->ss.ebp) - #define CS_sig(context) ((context)->uc_mcontext->ss.cs) #define DS_sig(context) ((context)->uc_mcontext->ss.ds) #define ES_sig(context) ((context)->uc_mcontext->ss.es) #define FS_sig(context) ((context)->uc_mcontext->ss.fs) #define GS_sig(context) ((context)->uc_mcontext->ss.gs) #define SS_sig(context) ((context)->uc_mcontext->ss.ss) - #define EFL_sig(context) ((context)->uc_mcontext->ss.eflags) - #define EIP_sig(context) (*((unsigned long*)&(context)->uc_mcontext->ss.eip)) #define ESP_sig(context) (*((unsigned long*)&(context)->uc_mcontext->ss.esp)) - #define TRAP_sig(context) ((context)->uc_mcontext->es.trapno) #define ERROR_sig(context) ((context)->uc_mcontext->es.err) +#endif
#endif /* __APPLE__ */
@@ -1335,7 +1353,7 @@ BOOL SIGNAL_Init(void) struct sigaction sig_act;
#ifdef HAVE_SIGALTSTACK - struct sigaltstack ss; + stack_t ss;
#ifdef __APPLE__ int mib[2], val = 1; diff --git a/server/mach.c b/server/mach.c index 5996ba4..4e643ce 100644 --- a/server/mach.c +++ b/server/mach.c @@ -162,7 +162,8 @@ void finish_process_tracing( struct process *process ) /* retrieve the thread x86 registers */ void get_thread_context( struct thread *thread, CONTEXT *context, unsigned int flags ) { - struct x86_debug_state32 state; +#ifdef __i386__ + x86_debug_state32_t state; mach_msg_type_number_t count = sizeof(state) / sizeof(int); mach_msg_type_name_t type; mach_port_t port, process_port = get_process_port( thread->process ); @@ -180,21 +181,33 @@ void get_thread_context( struct thread *thread, CONTEXT *context, unsigned int f
if (!thread_get_state( port, x86_DEBUG_STATE32, (thread_state_t)&state, &count )) { +/* work around silly renaming of struct members in OS X 10.5 */ +#if __DARWIN_UNIX03 && defined(_STRUCT_X86_DEBUG_STATE32) + context->Dr0 = state.__dr0; + context->Dr1 = state.__dr1; + context->Dr2 = state.__dr2; + context->Dr3 = state.__dr3; + context->Dr6 = state.__dr6; + context->Dr7 = state.__dr7; +#else context->Dr0 = state.dr0; context->Dr1 = state.dr1; context->Dr2 = state.dr2; context->Dr3 = state.dr3; context->Dr6 = state.dr6; context->Dr7 = state.dr7; +#endif context->ContextFlags |= CONTEXT_DEBUG_REGISTERS; } mach_port_deallocate( mach_task_self(), port ); +#endif }
/* set the thread x86 registers */ void set_thread_context( struct thread *thread, const CONTEXT *context, unsigned int flags ) { - struct x86_debug_state32 state; +#ifdef __i386__ + x86_debug_state32_t state; mach_msg_type_number_t count = sizeof(state) / sizeof(int); mach_msg_type_name_t type; mach_port_t port, process_port = get_process_port( thread->process ); @@ -210,6 +223,16 @@ void set_thread_context( struct thread *thread, const CONTEXT *context, unsigned return; }
+#if __DARWIN_UNIX03 && defined(_STRUCT_X86_DEBUG_STATE32) + state.__dr0 = context->Dr0; + state.__dr1 = context->Dr1; + state.__dr2 = context->Dr2; + state.__dr3 = context->Dr3; + state.__dr4 = 0; + state.__dr5 = 0; + state.__dr6 = context->Dr6; + state.__dr7 = context->Dr7; +#else state.dr0 = context->Dr0; state.dr1 = context->Dr1; state.dr2 = context->Dr2; @@ -218,6 +241,7 @@ void set_thread_context( struct thread *thread, const CONTEXT *context, unsigned state.dr5 = 0; state.dr6 = context->Dr6; state.dr7 = context->Dr7; +#endif if (!thread_set_state( port, x86_DEBUG_STATE32, (thread_state_t)&state, count )) { if (thread->context) /* update the cached values */ @@ -231,6 +255,7 @@ void set_thread_context( struct thread *thread, const CONTEXT *context, unsigned } } mach_port_deallocate( mach_task_self(), port ); +#endif }
int send_thread_signal( struct thread *thread, int sig )