X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fsave.lisp;h=23562550dbec1b629db22c897f727c62db12481c;hb=b062a0cffdc3e1706a67c487d2bc5e406c104893;hp=74a6906bea5eac65415af62352dd74b6b9f44b3f;hpb=545fa4548b327804cf78afe38a2ecd94ced86162;p=sbcl.git diff --git a/src/code/save.lisp b/src/code/save.lisp index 74a6906..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:n-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