X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fsave.lisp;h=23562550dbec1b629db22c897f727c62db12481c;hb=b062a0cffdc3e1706a67c487d2bc5e406c104893;hp=2fd6bd71d6e3c58af0aa198b5b4ecef8c4750fc3;hpb=d45e8a2e9167150c8283783152d2449bd8d59d2d;p=sbcl.git diff --git a/src/code/save.lisp b/src/code/save.lisp index 2fd6bd7..2356255 100644 --- a/src/code/save.lisp +++ b/src/code/save.lisp @@ -17,9 +17,9 @@ ;;;; SAVE-LISP-AND-DIE itself -(sb!alien:def-alien-routine "save" (sb!alien:boolean) - (file sb!c-call:c-string) - (initial-function (sb!alien:unsigned #.sb!vm:word-bits))) +(sb!alien:define-alien-routine "save" (sb!alien:boolean) + (file sb!alien:c-string) + (initial-fun (sb!alien:unsigned #.sb!vm:n-word-bits))) ;;; FIXME: When this is run without the PURIFY option, ;;; it seems to save memory all the way up to the high-water mark, @@ -28,15 +28,24 @@ ;;; (But with the PURIFY option it seems to work OK.) (defun save-lisp-and-die (core-file-name &key (toplevel #'toplevel-init) - (purify nil) + (purify t) (root-structures ()) (environment-name "auxiliary")) #!+sb-doc - "Saves a CMU Common Lisp core image in the file of the specified name, - killing the current Lisp invocation in the process (unless it bails - out early because of some argument error or something). + "Save a \"core image\", i.e. enough information to restart a Lisp + process later in the same state, in the file of the specified name. - The following &KEY args are defined: + This implementation is not as polished and painless as you might like: + * It corrupts the current Lisp image enough that the current process + needs to be killed afterwards. + * There is absolutely no binary compatibility of core images between + different runtime support programs. Even runtimes built from the same + sources at different times are treated as incompatible for this purpose. + This isn't because we like it this way, but just because there don't + seem to be good quick fixes for either limitation and no one has been + sufficiently motivated to do lengthy fixes. + + The following &KEY arguments are defined: :TOPLEVEL The function to run when the created core file is resumed. The default function handles command line toplevel option @@ -64,8 +73,6 @@ saved core is loaded." #!+mp (sb!mp::shutdown-multi-processing) - (when (fboundp 'sb!eval:flush-interpreted-function-cache) - (sb!eval:flush-interpreted-function-cache)) ;; FIXME: What is this for? Explain. (when (fboundp 'cancel-finalization) (cancel-finalization sb!sys:*tty*))