Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
mc: Also remove the process_index
[simgrid.git] / src / mc / sosp / mc_snapshot.hpp
index c1d09df..52f8ac4 100644 (file)
@@ -22,8 +22,7 @@ static XBT_ALWAYS_INLINE void* mc_translate_address_region_chunked(uintptr_t add
   return (char*)snapshot_page + offset;
 }
 
-static XBT_ALWAYS_INLINE void* mc_translate_address_region(uintptr_t addr, simgrid::mc::RegionSnapshot* region,
-                                                           int process_index)
+static XBT_ALWAYS_INLINE void* mc_translate_address_region(uintptr_t addr, simgrid::mc::RegionSnapshot* region)
 {
   switch (region->storage_type()) {
     case simgrid::mc::StorageType::Flat: {
@@ -32,12 +31,6 @@ static XBT_ALWAYS_INLINE void* mc_translate_address_region(uintptr_t addr, simgr
     }
     case simgrid::mc::StorageType::Chunked:
       return mc_translate_address_region_chunked(addr, region);
-    case simgrid::mc::StorageType::Privatized: {
-      xbt_assert(process_index >= 0, "Missing process index for privatized region");
-      xbt_assert((size_t)process_index < region->privatized_data().size(), "Out of range process index");
-      simgrid::mc::RegionSnapshot* subregion = region->privatized_data()[process_index].get();
-      return mc_translate_address_region(addr, subregion, process_index);
-    }
     default: // includes StorageType::NoData
       xbt_die("Storage type not supported");
   }
@@ -81,7 +74,6 @@ struct XBT_PRIVATE s_mc_snapshot_stack_t {
   std::vector<s_local_variable_t> local_variables;
   simgrid::mc::UnwindContext context;
   std::vector<s_mc_stack_frame_t> stack_frames;
-  int process_index;
 };
 typedef s_mc_snapshot_stack_t* mc_snapshot_stack_t;
 
@@ -94,26 +86,30 @@ public:
   ~Snapshot() = default;
 
   /* Initialization */
-  void add_region(RegionType type, ObjectInformation* object_info, void* start_addr, void* permanent_addr,
-                  std::size_t size);
 
   /* Regular use */
-  const void* read_bytes(void* buffer, std::size_t size, RemotePtr<void> address, int process_index = ProcessIndexAny,
+  const void* read_bytes(void* buffer, std::size_t size, RemotePtr<void> address,
                          ReadOptions options = ReadOptions::none()) const override;
-  RegionSnapshot* get_region(const void* addr, int process_index) const;
-  RegionSnapshot* get_region(const void* addr, int process_index, RegionSnapshot* hinted_region) const;
+  RegionSnapshot* get_region(const void* addr) const;
+  RegionSnapshot* get_region(const void* addr, RegionSnapshot* hinted_region) const;
+  void restore(RemoteClient* process);
 
   // To be private
   int num_state_;
   std::size_t heap_bytes_used_;
   std::vector<std::unique_ptr<RegionSnapshot>> snapshot_regions_;
   std::set<pid_t> enabled_processes_;
-  int privatization_index_;
   std::vector<std::size_t> stack_sizes_;
   std::vector<s_mc_snapshot_stack_t> stacks_;
   std::vector<simgrid::mc::IgnoredHeapRegion> to_ignore_;
   std::uint64_t hash_ = 0;
   std::vector<s_mc_snapshot_ignored_data_t> ignored_data_;
+
+private:
+  void add_region(RegionType type, ObjectInformation* object_info, void* start_addr, void* permanent_addr,
+                  std::size_t size);
+  void snapshot_regions(simgrid::mc::RemoteClient* process);
+  void snapshot_stacks(simgrid::mc::RemoteClient* process);
 };
 } // namespace mc
 } // namespace simgrid
@@ -124,7 +120,6 @@ namespace simgrid {
 namespace mc {
 
 XBT_PRIVATE std::shared_ptr<Snapshot> take_snapshot(int num_state);
-XBT_PRIVATE void restore_snapshot(std::shared_ptr<Snapshot> snapshot);
 } // namespace mc
 } // namespace simgrid
 
@@ -174,9 +169,7 @@ static XBT_ALWAYS_INLINE const void* MC_region_read(simgrid::mc::RegionSnapshot*
     }
 
     default:
-      // includes StorageType::NoData and StorageType::Privatized (we currently do not pass the process_index to this
-      // function so we assume that the privatized region has been resolved in the callers)
-      xbt_die("Storage type not supported");
+      xbt_die("StorageType::NoData not supported");
   }
 }