/** @brief Like pread() but without partial reads */
static size_t pread_whole(int fd, void* buf, size_t count, off_t offset) {
- size_t res;
+ size_t res = 0;
char* data = (char*) buf;
while(count) {
size_t bytesize = sizeof(uint64_t) * page_count;
off_t offset = sizeof(uint64_t) * page_start;
if (pread_whole(mc_model_checker->fd_pagemap, pagemap, bytesize, offset) != bytesize) {
- xbt_die("Coult not read pagemap");
+ xbt_die("Could not read pagemap");
}
}
uint64_t* pagemap = NULL;
if (mc_model_checker->parent_snapshot) {
pagemap = (uint64_t*) alloca(sizeof(uint64_t) * page_count);
- mc_read_pagemap(pagemap, mc_page_number(start_addr), page_count);
+ mc_read_pagemap(pagemap, mc_page_number(NULL, start_addr), page_count);
}
// Take incremental snapshot:
- new_reg->page_numbers = mc_take_page_snapshot_region(start_addr, page_count, pagemap, ref_reg->page_numbers);
+ new_reg->page_numbers = mc_take_page_snapshot_region(start_addr, page_count, pagemap,
+ ref_reg==NULL ? NULL : ref_reg->page_numbers);
return new_reg;
}
// Read soft-dirty bits if necessary in order to know which pages have changed:
if (mc_model_checker->parent_snapshot) {
pagemap = (uint64_t*) alloca(sizeof(uint64_t) * page_count);
- mc_read_pagemap(pagemap, mc_page_number(reg->start_addr), page_count);
+ mc_read_pagemap(pagemap, mc_page_number(NULL, reg->start_addr), page_count);
}
// Incremental per-page snapshot restoration: