From b7b2103a4607e35a058d1a11e9ec36f929ce4bc2 Mon Sep 17 00:00:00 2001
From: rtoy <rtoy>
Date: Thu, 1 Sep 2011 16:16:49 +0000
Subject: [PATCH] Oops.  Need to check for gc write barrier before handling the
 sigbus.

---
 lisp/Darwin-os.c | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

diff --git a/lisp/Darwin-os.c b/lisp/Darwin-os.c
index 01a5d01e2..e60bc2094 100644
--- a/lisp/Darwin-os.c
+++ b/lisp/Darwin-os.c
@@ -14,7 +14,7 @@
  * Frobbed for OpenBSD by Pierre R. Mai, 2001.
  * Frobbed for Darwin by Pierre R. Mai, 2003.
  *
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/Darwin-os.c,v 1.33 2011/09/01 05:18:26 rtoy Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/Darwin-os.c,v 1.34 2011/09/01 16:16:49 rtoy Exp $
  *
  */
 
@@ -497,6 +497,17 @@ sigbus_handler(HANDLER_ARGS)
     DPRINTF(0, (stderr, " foreign_function_call = %d\n", foreign_function_call_active));
 #endif
     
+#if defined(GENCGC)
+#if defined(SIGSEGV_VERBOSE)
+    fprintf(stderr, "Signal %d, fault_addr=%x\n",
+	    signal, fault_addr);
+#endif
+    if (gc_write_barrier(code->si_addr))
+	 return;
+#else
+    if (interrupt_maybe_gc(signal, code, context))
+	return;
+#endif
 #ifdef RED_ZONE_HIT
     {
         /*
@@ -504,6 +515,7 @@ sigbus_handler(HANDLER_ARGS)
          * handler there.  Global variables are used to pass the
          * context * to the other stack.
          */
+      
 	tramp_signal = signal;
 	tramp_code = *code;
 	tramp_context = *context;
@@ -512,17 +524,6 @@ sigbus_handler(HANDLER_ARGS)
     }
 #endif
 
-#if defined(GENCGC)
-#if defined(SIGSEGV_VERBOSE)
-    fprintf(stderr, "Signal %d, fault_addr=%x, page_index=%d:\n",
-	    signal, fault_addr, page_index);
-#endif
-    if (gc_write_barrier(code->si_addr))
-	 return;
-#else
-    if (interrupt_maybe_gc(signal, code, context))
-	return;
-#endif
     /* a *real* protection fault */
     fprintf(stderr, "sigbus_handler: Real protection violation: %p\n", fault_addr);
     sigbus_handle_now(signal, code, context);
-- 
GitLab