X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fcoreparse.c;h=d657bac7e96a488d3c021d003188e57772f27979;hb=3f79185595180cabcb53c05c88e6facc0a60cdb7;hp=ae429b41543a0e65c55a49e7ad931cf614ee6032;hpb=d8a6359622d77e002c11e13362d4e174b3fe4004;p=sbcl.git diff --git a/src/runtime/coreparse.c b/src/runtime/coreparse.c index ae429b4..d657bac 100644 --- a/src/runtime/coreparse.c +++ b/src/runtime/coreparse.c @@ -38,10 +38,11 @@ /* lutex stuff */ #if defined(LISP_FEATURE_SB_THREAD) && defined(LISP_FEATURE_SB_LUTEX) #include "genesis/sap.h" +#include "pthread-lutex.h" #endif -unsigned char build_id[] = +char build_id[] = #include "../../output/build-id.tmp" ; @@ -107,7 +108,7 @@ lose: } static void -process_directory(int fd, u32 *ptr, int count, os_vm_offset_t file_offset) +process_directory(int fd, lispobj *ptr, int count, os_vm_offset_t file_offset) { struct ndir_entry *entry; @@ -324,7 +325,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 +350,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++; } }