Alexandre Julliard : Fixed some compilation issues on Mac OS X
Leopard.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Mar 13 07:55:50 CDT 2007
Module: wine
Branch: master
Commit: 0d16a7bbe4b4ab510dfb68e267109418ca9f2ea5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0d16a7bbe4b4ab510dfb68e267109418ca9f2ea5
Author: Alexandre Julliard <julliard at 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 )
More information about the wine-cvs
mailing list