0.pre8.3
[sbcl.git] / src / runtime / save.c
index 8069141..716001f 100644 (file)
@@ -25,6 +25,9 @@
 #include "validate.h"
 #include "gc-internal.h"
 
+#include "genesis/static-symbols.h"
+#include "genesis/symbol.h"
+
 static long
 write_bytes(FILE *file, char *addr, long bytes)
 {
@@ -102,8 +105,7 @@ save(char *filename, lispobj init_function)
     printf("done]\n");
     fflush(stdout);
     
-    /* (Now we can actually start copying ourselves into the
-     * output file.) */
+    /* (Now we can actually start copying ourselves into the output file.) */
 
     printf("[saving current Lisp image into %s:\n", filename);
     fflush(stdout);
@@ -114,9 +116,22 @@ save(char *filename, lispobj init_function)
     putw(3, file);
     putw(SBCL_CORE_VERSION_INTEGER, file);
 
-    putw(NEW_DIRECTORY_CORE_ENTRY_TYPE_CODE, file);
-    putw((5*3)+2, file);
+    putw(BUILD_ID_CORE_ENTRY_TYPE_CODE, file);
+    putw(/* (We're writing the word count of the entry here, and the 2
+         * term is one word for the leading BUILD_ID_CORE_ENTRY_TYPE_CODE
+         * word and one word where we store the count itself.) */
+        2 + strlen(build_id),
+        file);
+    {
+       char *p;
+       for (p = build_id; *p; ++p)
+           putw(*p, file);
+    }
 
+    putw(NEW_DIRECTORY_CORE_ENTRY_TYPE_CODE, file);
+    putw(/* (word count = 3 spaces described by 5 words each, plus the
+         * entry type code, plus this count itself) */
+        (5*3)+2, file);
     output_space(file,
                 READ_ONLY_CORE_SPACE_ID,
                 (lispobj *)READ_ONLY_SPACE_START,
@@ -133,8 +148,7 @@ save(char *filename, lispobj init_function)
 #else
 #ifdef LISP_FEATURE_GENCGC
     /* Flush the current_region, updating the tables. */
-    gc_alloc_update_page_tables(0,&boxed_region);
-    gc_alloc_update_page_tables(1,&unboxed_region);
+    gc_alloc_update_all_page_tables();
     update_x86_dynamic_space_free_pointer();
 #endif
     output_space(file,