X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fsave.lisp;h=77a9f1c02663369b4229e484589e7ce95ad48123;hb=dcb73f3edef1e31078fbe585e2fafbd26743efd7;hp=ac69bb9c9c02f8fe6a2a5d2c0399c7c994872b4b;hpb=9a833110c5c1a709ec480520a7d758652b4d6900;p=sbcl.git diff --git a/src/code/save.lisp b/src/code/save.lisp index ac69bb9..77a9f1c 100644 --- a/src/code/save.lisp +++ b/src/code/save.lisp @@ -19,11 +19,13 @@ (define-alien-routine "save" (boolean) (file c-string) - (initial-fun (unsigned #.sb!vm:n-word-bits))) + (initial-fun (unsigned #.sb!vm:n-word-bits)) + (prepend-runtime int)) #!+gencgc (define-alien-routine "gc_and_save" void - (file c-string)) + (file c-string) + (prepend-runtime int)) #!+gencgc (defvar sb!vm::*restart-lisp-function*) @@ -33,7 +35,8 @@ (purify #!+gencgc nil #!-gencgc t) (root-structures ()) - (environment-name "auxiliary")) + (environment-name "auxiliary") + (executable nil)) #!+sb-doc "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. @@ -47,6 +50,11 @@ The following &KEY arguments are defined: and runs the top level read-eval-print loop. This function should not return. + :EXECUTABLE + If true, arrange to combine the SBCL runtime and the core image + to create a standalone executable. If false (the default), the + core image will not be executable on its own. + :PURIFY If true (the default on cheneygc), do a purifying GC which moves all dynamically allocated objects into static space. This takes @@ -113,10 +121,12 @@ sufficiently motivated to do lengthy fixes." ;; A normal GC will leave huge amounts of storage unreclaimed ;; (over 50% on x86). This needs to be done by a single function ;; since the GC will invalidate the stack. - #!+gencgc (gc-and-save (unix-namestring core-file-name nil))) + #!+gencgc (gc-and-save (unix-namestring core-file-name nil) + (if executable 1 0))) (without-gcing (save (unix-namestring core-file-name nil) - (get-lisp-obj-address #'restart-lisp))))) + (get-lisp-obj-address #'restart-lisp) + (if executable 1 0))))) ;; Save the restart function into a static symbol, to allow GC-AND-SAVE ;; access to it even after the GC has moved it. #!+gencgc @@ -135,7 +145,7 @@ sufficiently motivated to do lengthy fixes." (dolist (hook *save-hooks*) (with-simple-restart (continue "Skip this save hook.") (funcall hook))) - (when (fboundp 'cancel-finalization) + #!-win32 (when (fboundp 'cancel-finalization) (cancel-finalization sb!sys:*tty*)) (profile-deinit) (debug-deinit)