Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Add remote_ptr for marking pointers-to/addresses-in the remote process
[simgrid.git] / src / mc / mc_page_snapshot.cpp
index a1948b2..5c02208 100644 (file)
@@ -7,13 +7,15 @@
 
 #include <unistd.h> // pread, pwrite
 
-#include "mc_page_store.h"
+#include "PageStore.hpp"
 #include "mc_mmu.h"
 #include "mc_private.h"
 #include "mc_snapshot.h"
 
 #include <xbt/mmalloc.h>
 
+using simgrid::mc::remote;
+
 extern "C" {
 
 // ***** Region management:
@@ -29,7 +31,7 @@ size_t* mc_take_page_snapshot_region(mc_process_t process,
 {
   size_t* pagenos = (size_t*) malloc(page_count * sizeof(size_t));
 
-  const bool is_self = MC_process_is_self(process);
+  const bool is_self = process->is_self();
 
   void* temp = NULL;
   if (!is_self)
@@ -53,10 +55,11 @@ size_t* mc_take_page_snapshot_region(mc_process_t process,
             - move the segments in shared memory (this will break `fork` however).
         */
         page_data = temp;
-        MC_process_read(process, MC_ADDRESS_SPACE_READ_FLAGS_NONE,
-          temp, page, xbt_pagesize, MC_PROCESS_INDEX_DISABLED);
+        process->read_bytes(
+          temp, xbt_pagesize, remote(page),
+          simgrid::mc::ProcessIndexDisabled);
       }
-      pagenos[i] = mc_model_checker->pages->store_page(page_data);
+      pagenos[i] = mc_model_checker->page_store().store_page(page_data);
 
   }
 
@@ -67,7 +70,7 @@ size_t* mc_take_page_snapshot_region(mc_process_t process,
 void mc_free_page_snapshot_region(size_t* pagenos, size_t page_count)
 {
   for (size_t i=0; i!=page_count; ++i) {
-    mc_model_checker->pages->unref_page(pagenos[i]);
+    mc_model_checker->page_store().unref_page(pagenos[i]);
   }
 }
 
@@ -86,7 +89,7 @@ void mc_restore_page_snapshot_region(mc_process_t process,
   for (size_t i=0; i!=page_count; ++i) {
     // Otherwise, copy the page:
     void* target_page = mc_page_from_number(start_addr, i);
-    const void* source_page = mc_model_checker->pages->get_page(pagenos[i]);
+    const void* source_page = mc_model_checker->page_store().get_page(pagenos[i]);
     MC_process_write(process, source_page, target_page, xbt_pagesize);
   }
 }
@@ -96,7 +99,7 @@ void mc_restore_page_snapshot_region(mc_process_t process,
 mc_mem_region_t mc_region_new_sparse(mc_region_type_t region_type,
   void *start_addr, void* permanent_addr, size_t size)
 {
-  mc_process_t process = &mc_model_checker->process;
+  mc_process_t process = &mc_model_checker->process();
 
   mc_mem_region_t region = xbt_new(s_mc_mem_region_t, 1);
   region->region_type = region_type;