void
maybe_initialize_runtime_options(int fd)
{
+ struct runtime_options *new_runtime_options;
off_t end_offset = sizeof(lispobj) +
sizeof(os_vm_offset_t) +
(RUNTIME_OPTIONS_WORDS * sizeof(size_t));
lseek(fd, -end_offset, SEEK_END);
- runtime_options = read_runtime_options(fd);
+
+ if (new_runtime_options = read_runtime_options(fd)) {
+ runtime_options = new_runtime_options;
+ }
}
/* Search 'filename' for an embedded core. An SBCL core has, at the
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)
* 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++;