X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fcold-init.lisp;h=1e31f57bc88a43cd6d2ea0ba23f010cd3f36b0ee;hb=70c579379283da66f97906a0d62c8a5fc34e4dab;hp=3beb39706161f1c359168d228b96d255c105221d;hpb=cb296ae5a022a5b0f1fd573584301b0d2a9493f9;p=sbcl.git diff --git a/src/code/cold-init.lisp b/src/code/cold-init.lisp index 3beb397..1e31f57 100644 --- a/src/code/cold-init.lisp +++ b/src/code/cold-init.lisp @@ -92,8 +92,7 @@ ;; !UNIX-COLD-INIT. And *TYPE-SYSTEM-INITIALIZED* could be changed to ;; *TYPE-SYSTEM-INITIALIZED-WHEN-BOUND* so that it doesn't need to ;; be explicitly set in order to be meaningful. - (setf *before-gc-hooks* nil - *after-gc-hooks* nil + (setf *after-gc-hooks* nil *gc-inhibit* 1 *need-to-collect-garbage* nil sb!unix::*interrupts-enabled* t @@ -184,10 +183,10 @@ (setf (svref *!load-time-values* (third toplevel-thing)) (funcall (second toplevel-thing)))) (:load-time-value-fixup - (setf (sap-ref-32 (second toplevel-thing) 0) + (setf (sap-ref-word (second toplevel-thing) 0) (get-lisp-obj-address (svref *!load-time-values* (third toplevel-thing))))) - #!+(and x86 gencgc) + #!+(and (or x86 x86-64) gencgc) (:load-time-code-fixup (sb!vm::!envector-load-time-code-fixup (second toplevel-thing) (third toplevel-thing) @@ -259,25 +258,18 @@ ;; The show is on. (terpri) (/show0 "going into toplevel loop") - (handling-end-of-the-world + (handling-end-of-the-world + (thread-init-or-reinit) (toplevel-init) (critically-unreachable "after TOPLEVEL-INIT"))) -(defun quit (&key recklessly-p - (unix-code 0 unix-code-p) - (unix-status unix-code)) +(defun quit (&key recklessly-p (unix-status 0)) #!+sb-doc "Terminate the current Lisp. Things are cleaned up (with UNWIND-PROTECT and so forth) unless RECKLESSLY-P is non-NIL. On UNIX-like systems, UNIX-STATUS is used as the status code." - (declare (type (signed-byte 32) unix-status unix-code)) + (declare (type (signed-byte 32) unix-status)) (/show0 "entering QUIT") - ;; FIXME: UNIX-CODE was deprecated in sbcl-0.6.8, after having been - ;; around for less than a year. It should be safe to remove it after - ;; a year. - (when unix-code-p - (warn "The UNIX-CODE argument is deprecated. Use the UNIX-STATUS argument -instead (which is another name for the same thing).")) (if recklessly-p (sb!unix:unix-exit unix-status) (throw '%end-of-the-world unix-status)) @@ -285,10 +277,14 @@ instead (which is another name for the same thing).")) ;;;; initialization functions +(defun thread-init-or-reinit () + (sb!thread::init-job-control) + (sb!thread::get-foreground)) + (defun reinit () (without-interrupts (without-gcing - (os-cold-init-or-reinit) + (os-cold-init-or-reinit) (stream-reinit) (signal-cold-init-or-reinit) (setf (sb!alien:extern-alien "internal_errors_enabled" boolean) t) @@ -300,11 +296,15 @@ instead (which is another name for the same thing).")) ;; see also comment at the previous SET-FLOATING-POINT-MODES ;; call site. (set-floating-point-modes - :traps '(:overflow #!-netbsd :invalid :divide-by-zero)) - (sb!thread::maybe-install-futex-functions))) - (foreign-reinit) + :traps '(:overflow #!-netbsd :invalid :divide-by-zero)))) + (thread-init-or-reinit) (gc-reinit) - (mapc #'funcall *init-hooks*)) + ;; make sure TIME works correctly from saved cores + (setf *internal-real-time-base-seconds* nil) + (foreign-reinit) + (dolist (hook *init-hooks*) + (with-simple-restart (continue "Skip this initialization hook.") + (funcall hook)))) ;;;; some support for any hapless wretches who end up debugging cold ;;;; init code