0.7.6.1:
[sbcl.git] / src / runtime / sunos-os.c
index 4ed611d..2a6bf34 100644 (file)
@@ -50,10 +50,10 @@ void os_init(void)
        lose("sunos major version=%d (which isn't 5!)", major_version);
     }
     minor_version = atoi(name.release+2);
-    if (minor_version == 8) {
+    if ((minor_version == 8) || (minor_version == 9)) {
        KLUDGE_MAYBE_MAP_ANON = 0x100;
-    } else if (minor_version > 8) {
-       FSHOW((stderr, "os_init: Solaris version greater than 8?\nUnknown MAP_ANON behaviour.\n"));
+    } else if (minor_version > 9) {
+       FSHOW((stderr, "os_init: Solaris version greater than 9?\nUnknown MAP_ANON behaviour.\n"));
        lose("Unknown mmap() interaction with MAP_ANON");
     } else { /* minor_version < 8 */
        kludge_mmap_fd = open("/dev/zero",O_RDONLY);
@@ -173,10 +173,9 @@ 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);
     }
 }
 
@@ -185,5 +184,6 @@ sigsegv_handler(int signal, siginfo_t *info, void* void_context)
 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);
 }