X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fsave.lisp;h=8cefec9a5ccdb7b2b58b66a54591bd6eaf8ef069;hb=5da5805594423a2d2a841b88617fd2c87fc05750;hp=1d3b3fadab05daddf56e44aa1f8e4c93258b9309;hpb=53f4147704fbe48c03dd73d7b6a9f92c0a066ed8;p=sbcl.git diff --git a/src/code/save.lisp b/src/code/save.lisp index 1d3b3fa..8cefec9 100644 --- a/src/code/save.lisp +++ b/src/code/save.lisp @@ -77,7 +77,8 @@ automatically reloaded on startup, but references to foreign symbols do not survive intact on all platforms: in this case a WARNING is signalled when saving the core. If no warning is signalled, then the foreign symbol references will remain intact. Platforms where this is -currently the case are x86/FreeBSD, x86/Linux, and sparc/SunOS. +currently the case are x86/FreeBSD, x86/Linux, x86/NetBSD, +sparc/Linux, sparc/SunOS, and ppc/Darwin. This implementation is not as polished and painless as you might like: * It corrupts the current Lisp image enough that the current process @@ -102,8 +103,8 @@ sufficiently motivated to do lengthy fixes." #-gencgc (gc) #+gencgc (gc :full t)) (flet ((restart-lisp () (handling-end-of-the-world - (reinit) - (funcall toplevel)))) + (reinit) + (funcall toplevel)))) ;; FIXME: Perhaps WITHOUT-GCING should be wrapped around the ;; LET as well, to avoid the off chance of an interrupt triggering ;; GC and making our saved RESTART-LISP address invalid? @@ -112,7 +113,9 @@ sufficiently motivated to do lengthy fixes." (get-lisp-obj-address #'restart-lisp))))) (defun deinit () - (mapc #'funcall *save-hooks*) + (dolist (hook *save-hooks*) + (with-simple-restart (continue "Skip this save hook.") + (funcall hook))) (when (fboundp 'cancel-finalization) (cancel-finalization sb!sys:*tty*)) (profile-deinit)