X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fcoreparse.c;h=ec5a100f3515cd82c0aed6a627fd10335ea9db75;hb=7a79c7338b8c8fb6d84a275d7c0e51ce93150059;hp=4b4998f033e429a9257fae639d2d85439556db02;hpb=bd455348d39bee562296741689882dcb97c46ba3;p=sbcl.git diff --git a/src/runtime/coreparse.c b/src/runtime/coreparse.c index 4b4998f..ec5a100 100644 --- a/src/runtime/coreparse.c +++ b/src/runtime/coreparse.c @@ -38,6 +38,7 @@ /* lutex stuff */ #if defined(LISP_FEATURE_SB_THREAD) && defined(LISP_FEATURE_SB_LUTEX) #include "genesis/sap.h" +#include "pthread-lutex.h" #endif @@ -120,7 +121,7 @@ process_directory(int fd, lispobj *ptr, int count, os_vm_offset_t file_offset) os_vm_address_t addr = (os_vm_address_t) (os_vm_page_size * entry->address); lispobj *free_pointer = (lispobj *) addr + entry->nwords; - long len = os_vm_page_size * entry->page_count; + unsigned long len = os_vm_page_size * entry->page_count; if (len != 0) { os_vm_address_t real_addr; @@ -198,7 +199,8 @@ lispobj load_core_file(char *file, os_vm_offset_t file_offset) { lispobj *header, val, len, *ptr, remaining_len; - int fd = open_binary(file, O_RDONLY), count; + int fd = open_binary(file, O_RDONLY); + unsigned int count; lispobj initial_function = NIL; FSHOW((stderr, "/entering load_core_file(%s)\n", file)); @@ -252,7 +254,7 @@ load_core_file(char *file, os_vm_offset_t file_offset) case BUILD_ID_CORE_ENTRY_TYPE_CODE: SHOW("BUILD_ID_CORE_ENTRY_TYPE_CODE case"); { - int i; + unsigned int i; FSHOW((stderr, "build_id[]=\"%s\"\n", build_id)); FSHOW((stderr, "remaining_len = %d\n", remaining_len)); @@ -324,7 +326,7 @@ load_core_file(char *file, os_vm_offset_t file_offset) struct lutex *lutex = lutexes_to_resurrect[i]; FSHOW((stderr, "re-init'ing lutex @ %p\n", lutex)); - lutex_init(lutex); + lutex_init((tagged_lutex_t) lutex); } free(lutexes_to_resurrect); @@ -349,7 +351,16 @@ load_core_file(char *file, os_vm_offset_t file_offset) size -= bytes_read; while (bytes_read) { bytes_read -= sizeof(long); - page_table[offset++].first_object_offset = data[i++]; + /* Ignore all zeroes. The size of the page table + * core entry was rounded up to os_vm_page_size + * during the save, and might now have more + * elements than the page table. + */ + if (data[i]) { + page_table[offset].first_object_offset = data[i]; + } + i++; + offset++; } }