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