0.8alpha.0.14
[sbcl.git] / src / code / cold-init.lisp
index 02bdfd9..fc26b92 100644 (file)
@@ -22,8 +22,8 @@
 ;;; anything whose name matches a magic character pattern is
 ;;; uninterned.
 ;;;
-;;; FIXME: should also go through globaldb (and perhaps other tables)
-;;; blowing away associated entries
+;;; FIXME: Are there other tables that need to have entries removed?
+;;; What about symbols of the form DEF!FOO?
 (defun !unintern-init-only-stuff ()
   (do ((any-changes? nil nil))
       (nil)
                         (string= name "*!" :end1 2 :end2 2)))
            (/show0 "uninterning cold-init-only symbol..")
            (/primitive-print name)
+           ;; FIXME: Is this (FIRST (LAST *INFO-ENVIRONMENT*)) really
+           ;; meant to be an idiom to use?  Is there a more obvious
+           ;; name for this? [e.g. (GLOBAL-ENVIRONMENT)?]
+           (do-info ((first (last *info-environment*))
+                           :name entry :class class :type type)
+             (when (eq entry symbol)
+               (clear-info class type entry)))
            (unintern symbol package)
            (setf any-changes? t)))))
     (unless any-changes?
@@ -88,8 +95,7 @@
   (setf *gc-notify-stream* nil
         *before-gc-hooks* nil
         *after-gc-hooks* nil
-        *already-maybe-gcing* t
-       *gc-inhibit* t
+       *gc-inhibit* 1
        *need-to-collect-garbage* nil
        sb!unix::*interrupts-enabled* t
        sb!unix::*interrupt-pending* nil
 
   ;; FIXME: This list of modes should be defined in one place and
   ;; explicitly shared between here and REINIT.
-  ;;
-  ;; FIXME: In CMU CL, this is done "here" (i.e. in the analogous
-  ;; lispinit.lisp code) for every processor architecture. But Daniel
-  ;; Barlow's Alpha patches suppress it for Alpha. Why the difference?
-  #!+alpha
-  (set-floating-point-modes :traps '(:overflow
-                                    #!-x86 :underflow
-                                    :invalid
-                                    :divide-by-zero))
+
+  ;; Why was this marked #!+alpha?  CMUCL does it here on all architectures
+  (set-floating-point-modes :traps '(:overflow :invalid :divide-by-zero))
 
   (show-and-call !class-finalize)
 
   (setf *cold-init-complete-p* t)
 
   ;; The system is finally ready for GC.
-  (setf *already-maybe-gcing* nil)
   (/show0 "enabling GC")
   (gc-on)
   (/show0 "doing first GC")
@@ -276,20 +275,13 @@ instead (which is another name for the same thing)."))
       (os-cold-init-or-reinit)
       (stream-reinit)
       (signal-cold-init-or-reinit)
-      (gc-reinit)
       (setf (sb!alien:extern-alien "internal_errors_enabled" boolean) t)
-      (set-floating-point-modes :traps
-                               '(:overflow
-                                 :invalid
-                                 :divide-by-zero
-                                 ;; PRINT seems not to like x86 NPX
-                                 ;; denormal floats like
-                                 ;; LEAST-NEGATIVE-SINGLE-FLOAT, so
-                                 ;; the :UNDERFLOW exceptions are
-                                 ;; disabled by default. Joe User can
-                                 ;; explicitly enable them if
-                                 ;; desired.
-                                 #!-x86 :underflow))
+      ;; PRINT seems not to like x86 NPX denormal floats like
+      ;; LEAST-NEGATIVE-SINGLE-FLOAT, so the :UNDERFLOW exceptions are
+      ;; disabled by default. Joe User can explicitly enable them if
+      ;; desired.
+      (set-floating-point-modes :traps '(:overflow :invalid :divide-by-zero))
+
       ;; Clear pseudo atomic in case this core wasn't compiled with
       ;; support.
       ;;
@@ -298,8 +290,9 @@ instead (which is another name for the same thing)."))
       ;; reason.. (Perhaps we should do it anyway in case someone
       ;; manages to save an image from within a pseudo-atomic-atomic
       ;; operation?)
-      #!+x86 (setf *pseudo-atomic-atomic* 0))
-    (gc-on)))
+      #!+x86 (setf *pseudo-atomic-atomic* 0)))
+  (gc-on)
+  (gc))
 \f
 ;;;; some support for any hapless wretches who end up debugging cold
 ;;;; init code