X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fcoreparse.c;h=17574443c010e9a24c3b44c5a60f85ec2b8c5a2f;hb=c179ad4d7bef50a974e8907adb079d47c8bea37e;hp=3ccdc23b6d28d4b52ebe0667d38592cbd1a0c27e;hpb=704fd58ea0d87f6cbc6d6689698381a6654c6d7c;p=sbcl.git diff --git a/src/runtime/coreparse.c b/src/runtime/coreparse.c index 3ccdc23..1757444 100644 --- a/src/runtime/coreparse.c +++ b/src/runtime/coreparse.c @@ -423,6 +423,7 @@ load_core_file(char *file, os_vm_offset_t file_offset) size_t offset = 0; long bytes_read; unsigned long data[4096]; + unsigned long word; lseek(fd, fdoffset + file_offset, SEEK_SET); while ((bytes_read = read(fd, data, (size < 4096 ? size : 4096 ))) > 0) @@ -435,9 +436,12 @@ load_core_file(char *file, os_vm_offset_t file_offset) * core entry was rounded up to os_vm_page_size * during the save, and might now have more * elements than the page table. + * + * The low bits of each word are allocation flags. */ - if (data[i]) { - page_table[offset].region_start_offset = data[i]; + if (word=data[i]) { + page_table[offset].region_start_offset = word & ~0x03; + page_table[offset].allocated = word & 0x03; } i++; offset++;