diff --git a/lisp/interrupt.c b/lisp/interrupt.c
index a5489e94ac40979463d39f31bf2d1345ff7205ca..e1fcb7e833faf4c02adecba92952d0c7995c1965 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.9 1997/03/16 15:59:41 pw Exp $ */
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/interrupt.c,v 1.10 1997/11/19 02:41:54 dtc Exp $ */
 
 /* Interrupt handing magic. */
 
@@ -349,13 +349,9 @@ static boolean gc_trigger_hit(HANDLER_ARGS)
 }
 #endif
 
-
+#ifndef i386
 boolean interrupt_maybe_gc(HANDLER_ARGS)
 {
-#ifdef __linux__
-  GET_CONTEXT
-#endif
-
     if (!foreign_function_call_active
 #ifndef INTERNAL_GC_TRIGGER
 		  && gc_trigger_hit(signal, code, context)
@@ -388,6 +384,26 @@ boolean interrupt_maybe_gc(HANDLER_ARGS)
     }else
 	return FALSE;
 }
+#endif
+
+#ifdef i386
+void set_maybe_gc_pending(void)
+{
+  maybe_gc_pending = TRUE;
+  if (pending_signal == 0) {
+    /* Block all blockable signals */
+#ifdef POSIX_SIGS
+    sigset_t block;
+    sigemptyset(&block);
+    FILLBLOCKSET(&block);
+    sigprocmask(SIG_BLOCK, &block, &pending_mask);
+#else
+    pending_mask = sigblock(BLOCKABLE);
+#endif
+  }
+  SetSymbolValue(PSEUDO_ATOMIC_INTERRUPTED, make_fixnum(1));
+}
+#endif
 
 /****************************************************************\
 * Noise to install handlers.                                     *
diff --git a/lisp/interrupt.h b/lisp/interrupt.h
index cb06c86e5c858baa37eb76aa1fe41d849d13df8b..36ed04a39e5803e08dd424330eb80760e085c904 100644
--- a/lisp/interrupt.h
+++ b/lisp/interrupt.h
@@ -1,4 +1,4 @@
-/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/interrupt.h,v 1.4 1994/10/24 20:06:00 ram Exp $ */
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/interrupt.h,v 1.5 1997/11/19 02:41:55 dtc Exp $ */
 
 #if !defined(_INCLUDE_INTERRUPT_H_)
 #define _INCLUDE_INTERRUPT_H_
@@ -14,6 +14,10 @@ union interrupt_handler {
 	void (*c)(HANDLER_ARGS);
 };
 
+#ifdef i386
+extern void set_maybe_gc_pending(void);
+#endif
+
 extern void interrupt_init(void);
 extern void fake_foreign_function_call(struct sigcontext *context);
 extern void undo_fake_foreign_function_call(struct sigcontext *context);