From: Gabor Melis Date: Mon, 16 Feb 2009 22:27:07 +0000 (+0000) Subject: 1.0.25.52: go through lisp_memory_fault_error on all platforms X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=64eccd1724e5f1e638bfc574f7f376427ee3dcb1;p=sbcl.git 1.0.25.52: go through lisp_memory_fault_error on all platforms ... so that the corruption mechanism can kick in. --- diff --git a/src/code/target-signal.lisp b/src/code/target-signal.lisp index 6ddf0b5..87cf646 100644 --- a/src/code/target-signal.lisp +++ b/src/code/target-signal.lisp @@ -161,7 +161,6 @@ #!-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") @@ -207,7 +206,6 @@ (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) diff --git a/src/runtime/bsd-os.c b/src/runtime/bsd-os.c index 3d06aa3..a1acc1e 100644 --- a/src/runtime/bsd-os.c +++ b/src/runtime/bsd-os.c @@ -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) diff --git a/src/runtime/gencgc.c b/src/runtime/gencgc.c index 5e5620f..b9bd862 100644 --- a/src/runtime/gencgc.c +++ b/src/runtime/gencgc.c @@ -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 diff --git a/src/runtime/hpux-os.c b/src/runtime/hpux-os.c index ff59edc..2d2323b 100644 --- a/src/runtime/hpux-os.c +++ b/src/runtime/hpux-os.c @@ -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; } diff --git a/src/runtime/interrupt.c b/src/runtime/interrupt.c index 11e8f19..8e87551 100644 --- a/src/runtime/interrupt.c +++ b/src/runtime/interrupt.c @@ -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 diff --git a/src/runtime/linux-os.c b/src/runtime/linux-os.c index d273b13..a860e16 100644 --- a/src/runtime/linux-os.c +++ b/src/runtime/linux-os.c @@ -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 diff --git a/src/runtime/osf1-os.c b/src/runtime/osf1-os.c index baba3bf..828b3ae 100644 --- a/src/runtime/osf1-os.c +++ b/src/runtime/osf1-os.c @@ -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); } } diff --git a/src/runtime/sunos-os.c b/src/runtime/sunos-os.c index 4c42c46..e2f68e1 100644 --- a/src/runtime/sunos-os.c +++ b/src/runtime/sunos-os.c @@ -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); } } diff --git a/version.lisp-expr b/version.lisp-expr index 7382e83..67debb2 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -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"