X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d656f9465e7b1c36319f86eeafdcec58fe9551a4..0e7d247670cc012d8e784d0c8bcbb70a1c0bb9c6:/src/mc/mc_checkpoint.cpp diff --git a/src/mc/mc_checkpoint.cpp b/src/mc/mc_checkpoint.cpp index abd51e2e77..9c531b373d 100644 --- a/src/mc/mc_checkpoint.cpp +++ b/src/mc/mc_checkpoint.cpp @@ -18,6 +18,7 @@ #include "src/internal_config.h" #include "src/mc/mc_private.hpp" #include "src/smpi/include/private.hpp" +#include "xbt/file.hpp" #include "xbt/mmalloc.h" #include "xbt/module.h" @@ -47,6 +48,12 @@ using simgrid::mc::remote; XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_checkpoint, mc, "Logging specific to mc_checkpoint"); +#define PROT_RWX (PROT_READ | PROT_WRITE | PROT_EXEC) +#define PROT_RW (PROT_READ | PROT_WRITE) +#define PROT_RX (PROT_READ | PROT_EXEC) +extern std::string _sg_mc_property_file; +extern std::string _sg_mc_dot_output_file; + namespace simgrid { namespace mc { @@ -138,7 +145,6 @@ void add_region(int index, simgrid::mc::Snapshot* snapshot, snapshot->snapshot_regions[index] = std::unique_ptr( new simgrid::mc::RegionSnapshot(std::move(region))); - return; } static void get_memory_regions(simgrid::mc::RemoteClient* process, simgrid::mc::Snapshot* snapshot) @@ -174,10 +180,6 @@ static void get_memory_regions(simgrid::mc::RemoteClient* process, simgrid::mc:: snapshot->privatization_index = simgrid::mc::ProcessIndexMissing; } -#define PROT_RWX (PROT_READ | PROT_WRITE | PROT_EXEC) -#define PROT_RW (PROT_READ | PROT_WRITE) -#define PROT_RX (PROT_READ | PROT_EXEC) - /** \brief Fills the position of the segments (executable, read-only, read/write). * */ // TODO, use the ELF segment information for more robustness @@ -185,18 +187,15 @@ void find_object_address( std::vector const& maps, simgrid::mc::ObjectInformation* result) { - char* name = xbt_basename(result->file_name.c_str()); + std::string name = simgrid::xbt::Path(result->file_name).getBasename(); for (size_t i = 0; i < maps.size(); ++i) { simgrid::xbt::VmMap const& reg = maps[i]; if (maps[i].pathname.empty()) continue; - char* map_basename = xbt_basename(maps[i].pathname.c_str()); - if (strcmp(name, map_basename) != 0) { - free(map_basename); + std::string map_basename = simgrid::xbt::Path(maps[i].pathname).getBasename(); + if (map_basename != name) continue; - } - free(map_basename); // This is the non-GNU_RELRO-part of the data segment: if (reg.prot == PROT_RW) { @@ -250,8 +249,6 @@ void find_object_address( result->end = result->end_exec; xbt_assert(result->start_exec || result->start_rw || result->start_ro); - - free(name); } /************************************* Take Snapshot ************************************/ @@ -522,12 +519,9 @@ static std::vector get_current_fds(pid_t pid) // If dot_output enabled, do not handle the corresponding file if (dot_output != nullptr) { - char* link_basename = xbt_basename(link); - if (strcmp(link_basename, _sg_mc_dot_output_file) == 0) { - free(link_basename); + std::string link_basename = simgrid::xbt::Path(link).getBasename(); + if (link_basename == _sg_mc_dot_output_file) continue; - } - free(link_basename); } // This is probably a shared memory used by lttng-ust: @@ -568,7 +562,7 @@ std::shared_ptr take_snapshot(int num_state) snapshot->to_ignore = mc_model_checker->process().ignored_heap(); - if (_sg_mc_max_visited_states > 0 || strcmp(_sg_mc_property_file, "")) { + if (_sg_mc_max_visited_states > 0 || not _sg_mc_property_file.empty()) { snapshot->stacks = take_snapshot_stacks(snapshot.get()); if (_sg_mc_hash) snapshot->hash = simgrid::mc::hash(*snapshot); @@ -593,7 +587,7 @@ void restore_snapshot_regions(simgrid::mc::Snapshot* snapshot) #if HAVE_SMPI if(snapshot->privatization_index >= 0) { // Fix the privatization mmap: - s_mc_message_restore message{MC_MESSAGE_RESTORE, snapshot->privatization_index}; + s_mc_message_restore_t message{MC_MESSAGE_RESTORE, snapshot->privatization_index}; mc_model_checker->process().getChannel().send(message); } #endif