From 8cbbd24d34268ace38b81d0fdd90c768b5b8eacd Mon Sep 17 00:00:00 2001 From: rtoy <rtoy> Date: Mon, 7 Jun 2004 15:24:08 +0000 Subject: [PATCH] Add sigsegv_handle_now (and segv_handle_now) to handle segv's that weren't caused by a write-protected heap. Requested by Lynn Quam. --- lisp/Linux-os.c | 9 +++++++-- lisp/solaris-os.c | 10 ++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/lisp/Linux-os.c b/lisp/Linux-os.c index 356909f98..5f3c8685b 100644 --- a/lisp/Linux-os.c +++ b/lisp/Linux-os.c @@ -15,7 +15,7 @@ * GENCGC support by Douglas Crosher, 1996, 1997. * Alpha support by Julian Dolby, 1999. * - * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/Linux-os.c,v 1.18 2004/05/20 00:32:24 cwang Exp $ + * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/Linux-os.c,v 1.19 2004/06/07 15:24:08 rtoy Exp $ * */ @@ -227,6 +227,11 @@ boolean valid_addr(os_vm_address_t addr) #if defined GENCGC +static sigsegv_handle_now(HANDLER_ARGS) +{ + interrupt_handle_now(signal, contextstruct); +} + void sigsegv_handler(HANDLER_ARGS) { GET_CONTEXT @@ -262,7 +267,7 @@ void sigsegv_handler(HANDLER_ARGS) #else DPRINTF(0,(stderr,"sigsegv: eip: %p\n",context->eip)); #endif - interrupt_handle_now(signal, contextstruct); + sigsegv_handle_now(signal, contextstruct); } #else static void sigsegv_handler(HANDLER_ARGS) diff --git a/lisp/solaris-os.c b/lisp/solaris-os.c index c31d871e9..601dc9eff 100644 --- a/lisp/solaris-os.c +++ b/lisp/solaris-os.c @@ -1,5 +1,5 @@ /* - * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/solaris-os.c,v 1.13 2004/05/04 12:39:45 rtoy Exp $ + * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/solaris-os.c,v 1.14 2004/06/07 15:24:08 rtoy Exp $ * * OS-dependent routines. This file (along with os.h) exports an * OS-independent interface to the operating system VM facilities. @@ -204,6 +204,12 @@ valid_addr(os_vm_address_t addr) * Running into the gc trigger page will end up here... */ #if defined(GENCGC) + +void segv_handle_now(HANDLER_ARGS) +{ + interrupt_handle_now(signal, code, context); +} + void segv_handler(HANDLER_ARGS) { caddr_t addr = code->si_addr; @@ -273,7 +279,7 @@ void segv_handler(HANDLER_ARGS) /* a *real* protection fault */ fprintf(stderr, "segv_handler: Real protection violation: 0x%08x\n", addr); - interrupt_handle_now(signal, code, context); + segv_handle_now(signal, code, context); } #else void -- GitLab