- This is also passed to PURIFY when :PURIFY is T. (rarely used)"
-
- #!+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*))
+ This is also passed to the PURIFY function when :PURIFY is T.
+ (rarely used)
+
+ :COMPRESSION
+ This is only meaningful if the runtime was built with the :SB-CORE-COMPRESSION
+ feature enabled. If NIL (the default), saves to uncompressed core files. If
+ :SB-CORE-COMPRESSION was enabled at build-time, the argument may also be
+ an integer from -1 to 9, corresponding to zlib compression levels, or T
+ (which is equivalent to the default compression level, -1).
+
+The save/load process changes the values of some global variables:
+
+ *STANDARD-OUTPUT*, *DEBUG-IO*, etc.
+ Everything related to open streams is necessarily changed, since
+ the OS won't let us preserve a stream across save and load.
+
+ *DEFAULT-PATHNAME-DEFAULTS*
+ This is reinitialized to reflect the working directory where the
+ saved core is loaded.
+
+SAVE-LISP-AND-DIE interacts with SB-ALIEN:LOAD-SHARED-OBJECT: see its
+documentation for details.
+
+On threaded platforms only a single thread may remain running after
+SB-EXT:*SAVE-HOOKS* have run. Applications using multiple threads can
+be SAVE-LISP-AND-DIE friendly by registering a save-hook that quits
+any additional threads, and an init-hook that restarts them.
+
+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. This can be worked around by forking
+ another process that saves the core.
+ * 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."
+ #!+gencgc
+ (declare (ignore purify root-structures environment-name))
+ #!+sb-core-compression
+ (check-type compression (or boolean (integer -1 9)))
+ #!-sb-core-compression
+ (when compression
+ (error "Unable to save compressed core: this runtime was not built with zlib support"))
+ (when (eql t compression)
+ (setf compression -1))
+ (tune-hashtable-sizes-of-all-packages)
+ (deinit)