X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3f5a22ee597719eb48bef0979b0628f7b76bfbe9..3d845df082d79ab89649c1a8829eea201ae01085:/src/mc/mc_checkpoint.cpp diff --git a/src/mc/mc_checkpoint.cpp b/src/mc/mc_checkpoint.cpp index 74c26ea9fd..8821fbb1ca 100644 --- a/src/mc/mc_checkpoint.cpp +++ b/src/mc/mc_checkpoint.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2008-2014. The SimGrid Team. +/* Copyright (c) 2008-2015. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -36,6 +36,10 @@ #include "mc_smx.h" #include "mc_hash.hpp" +#include "mc/ObjectInformation.hpp" +#include "mc/Frame.hpp" +#include "mc/Variable.hpp" + using simgrid::mc::remote; extern "C" { @@ -46,22 +50,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_checkpoint, mc, /************************************ Free functions **************************************/ /*****************************************************************************************/ -static void MC_snapshot_stack_free_voidp(void *s) -{ - mc_snapshot_stack_t stack = (mc_snapshot_stack_t) * (void **) s; - delete stack; -} - -static void local_variable_free_voidp(void *v) -{ - local_variable_t var = *(local_variable_t*)v; - delete var; -} - -} - -extern "C" { - /** @brief Restore a region from a snapshot * * @param reg Target region @@ -95,6 +83,7 @@ static void MC_region_restore(mc_mem_region_t region) namespace simgrid { namespace mc { +#ifdef HAVE_SMPI simgrid::mc::RegionSnapshot privatized_region( RegionType region_type, void *start_addr, void* permanent_addr, size_t size ) @@ -124,6 +113,7 @@ simgrid::mc::RegionSnapshot privatized_region( region.privatized_data(std::move(data)); return std::move(region); } +#endif } } @@ -132,7 +122,7 @@ extern "C" { static void MC_snapshot_add_region(int index, mc_snapshot_t snapshot, simgrid::mc::RegionType type, - mc_object_info_t object_info, + simgrid::mc::ObjectInformation* object_info, void *start_addr, void* permanent_addr, size_t size) { if (type == simgrid::mc::RegionType::Data) @@ -140,12 +130,14 @@ static void MC_snapshot_add_region(int index, mc_snapshot_t snapshot, else if (type == simgrid::mc::RegionType::Heap) xbt_assert(!object_info, "Unexpected object info for heap region."); - const bool privatization_aware = object_info && object_info->privatized(); - simgrid::mc::RegionSnapshot region; + +#ifdef HAVE_SMPI + const bool privatization_aware = object_info && object_info->privatized(); if (privatization_aware && MC_smpi_process_count()) region = simgrid::mc::privatized_region(type, start_addr, permanent_addr, size); else +#endif region = simgrid::mc::region(type, start_addr, permanent_addr, size); region.object_info(object_info); @@ -155,7 +147,7 @@ static void MC_snapshot_add_region(int index, mc_snapshot_t snapshot, return; } -static void MC_get_memory_regions(mc_process_t process, mc_snapshot_t snapshot) +static void MC_get_memory_regions(simgrid::mc::Process* process, mc_snapshot_t snapshot) { const size_t n = process->object_infos.size(); snapshot->snapshot_regions.resize(n + 1); @@ -197,7 +189,7 @@ static void MC_get_memory_regions(mc_process_t process, mc_snapshot_t snapshot) * `dl_iterate_phdr` would be more robust but would not work in cross-process. * */ void MC_find_object_address( - std::vector const& maps, mc_object_info_t result) + std::vector const& maps, simgrid::mc::ObjectInformation* result) { const char* file_name = xbt_strdup(result->file_name.c_str()); const char *name = basename(file_name); @@ -261,7 +253,7 @@ void MC_find_object_address( * \param ip Instruction pointer * \return true if the variable is valid * */ -static bool mc_valid_variable(mc_variable_t var, mc_frame_t scope, +static bool mc_valid_variable(simgrid::mc::Variable* var, simgrid::mc::Frame* scope, const void *ip) { // The variable is not yet valid: @@ -272,10 +264,10 @@ static bool mc_valid_variable(mc_variable_t var, mc_frame_t scope, } static void mc_fill_local_variables_values(mc_stack_frame_t stack_frame, - mc_frame_t scope, int process_index, + simgrid::mc::Frame* scope, int process_index, std::vector& result) { - mc_process_t process = &mc_model_checker->process(); + simgrid::mc::Process* process = &mc_model_checker->process(); void *ip = (void *) stack_frame->ip; if (ip < scope->low_pc || ip >= scope->high_pc) @@ -352,7 +344,7 @@ static void MC_stack_frame_free_voipd(void *s) static std::vector MC_unwind_stack_frames(mc_unw_context_t stack_context) { - mc_process_t process = &mc_model_checker->process(); + simgrid::mc::Process* process = &mc_model_checker->process(); std::vector result; unw_cursor_t c; @@ -379,7 +371,7 @@ static std::vector MC_unwind_stack_frames(mc_unw_context_t s // TODO, use real addresses in frame_t instead of fixing it here - mc_frame_t frame = process->find_function(remote(ip)); + simgrid::mc::Frame* frame = process->find_function(remote(ip)); stack_frame.frame = frame; if (frame) { @@ -547,8 +539,10 @@ static std::vector MC_get_current_fds(pid_t pid) } link[res] = '\0'; +#ifdef HAVE_SMPI if(smpi_is_privatisation_file(link)) continue; +#endif // This is (probably) the DIR* we are reading: // TODO, read all the file entries at once and close the DIR.* @@ -585,7 +579,7 @@ mc_snapshot_t MC_take_snapshot(int num_state) { XBT_DEBUG("Taking snapshot %i", num_state); - mc_process_t mc_process = &mc_model_checker->process(); + simgrid::mc::Process* mc_process = &mc_model_checker->process(); mc_snapshot_t snapshot = new simgrid::mc::Snapshot();