diff --git a/ldb/alloc.c b/ldb/alloc.c
index 902c88db4b34194cf3bd4177c36457d18b64225d..32eab57741a5d659d3a7b5890e003f2d72102e6d 100644
--- a/ldb/alloc.c
+++ b/ldb/alloc.c
@@ -1,4 +1,4 @@
-/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/alloc.c,v 1.6 1991/02/16 00:59:03 wlott Exp $ */
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/alloc.c,v 1.7 1991/10/22 18:36:50 wlott Exp $ */
 #include "lisp.h"
 #include "ldb.h"
 #include "alloc.h"
@@ -8,10 +8,16 @@
 #define GET_FREE_POINTER() ((lispobj *)SymbolValue(ALLOCATION_POINTER))
 #define SET_FREE_POINTER(new_value) \
     (SetSymbolValue(ALLOCATION_POINTER,(lispobj)(new_value)))
+#define GET_GC_TRIGGER() ((lispobj *)SymbolValue(INTERNAL_GC_TRIGGER))
+#define SET_GC_TRIGGER(new_value) \
+    (SetSymbolValue(INTERNAL_GC_TRIGGER,(lispobj)(new_value)))
 #else
 #define GET_FREE_POINTER() current_dynamic_space_free_pointer
 #define SET_FREE_POINTER(new_value) \
     (current_dynamic_space_free_pointer = (new_value))
+#define GET_GC_TRIGGER() current_auto_gc_trigger
+#define SET_GC_TRIGGER(new_value) \
+    clear_auto_gc_trigger(); set_auto_gc_trigger(new_value);
 #endif
 
 
@@ -31,12 +37,9 @@ int bytes;
     result = GET_FREE_POINTER();
     SET_FREE_POINTER(result + (bytes / sizeof(lispobj)));
 
-    if (current_auto_gc_trigger &&
-        GET_FREE_POINTER() > current_auto_gc_trigger) {
-        /* We can't GC while in C land, so just dink the trigger. */
-        clear_auto_gc_trigger();
-        set_auto_gc_trigger((char *)GET_FREE_POINTER() -
-                            (char *)current_dynamic_space);
+    if (GET_GC_TRIGGER() && GET_FREE_POINTER() > GET_GC_TRIGGER()) {
+	SET_GC_TRIGGER((char *)GET_FREE_POINTER()
+		       - (char *)current_dynamic_space);
     }
 
     return result;
diff --git a/ldb/gc.c b/ldb/gc.c
index acdc136863a9acd9f6ecb6c61814dd00b5d4d89d..046851a139a6c2b11c76d9f0c1a54767e2eacf2c 100644
--- a/ldb/gc.c
+++ b/ldb/gc.c
@@ -1,7 +1,7 @@
 /*
  * Stop and Copy GC based on Cheney's algorithm.
  *
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/gc.c,v 1.29 1991/09/27 10:45:45 wlott Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/gc.c,v 1.30 1991/10/22 18:37:56 wlott Exp $
  * 
  * Written by Christopher Hoover.
  */
@@ -1893,6 +1893,8 @@ gc_init()
 
 /* Noise to manipulate the gc trigger stuff. */
 
+#ifndef ibmrt
+
 void set_auto_gc_trigger(dynamic_usage)
      unsigned long dynamic_usage;
 {
@@ -1900,17 +1902,12 @@ void set_auto_gc_trigger(dynamic_usage)
     os_vm_size_t length=
 	DYNAMIC_SPACE_SIZE + (os_vm_address_t)current_dynamic_space - addr;
 
-#ifdef ibmrt
-#define CURDYNFREEPTR (os_vm_address_t)SymbolValue(ALLOCATION_POINTER)
-#else
-#define CURDYNFREEPTR (os_vm_address_t)current_dynamic_space_free_pointer
-#endif
-
-    if(addr < CURDYNFREEPTR) {
+    if(addr < (os_vm_address_t)current_dynamic_space_free_pointer) {
 	fprintf(stderr,
-		"set_auto_gc_trigger: tried to set gc trigger too low! (%d < %d)\n",
+	   "set_auto_gc_trigger: tried to set gc trigger too low! (%d < %d)\n",
 		dynamic_usage,
-		CURDYNFREEPTR - (os_vm_address_t)current_dynamic_space);
+		(os_vm_address_t)current_dynamic_space_free_pointer
+		- (os_vm_address_t)current_dynamic_space);
 	return;
     }
     else if (length < 0) {
@@ -1950,3 +1947,5 @@ void clear_auto_gc_trigger()
 	current_auto_gc_trigger = NULL;
     }
 }
+
+#endif
diff --git a/ldb/globals.c b/ldb/globals.c
index 9ab826fecd40d12af6d4224264c9be82bd613118..49bd66dc02e19ef3caa0f55384ca0a341c6275eb 100644
--- a/ldb/globals.c
+++ b/ldb/globals.c
@@ -1,4 +1,4 @@
-/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/globals.c,v 1.7 1991/02/16 01:00:19 wlott Exp $ */
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/globals.c,v 1.8 1991/10/22 18:38:02 wlott Exp $ */
 
 /* Variables everybody needs to look at or frob on. */
 
@@ -33,8 +33,8 @@ lispobj *binding_stack;
 lispobj *current_dynamic_space;
 #ifndef ibmrt
 lispobj *current_dynamic_space_free_pointer;
-#endif
 lispobj *current_auto_gc_trigger;
+#endif
 
 globals_init()
 {
diff --git a/ldb/globals.h b/ldb/globals.h
index 0ee667af3c49d795c18a46f4cd62c0510bf86f1a..fc11198a5d5fdad31215117e973fd07f3cde23d0 100644
--- a/ldb/globals.h
+++ b/ldb/globals.h
@@ -1,4 +1,4 @@
-/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/globals.h,v 1.7 1991/02/16 01:00:22 wlott Exp $ */
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/globals.h,v 1.8 1991/10/22 18:38:04 wlott Exp $ */
 
 #if !defined(_INCLUDE_GLOBALS_H_)
 #define _INCLUDED_GLOBALS_H_
@@ -32,8 +32,8 @@ extern lispobj *binding_stack;
 extern lispobj *current_dynamic_space;
 #ifndef ibmrt
 extern lispobj *current_dynamic_space_free_pointer;
-#endif
 extern lispobj *current_auto_gc_trigger;
+#endif
 
 #else  LANGUAGE_ASSEMBLY
 
diff --git a/ldb/interrupt.c b/ldb/interrupt.c
index c7e2d8c322a72b47e6145ada857218d19856e258..3d973ba2a48e5328ba34cbf13d5c790c5062c745 100644
--- a/ldb/interrupt.c
+++ b/ldb/interrupt.c
@@ -1,4 +1,4 @@
-/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/interrupt.c,v 1.29 1991/09/27 10:31:55 wlott Exp $ */
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/interrupt.c,v 1.30 1991/10/22 18:38:06 wlott Exp $ */
 
 /* Interrupt handing magic. */
 
@@ -278,6 +278,8 @@ struct sigcontext *context;
 * Stuff to detect and handle hitting the gc trigger.             *
 \****************************************************************/
 
+#ifndef ibmrt
+
 static boolean gc_trigger_hit(context)
      struct sigcontext *context;
 {
@@ -330,6 +332,8 @@ struct sigcontext *context;
 	return FALSE;
 }
 
+#endif
+
 /****************************************************************\
 * Noise to install handlers.                                     *
 \****************************************************************/
diff --git a/ldb/ldb.c b/ldb/ldb.c
index 538986fcfd2ac97cc467234cd8aeabe3b85743c0..ce3ee058b85c24ca9c548791fdf7129054397e07 100644
--- a/ldb/ldb.c
+++ b/ldb/ldb.c
@@ -1,4 +1,4 @@
-/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/ldb.c,v 1.14 1991/09/04 15:35:16 wlott Exp $ */
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/ldb.c,v 1.15 1991/10/22 18:38:09 wlott Exp $ */
 /* Lisp kernel core debugger */
 
 #include <stdio.h>
@@ -118,8 +118,10 @@ char *envp[];
     restore_state = load_core_file(core);
 
 #ifdef ibmrt
-    if (!restore_state)
+    if (!restore_state) {
 	SetSymbolValue(BINDING_STACK_POINTER, (lispobj)binding_stack);
+	SetSymbolValue(INTERNAL_GC_TRIGGER, fixnum(-1));
+    }
 #endif
 
     interrupt_init();
diff --git a/ldb/mach-os.c b/ldb/mach-os.c
index 9f6444044e60c2f3fc197baf73d927495cd5b409..90d306eeecbdb53b907ac2b015f6e72d84092fbd 100644
--- a/ldb/mach-os.c
+++ b/ldb/mach-os.c
@@ -1,5 +1,5 @@
 /*
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/mach-os.c,v 1.2 1991/05/24 19:27:45 wlott Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/mach-os.c,v 1.3 1991/10/22 18:38:11 wlott Exp $
  *
  * OS-dependent routines.  This file (along with os.h) exports an
  * OS-independent interface to the operating system VM facilities.
@@ -153,6 +153,7 @@ vm_address_t test;
     return FALSE;
 }
 
+#ifndef ibmrt
 static void sigbus_handler(signal, code, context)
 int signal, code;
 struct sigcontext *context;
@@ -160,10 +161,13 @@ struct sigcontext *context;
     if(!interrupt_maybe_gc(context))
 	interrupt_handle_now(signal, code, context);
 }
+#endif
 
 void os_install_interrupt_handlers()
 {
+#ifndef ibmrt
     interrupt_install_low_level_handler(SIGBUS,sigbus_handler);
+#endif
 #ifdef mips
     interrupt_install_low_level_handler(SIGSEGV,sigbus_handler);
 #endif
diff --git a/ldb/monitor.c b/ldb/monitor.c
index c74538a64ba26360d4191b58c65a523c014ca22f..fb967758f86694899501e3af87346bc0298156af 100644
--- a/ldb/monitor.c
+++ b/ldb/monitor.c
@@ -1,4 +1,4 @@
-/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/monitor.c,v 1.15 1991/04/13 13:58:46 chiles Exp $ */
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/monitor.c,v 1.16 1991/10/22 18:38:12 wlott Exp $ */
 
 #include <stdio.h>
 #include <setjmp.h>
@@ -127,10 +127,13 @@ char **ptr;
 #endif
 
     printf("DYNAMIC\t=\t0x%08x\n", current_dynamic_space);
-#ifndef ibmrt
+#ifdef ibmrt
+    printf("ALLOC\t=\t0x08x\n", SymbolValue(ALLOCATION_POINTER));
+    printf("TRIGGER\t=\t0x08x\n", SymbolValue(INTERNAL_GC_TRIGGER));
+#else
     printf("ALLOC\t=\t0x%08x\n", current_dynamic_space_free_pointer);
-#endif
     printf("TRIGGER\t=\t0x%08x\n", current_auto_gc_trigger);
+#endif
     printf("STATIC\t=\t0x%08x\n", SymbolValue(STATIC_SPACE_FREE_POINTER));
     printf("RDONLY\t=\t0x%08x\n", SymbolValue(READ_ONLY_SPACE_FREE_POINTER));
 
diff --git a/ldb/rt-arch.c b/ldb/rt-arch.c
index 756221dadc97d43130fe7e99a9c2ef992c763442..8f78cc8c4c2b3a1c382efdd5397124158135f651 100644
--- a/ldb/rt-arch.c
+++ b/ldb/rt-arch.c
@@ -14,17 +14,7 @@ void arch_init()
 os_vm_address_t arch_get_bad_addr(context)
 struct sigcontext *context;
 {
-    if (!SymbolValue(PSEUDO_ATOMIC_ATOMIC))
-	/* If we are not pseudo-atomic, then we could only have hit the */
-	/* trigger if the allocation pointer points beyond the trigger. */
-	return (os_vm_address_t)SymbolValue(ALLOCATION_POINTER);
-    else
-	/* Otherwise, we might be inside an allocator.  The best we can do */
-	/* is to try turning off the trigger and seeing if the problem goes */
-	/* away.  If it does, then we guessed right.  If it doesn't, we will */
-	/* end up back here, except current_auto_gc_trigger will be NULL, */
-	/* so we will take the sigbus at that time. */
-	return (os_vm_address_t)current_auto_gc_trigger;
+    return 0;
 }
 
 void arch_skip_instruction(context)