1.0.13.18: Revived OpenBSD support, contributed by Josh Elsasser
[sbcl.git] / src / runtime / x86-darwin-os.c
index 97d3999..248e782 100644 (file)
@@ -254,14 +254,14 @@ void signal_emulation_wrapper(x86_thread_state32_t *thread_state,
      */
 
     os_context_t *context;
-#if __DARWIN_UNIX03
+#if MAC_OS_X_VERSION_10_5
     struct __darwin_mcontext32 *regs;
 #else
     struct mcontext *regs;
 #endif
 
     context = (os_context_t*) os_validate(0, sizeof(os_context_t));
-#if __DARWIN_UNIX03
+#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));
@@ -285,7 +285,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 __DARWIN_UNIX03
+#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));
@@ -386,7 +386,7 @@ control_stack_exhausted_handler(int signal, siginfo_t *siginfo, void *void_conte
     os_context_t *context = arch_os_get_context(&void_context);
 
     arrange_return_to_lisp_function
-        (context, SymbolFunction(CONTROL_STACK_EXHAUSTED_ERROR));
+        (context, StaticSymbolFunction(CONTROL_STACK_EXHAUSTED_ERROR));
 }
 
 void
@@ -394,7 +394,7 @@ undefined_alien_handler(int signal, siginfo_t *siginfo, void *void_context) {
     os_context_t *context = arch_os_get_context(&void_context);
 
     arrange_return_to_lisp_function
-        (context, SymbolFunction(UNDEFINED_ALIEN_VARIABLE_ERROR));
+        (context, StaticSymbolFunction(UNDEFINED_ALIEN_VARIABLE_ERROR));
 }
 
 kern_return_t
@@ -434,6 +434,25 @@ catch_exception_raise(mach_port_t exception_port,
             ret = KERN_INVALID_RIGHT;
             break;
         }
+        addr = (void*)code_vector[1];
+        /* Undefined alien */
+        if (os_trunc_to_page(addr) == undefined_alien_address) {
+            handler = undefined_alien_handler;
+            break;
+        }
+        /* 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);
+            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);
+            break;
+        }
         /* Get vm_region info */
         region_addr = (vm_address_t)code_vector[1];
         info_count = VM_REGION_BASIC_INFO_COUNT;
@@ -455,25 +474,6 @@ catch_exception_raise(mach_port_t exception_port,
             ret = KERN_SUCCESS;
             break;
         }
-        addr = (void*)code_vector[1];
-        /* 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);
-            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);
-            break;
-        }
-        /* Undefined alien */
-        if (os_trunc_to_page(addr) == undefined_alien_address) {
-            handler = undefined_alien_handler;
-            break;
-        }
         /* Regular memory fault */
         handler = memory_fault_handler;
         break;