diff --git a/code/lispinit.lisp b/code/lispinit.lisp
index 27d2053328fb4584bbaf48379bd95fa43e9c766c..05f2f426596e543c985432f3c3e9b8238abf8ed2 100644
--- a/code/lispinit.lisp
+++ b/code/lispinit.lisp
@@ -77,7 +77,8 @@
 
 ;;; Must be initialized in %INITIAL-FUNCTION before the DEFVAR runs...
 (proclaim '(special *gc-inhibit* *already-maybe-gcing*
-		    *need-to-collect-garbage* *gc-verbose*))
+		    *need-to-collect-garbage* *gc-verbose*
+		    *before-gc-hooks* *after-gc-hooks*))
 
 ;;;; Global ports:
  
@@ -760,6 +761,9 @@
   (setf *gc-inhibit* t)
   (setf *need-to-collect-garbage* nil)
   (setq *gc-verbose* t)
+  (setq *before-gc-hooks* ())
+  (setq *after-gc-hooks* ())
+  (setq %sp-interrupts-inhibited nil)
   (%primitive print "In initial-function, and running.")
 
   ;; Many top-level forms call INFO, (SETF INFO).
@@ -939,6 +943,16 @@
     (funcall init-function)))
 
 
+;;; WORLD-LOAD-INIT-FUNCTION  --  Interface
+;;;
+;;;    The init function we pass to SAVE-LISP in worldload.  We turn on GC and
+;;; thow to top level.
+;;;
+(defun world-load-init-function ()
+  (gc-on)
+  (abort))
+
+
 ;;; Quit gets us out, one way or another.
 
 (defun quit (&optional recklessly-p)