1.0.25.52: go through lisp_memory_fault_error on all platforms
authorGabor Melis <mega@hotpop.com>
Mon, 16 Feb 2009 22:27:07 +0000 (22:27 +0000)
committerGabor Melis <mega@hotpop.com>
Mon, 16 Feb 2009 22:27:07 +0000 (22:27 +0000)
... so that the corruption mechanism can kick in.

src/code/target-signal.lisp
src/runtime/bsd-os.c
src/runtime/gencgc.c
src/runtime/hpux-os.c
src/runtime/interrupt.c
src/runtime/linux-os.c
src/runtime/osf1-os.c
src/runtime/sunos-os.c
version.lisp-expr

index 6ddf0b5..87cf646 100644 (file)
 #!-linux
 (define-signal-handler sigemt-handler "SIGEMT")
 (define-signal-handler sigbus-handler "bus error")
-(define-signal-handler sigsegv-handler "segmentation violation")
 #!-linux
 (define-signal-handler sigsys-handler "bad argument to a system call")
 
   (enable-interrupt sigemt #'sigemt-handler)
   (enable-interrupt sigfpe #'sb!vm:sigfpe-handler)
   (enable-interrupt sigbus #'sigbus-handler)
-  (enable-interrupt sigsegv #'sigsegv-handler)
   #!-linux
   (enable-interrupt sigsys #'sigsys-handler)
   (enable-interrupt sigalrm #'sigalrm-handler)
index 3d06aa3..a1acc1e 100644 (file)
@@ -218,25 +218,8 @@ memory_fault_handler(int signal, siginfo_t *siginfo, void *void_context
     FSHOW((stderr, "Memory fault at: %p, PC: %p\n", fault_addr, *os_context_pc_addr(context)));
 
     if (!gencgc_handle_wp_violation(fault_addr))
-        if(!handle_guard_page_triggered(context,fault_addr)) {
-#ifdef LISP_FEATURE_C_STACK_IS_CONTROL_STACK
+        if(!handle_guard_page_triggered(context,fault_addr))
             lisp_memory_fault_error(context, fault_addr);
-#else
-
-            /* this disabled section is what used to be here: */
-#if 0
-            /* FIXME: never returns 0 */
-            if (!maybe_gc(context)) {
-                interrupt_handle_now(signal, siginfo, context);
-            }
-#endif
-            /* FIXME: Nowadays, maybe_gc does return 1 to indicate
-             * that GC did happen, but I'm keeping the code as it
-             * was. */
-            maybe_gc(context);
-            interrupt_handle_now(signal, siginfo, context);
-#endif
-        }
 }
 
 #if defined(LISP_FEATURE_MACH_EXCEPTION_HANDLER)
index 5e5620f..b9bd862 100644 (file)
@@ -4728,14 +4728,8 @@ general_alloc_internal(long nbytes, int page_type_flag, struct alloc_region *reg
 #ifdef LISP_FEATURE_PPC
                 /* PPC calls alloc() from a trap, look up the most
                  * recent one and frob that. */
-                {
-                    int context_index =
-                        fixnum_value(SymbolValue(FREE_INTERRUPT_CONTEXT_INDEX,
-                                                 thread));
-                    os_context_t *context =
-                        thread->interrupt_contexts[context_index - 1];
-                    maybe_save_gc_mask_and_block_deferrables(context);
-                }
+                maybe_save_gc_mask_and_block_deferrables
+                    (get_interrupt_context_for_thread(thread));
 #else
                 maybe_save_gc_mask_and_block_deferrables(NULL);
 #endif
index ff59edc..2d2323b 100644 (file)
@@ -123,7 +123,7 @@ sigsegv_handler(int signal, siginfo_t *info, void* void_context)
 
     if (!cheneygc_handle_wp_violation(context, addr))
         if (!handle_guard_page_triggered(context, addr))
-            interrupt_handle_now(signal, info, context);
+            lisp_memory_fault_error(context, addr);
     *((os_context_register_t *) &((ucontext_t *) context)->uc_mcontext.ss_flags)
      |= SS_MODIFIEDWIDE;
 }
index 11e8f19..8e87551 100644 (file)
@@ -1702,10 +1702,14 @@ lisp_memory_fault_error(os_context_t *context, os_vm_address_t addr)
     */
     current_memory_fault_address = addr;
     /* To allow debugging memory faults in signal handlers and such. */
-    corruption_warning_and_maybe_lose("Memory fault");
+    corruption_warning_and_maybe_lose("Memory fault at %x", addr);
     unblock_signals_in_context_and_maybe_warn(context);
+#ifdef LISP_FEATURE_C_STACK_IS_CONTROL_STACK
     arrange_return_to_lisp_function(context,
                                     StaticSymbolFunction(MEMORY_FAULT_ERROR));
+#else
+    funcall0(StaticSymbolFunction(MEMORY_FAULT_ERROR));
+#endif
 }
 #endif
 
index d273b13..a860e16 100644 (file)
@@ -403,11 +403,7 @@ sigsegv_handler(int signal, siginfo_t *info, void* void_context)
     if (!cheneygc_handle_wp_violation(context, addr))
 #endif
         if (!handle_guard_page_triggered(context, addr))
-#ifdef LISP_FEATURE_C_STACK_IS_CONTROL_STACK
             lisp_memory_fault_error(context, addr);
-#else
-            interrupt_handle_now(signal, info, context);
-#endif
 }
 
 void
index baba3bf..828b3ae 100644 (file)
@@ -135,7 +135,7 @@ sigsegv_handler(int signal, siginfo_t *info, void* void_context)
         interrupt_handle_pending(context);
     } else if (!cheneygc_handle_wp_violation(context, addr)) {
         if(!handle_guard_page_triggered(context,addr))
-            interrupt_handle_now(signal, info, context);
+            lisp_memory_fault_error(context, addr);
     }
 }
 
index 4c42c46..e2f68e1 100644 (file)
@@ -203,12 +203,8 @@ sigsegv_handler(int signal, siginfo_t *info, void* void_context)
     void* fault_addr = (void*)info->si_addr;
 
     if (!gencgc_handle_wp_violation(fault_addr))
-         if(!handle_guard_page_triggered(context, fault_addr))
-#ifdef LISP_FEATURE_C_STACK_IS_CONTROL_STACK
-             lisp_memory_fault_error(context, fault_addr);
-#else
-            interrupt_handle_now(signal, info, context);
-#endif
+        if(!handle_guard_page_triggered(context, fault_addr))
+            lisp_memory_fault_error(context, fault_addr);
 }
 
 #else
@@ -221,7 +217,7 @@ sigsegv_handler(int signal, siginfo_t *info, void* void_context)
 
     if (!cheneygc_handle_wp_violation(context, addr)) {
         if (!handle_guard_page_triggered(context,addr))
-            interrupt_handle_now(signal, info, context);
+            lisp_memory_fault_error(context, fault_addr);
     }
 }
 
index 7382e83..67debb2 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.25.51"
+"1.0.25.52"