Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] mremap does not like MAP_PRIVATE|MAP_ANONYMOUS regions
[simgrid.git] / src / mc / mc_page_snapshot.cpp
index 245fc13..b7b752c 100644 (file)
@@ -57,7 +57,7 @@ void mc_restore_page_snapshot_region(mc_mem_region_t region, size_t page_count,
 
 /** @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) {
@@ -122,7 +122,7 @@ static void mc_read_pagemap(uint64_t* pagemap, size_t page_start, size_t page_co
   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");
   }
 }
 
@@ -144,11 +144,12 @@ mc_mem_region_t mc_region_new_sparse(int type, void *start_addr, size_t size, mc
   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;
 }
@@ -164,7 +165,7 @@ void mc_region_restore_sparse(mc_mem_region_t reg, mc_mem_region_t ref_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: