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