From aa04f6fc545eefb1a5a56327e2f64c9d9af4dab1 Mon Sep 17 00:00:00 2001
From: rtoy <rtoy>
Date: Wed, 8 Nov 2006 22:12:52 +0000
Subject: [PATCH] Restore alloc-tn and null-tn in
 interrupt_handle_space_overflow. These are in global registers and might be
 trashed.  This makes heap overflow checking work better on solaris.

There are still bugs.
---
 lisp/interrupt.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/lisp/interrupt.c b/lisp/interrupt.c
index 4b228395e..823422508 100644
--- a/lisp/interrupt.c
+++ b/lisp/interrupt.c
@@ -1,4 +1,4 @@
-/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/interrupt.c,v 1.44 2006/11/07 11:24:12 cshapiro Exp $ */
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/interrupt.c,v 1.45 2006/11/08 22:12:52 rtoy Exp $ */
 
 /* Interrupt handling magic. */
 
@@ -693,6 +693,12 @@ interrupt_handle_space_overflow(lispobj error, os_context_t * context)
     SC_REG(context, reg_CFP) = (long) current_control_frame_pointer;
     /* This is sparc specific */
     SC_REG(context, reg_CODE) = ((long) PTR(error)) + type_FunctionPointer;
+    /*
+     * Restore important Lisp regs.  Are there others we need to
+     * restore?
+     */
+    SC_REG(context, reg_ALLOC) = current_dynamic_space_free_pointer;
+    SC_REG(context, reg_NIL) = NIL;
 #else
 #error interrupt_handle_space_overflow not implemented for this system
 #endif
-- 
GitLab