1.0.26.8: QSHOW changes, bug reporting guidelines
[sbcl.git] / src / runtime / x86-darwin-os.c
index 121b63b..1cc837c 100644 (file)
@@ -1,5 +1,3 @@
-
-
 #ifdef LISP_FEATURE_SB_THREAD
 #include <architecture/i386/table.h>
 #include <i386/user_ldt.h>
@@ -25,6 +23,7 @@
 #include <pthread.h>
 #include <assert.h>
 #include <stdlib.h>
+#include <stdio.h>
 
 #ifdef LISP_FEATURE_SB_THREAD
 
@@ -116,9 +115,10 @@ int arch_os_thread_cleanup(struct thread *thread) {
 
 #ifdef LISP_FEATURE_MACH_EXCEPTION_HANDLER
 
-void sigill_handler(int signal, siginfo_t *siginfo, void *void_context);
-void sigtrap_handler(int signal, siginfo_t *siginfo, void *void_context);
-void memory_fault_handler(int signal, siginfo_t *siginfo, void *void_context);
+void sigill_handler(int signal, siginfo_t *siginfo, os_context_t *context);
+void sigtrap_handler(int signal, siginfo_t *siginfo, os_context_t *context);
+void memory_fault_handler(int signal, siginfo_t *siginfo,
+                          os_context_t *context);
 
 /* exc_server handles mach exception messages from the kernel and
  * calls catch exception raise. We use the system-provided
@@ -254,18 +254,10 @@ void signal_emulation_wrapper(x86_thread_state32_t *thread_state,
      */
 
     os_context_t *context;
-#if MAC_OS_X_VERSION_10_5
-    struct __darwin_mcontext32 *regs;
-#else
-    struct mcontext *regs;
-#endif
+    mcontext_t *regs;
 
     context = (os_context_t*) os_validate(0, sizeof(os_context_t));
-#if MAC_OS_X_VERSION_10_5
-    regs = (struct __darwin_mcontext32*) os_validate(0, sizeof(struct __darwin_mcontext32));
-#else
-    regs = (struct mcontext*) os_validate(0, sizeof(struct mcontext));
-#endif
+    regs = (mcontext_t*) os_validate(0, sizeof(mcontext_t));
     context->uc_mcontext = regs;
 
     /* when BSD signals are fired, they mask they signals in sa_mask
@@ -285,11 +277,7 @@ void signal_emulation_wrapper(x86_thread_state32_t *thread_state,
     update_thread_state_from_context(thread_state, float_state, context);
 
     os_invalidate((os_vm_address_t)context, sizeof(os_context_t));
-#if MAC_OS_X_VERSION_10_5
-    os_invalidate((os_vm_address_t)regs, sizeof(struct __darwin_mcontext32));
-#else
-    os_invalidate((os_vm_address_t)regs, sizeof(struct mcontext));
-#endif
+    os_invalidate((os_vm_address_t)regs, sizeof(mcontext_t));
 
     /* Trap to restore the signal context. */
     asm volatile ("movl %0, %%eax; movl %1, %%ebx; .long 0xffff0b0f"
@@ -383,17 +371,16 @@ void dump_context(x86_thread_state32_t *thread_state)
 #endif
 
 void
-control_stack_exhausted_handler(int signal, siginfo_t *siginfo, void *void_context) {
-    os_context_t *context = arch_os_get_context(&void_context);
+control_stack_exhausted_handler(int signal, siginfo_t *siginfo,
+                                os_context_t *context) {
 
+    unblock_signals_in_context_and_maybe_warn(context);
     arrange_return_to_lisp_function
         (context, StaticSymbolFunction(CONTROL_STACK_EXHAUSTED_ERROR));
 }
 
 void
-undefined_alien_handler(int signal, siginfo_t *siginfo, void *void_context) {
-    os_context_t *context = arch_os_get_context(&void_context);
-
+undefined_alien_handler(int signal, siginfo_t *siginfo, os_context_t *context) {
     arrange_return_to_lisp_function
         (context, StaticSymbolFunction(UNDEFINED_ALIEN_VARIABLE_ERROR));
 }
@@ -443,15 +430,15 @@ catch_exception_raise(mach_port_t exception_port,
         }
         /* At stack guard */
         if (os_trunc_to_page(addr) == CONTROL_STACK_GUARD_PAGE(th)) {
-            protect_control_stack_guard_page_thread(0, th);
-            protect_control_stack_return_guard_page_thread(1, th);
+            protect_control_stack_guard_page(0, th);
+            protect_control_stack_return_guard_page(1, th);
             handler = control_stack_exhausted_handler;
             break;
         }
         /* Return from stack guard */
         if (os_trunc_to_page(addr) == CONTROL_STACK_RETURN_GUARD_PAGE(th)) {
-            protect_control_stack_guard_page_thread(1, th);
-            protect_control_stack_return_guard_page_thread(0, th);
+            protect_control_stack_guard_page(1, th);
+            protect_control_stack_return_guard_page(0, th);
             break;
         }
         /* Regular memory fault */