0.8.21.49: Fixes for OS X 10.4 "Tiger"
[sbcl.git] / src / runtime / bsd-os.c
index 63b28ef..eb07274 100644 (file)
@@ -32,6 +32,9 @@
 #include "interr.h"
 #include "lispregs.h"
 #include "thread.h"
+#include "runtime.h"
+#include "genesis/static-symbols.h"
+#include "genesis/fdefn.h"
 
 #include <sys/types.h>
 #include <signal.h>
@@ -188,9 +191,11 @@ memory_fault_handler(int signal, siginfo_t *siginfo, void *void_context)
     os_context_t *context = arch_os_get_context(&void_context);
     if (!gencgc_handle_wp_violation(fault_addr)) 
         if(!handle_guard_page_triggered(context,fault_addr))
-           /* FIXME is this context or void_context?  not that it */
-           /* makes a difference currently except on linux/sparc */
-           interrupt_handle_now(signal, siginfo, void_context);
+#ifdef LISP_FEATURE_C_STACK_IS_CONTROL_STACK
+           arrange_return_to_lisp_function(context, SymbolFunction(MEMORY_FAULT_ERROR));
+#else
+           interrupt_handle_now(signal, siginfo, context);
+#endif
 }
 void
 os_install_interrupt_handlers(void)
@@ -215,7 +220,7 @@ sigsegv_handler(int signal, siginfo_t *info, void* void_context)
        if(!handle_guard_page_triggered(context,addr))
            interrupt_handle_now(signal, info, context);
     /* Work around G5 bug; fix courtesy gbyers */
-    sigreturn(void_context);
+    DARWIN_FIX_CONTEXT(context);
 }
 
 void