0.7.12.35
[sbcl.git] / src / runtime / sunos-os.c
index 5e721f9..a6ab92f 100644 (file)
@@ -160,11 +160,6 @@ boolean is_valid_lisp_addr(os_vm_address_t addr)
 
 \f
 
-#if defined GENCGC
-
-#error "GENCGC is not yet supported (presumably on x86 solaris?)"
-
-#else
 
 static void
 sigsegv_handler(int signal, siginfo_t *info, void* void_context)
@@ -173,17 +168,15 @@ sigsegv_handler(int signal, siginfo_t *info, void* void_context)
     os_vm_address_t addr;
 
     addr = arch_get_bad_addr(signal, info, context);
-    /* There's some complicated recovery code in linux-os.c here
-       that I'm currently too confused to understand. FIXME. */
     if(!interrupt_maybe_gc(signal, info, context)) {
-       interrupt_handle_now(signal, info, context);
+       if(!handle_control_stack_guard_triggered(context,addr))
+           interrupt_handle_now(signal, info, context);
     }
 }
 
-#endif
-
 void
 os_install_interrupt_handlers()
 {
-    undoably_install_low_level_interrupt_handler(SIGSEGV,sigsegv_handler);
+    undoably_install_low_level_interrupt_handler(SIG_MEMORY_FAULT,
+                                                sigsegv_handler);
 }