X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fsave.c;h=2c527f8f4e32895aac9e1962042a50ac0b9bdefa;hb=d7f6139a91d7d9b0667a597584ae306d958bb2f4;hp=d297eb965439c4f40111acd4ffe7ca80f65f2571;hpb=d0583fb59b0d5e243c9141d649b82bac577f5aa9;p=sbcl.git diff --git a/src/runtime/save.c b/src/runtime/save.c index d297eb9..2c527f8 100644 --- a/src/runtime/save.c +++ b/src/runtime/save.c @@ -9,10 +9,6 @@ * files for more information. */ -/* - * $Header$ - */ - #include #include #include @@ -36,12 +32,12 @@ write_bytes(FILE *file, char *addr, long bytes) { long count, here, data; - bytes = (bytes+CORE_PAGESIZE-1)&~(CORE_PAGESIZE-1); + bytes = (bytes+os_vm_page_size-1)&~(os_vm_page_size-1); fflush(file); here = ftell(file); fseek(file, 0, 2); - data = (ftell(file)+CORE_PAGESIZE-1)&~(CORE_PAGESIZE-1); + data = (ftell(file)+os_vm_page_size-1)&~(os_vm_page_size-1); fseek(file, data, 0); while (bytes > 0) { @@ -57,7 +53,7 @@ write_bytes(FILE *file, char *addr, long bytes) } fflush(file); fseek(file, here, 0); - return data/CORE_PAGESIZE - 1; + return data/os_vm_page_size - 1; } static void @@ -72,14 +68,14 @@ output_space(FILE *file, int id, lispobj *addr, lispobj *end) bytes = words * sizeof(lispobj); - printf("writing %d bytes from the %s space at 0x%08lx\n", - bytes, names[id], (unsigned long)addr); + printf("writing %ld(0x%lx) bytes from the %s(%d) space at 0x%08lx\n", + (long)bytes, (long)bytes, names[id], id, (unsigned long)addr); data = write_bytes(file, (char *)addr, bytes); putw(data, file); - putw((long)addr / CORE_PAGESIZE, file); - putw((bytes + CORE_PAGESIZE - 1) / CORE_PAGESIZE, file); + putw((long)addr / os_vm_page_size, file); + putw((bytes + os_vm_page_size - 1) / os_vm_page_size, file); } boolean @@ -91,20 +87,19 @@ save(char *filename, lispobj init_function) char sbuf[128]; strcpy(sbuf,filename); filename=sbuf; - /* Get rid of remnant stuff. This is a MUST so that - * the memory manager can get started correctly when - * we restart after this save. Purify is going to - * maybe move the args so we need to consider them volatile, - * especially if the gcc optimizer is working!! - */ + /* Get rid of remnant stuff. This is a MUST so that the memory + * manager can get started correctly when we restart after this + * save. Purify is going to maybe move the args so we need to + * consider them volatile, especially if the gcc optimizer is + * working!! */ purify(NIL,NIL); init_function = *func_ptr; /* Set dynamic space pointer to base value so we don't write out - * MBs of just cleared heap. - */ - if(SymbolValue(X86_CGC_ACTIVE_P) != NIL) - SetSymbolValue(ALLOCATION_POINTER, DYNAMIC_SPACE_START); + * MBs of just cleared heap. */ + if(SymbolValue(X86_CGC_ACTIVE_P) != NIL) { + SetSymbolValue(ALLOCATION_POINTER, DYNAMIC_SPACE_START); + } #endif /* Open the file: */ unlink(filename); @@ -132,14 +127,14 @@ save(char *filename, lispobj init_function) putw(SBCL_CORE_VERSION_INTEGER, file); putw(CORE_NDIRECTORY, file); - putw((5*3)+2, file); + putw((5*3)+2, file); /* 3 5-word space descriptors, plus code and count */ output_space(file, READ_ONLY_SPACE_ID, (lispobj *)READ_ONLY_SPACE_START, (lispobj *)SymbolValue(READ_ONLY_SPACE_FREE_POINTER)); output_space(file, STATIC_SPACE_ID, (lispobj *)STATIC_SPACE_START, (lispobj *)SymbolValue(STATIC_SPACE_FREE_POINTER)); #ifdef reg_ALLOC - output_space(file, DYNAMIC_SPACE_ID, (lispobj *)DYNAMIC_SPACE_START, + output_space(file, DYNAMIC_SPACE_ID, (lispobj *)current_dynamic_space, dynamic_space_free_pointer); #else #ifdef GENCGC @@ -148,10 +143,13 @@ save(char *filename, lispobj init_function) gc_alloc_update_page_tables(1,&unboxed_region); update_x86_dynamic_space_free_pointer(); #endif - output_space(file, DYNAMIC_SPACE_ID, DYNAMIC_SPACE_START, + output_space(file, DYNAMIC_SPACE_ID, (lispobj *)DYNAMIC_SPACE_START, (lispobj *)SymbolValue(ALLOCATION_POINTER)); #endif + FSHOW((stderr, "/writing init_function=0x%lx\n", (long)init_function)); + FSHOW((stderr, "/(SymbolValue(ALLOCATION_POINTER)=0x%lx\n", + (long)SymbolValue(ALLOCATION_POINTER))); putw(CORE_INITIAL_FUNCTION, file); putw(3, file); putw(init_function, file);