X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fcold-init.lisp;h=f3217e6d7f7a594db3e6396fc17b6f72ee9bc178;hb=77d94d36bcfd3d5eea73ad51e6ee621a8938f995;hp=62f72e8f3b2dedbaf269bbe9802f787bd209ef09;hpb=7646aefa188758e2892fea2ad02be4f29b3938f2;p=sbcl.git diff --git a/src/code/cold-init.lisp b/src/code/cold-init.lisp index 62f72e8..f3217e6 100644 --- a/src/code/cold-init.lisp +++ b/src/code/cold-init.lisp @@ -111,6 +111,9 @@ ;; this to be initialized, so we initialize it right away. (show-and-call !random-cold-init) + (show-and-call !character-database-cold-init) + + (show-and-call !early-package-cold-init) (show-and-call !package-cold-init) ;; All sorts of things need INFO and/or (SETF INFO). @@ -213,14 +216,19 @@ (show-and-call stream-cold-init-or-reset) (show-and-call !loader-cold-init) + (show-and-call !foreign-cold-init) (show-and-call signal-cold-init-or-reinit) + (/show0 "enabling internal errors") (setf (sb!alien:extern-alien "internal_errors_enabled" boolean) t) ;; FIXME: This list of modes should be defined in one place and ;; explicitly shared between here and REINIT. - ;; Why was this marked #!+alpha? CMUCL does it here on all architectures - (set-floating-point-modes :traps '(:overflow :invalid :divide-by-zero)) + ;; FIXME: For some unknown reason, NetBSD/x86 won't run with the + ;; :invalid trap enabled. That should be fixed, but not today... + ;; PEM -- April 5, 2004 + (set-floating-point-modes + :traps '(:overflow #!-netbsd :invalid :divide-by-zero)) (show-and-call !class-finalize) @@ -251,25 +259,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)) + "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)) (/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)) @@ -277,10 +278,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) @@ -288,10 +293,20 @@ instead (which is another name for the same thing).")) ;; 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)) + ;; + ;; 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))) - (gc-on) - (gc)) + (thread-init-or-reinit) + (gc-reinit) + ;; 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 @@ -302,7 +317,7 @@ instead (which is another name for the same thing).")) (defun hexstr (thing) (/noshow0 "entering HEXSTR") (let ((addr (get-lisp-obj-address thing)) - (str (make-string 10))) + (str (make-string 10 :element-type 'base-char))) (/noshow0 "ADDR and STR calculated") (setf (char str 0) #\0 (char str 1) #\x)