Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] OOify mc_find_frame_base()
[simgrid.git] / src / mc / mc_checkpoint.cpp
index aadcea8..746d20b 100644 (file)
@@ -50,18 +50,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_checkpoint, mc,
 /************************************  Free functions **************************************/
 /*****************************************************************************************/
 
-int MC_important_snapshot(mc_snapshot_t snapshot)
-{
-  // We need this snapshot in order to know which
-  // pages needs to be stored in the next snapshot.
-  // This field is only non-NULL when using soft-dirty
-  // page tracking.
-  if (snapshot == mc_model_checker->parent_snapshot_)
-    return true;
-
-  return false;
-}
-
 /** @brief Restore a region from a snapshot
  *
  *  @param reg     Target region
@@ -317,22 +305,17 @@ static void mc_fill_local_variables_values(mc_stack_frame_t stack_frame,
     if (current_variable.address != NULL) {
       new_var.address = current_variable.address;
     } else if (!current_variable.location_list.empty()) {
-      s_mc_location_t location;
-      mc_dwarf_resolve_locations(
-        &location, &current_variable.location_list,
-        current_variable.object_info,
-        &(stack_frame->unw_cursor),
-        (void *) stack_frame->frame_base,
-        &mc_model_checker->process(), process_index);
-
-      switch(mc_get_location_type(&location)) {
-      case MC_LOCATION_TYPE_ADDRESS:
-        new_var.address = location.memory_location;
-        break;
-      case MC_LOCATION_TYPE_REGISTER:
-      default:
+      simgrid::dwarf::Location location =
+        simgrid::dwarf::resolve(
+          current_variable.location_list,
+          current_variable.object_info,
+          &(stack_frame->unw_cursor),
+          (void *) stack_frame->frame_base,
+          &mc_model_checker->process(), process_index);
+
+      if (!location.in_memory())
         xbt_die("Cannot handle non-address variable");
-      }
+      new_var.address = location.address();
 
     } else {
       xbt_die("No address");
@@ -397,7 +380,7 @@ static std::vector<s_mc_stack_frame_t> MC_unwind_stack_frames(mc_unw_context_t s
       if (frame) {
         stack_frame.frame_name = frame->name;
         stack_frame.frame_base =
-            (unw_word_t) mc_find_frame_base(frame, frame->object_info, &c);
+            (unw_word_t) frame->frame_base(c);
       } else {
         stack_frame.frame_base = 0;
         stack_frame.frame_name = std::string();