X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c30af81e2d4c73ccdc758a06f9b154cff0ab857b..2d2995483b57463581ffdc4365fe1999ddc306c2:/src/mc/remote/RemoteClient.cpp diff --git a/src/mc/remote/RemoteClient.cpp b/src/mc/remote/RemoteClient.cpp index 32be2092c8..a399e33ec8 100644 --- a/src/mc/remote/RemoteClient.cpp +++ b/src/mc/remote/RemoteClient.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2014-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2014-2018. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -10,7 +10,6 @@ #include #include #include -#include #include #include @@ -36,8 +35,8 @@ #include #include "src/mc/mc_smx.hpp" -#include "src/mc/mc_snapshot.hpp" #include "src/mc/mc_unw.hpp" +#include "src/mc/sosp/mc_snapshot.hpp" #include "src/mc/AddressSpace.hpp" #include "src/mc/ObjectInformation.hpp" @@ -75,6 +74,7 @@ static const std::vector filtered_libraries = { "libboost_context-mt", "libboost_system", "libboost_thread", + "libboost_unit_test_framework", "libc", "libc++", "libcdt", @@ -86,6 +86,9 @@ static const std::vector filtered_libraries = { "libelf", "libevent", "libgcc_s", + "libimf", + "libintlc", + "libirng", "liblua5.1", "liblua5.3", "liblzma", @@ -93,6 +96,7 @@ static const std::vector filtered_libraries = { "libpthread", "librt", "libstdc++", + "libsvml", "libunwind", "libunwind-x86_64", "libunwind-x86", @@ -111,18 +115,21 @@ static bool is_filtered_lib(const std::string& libname) static std::string get_lib_name(const std::string& pathname) { - static const std::regex so_re("\\.so[\\.0-9]*$", std::regex_constants::basic); - static const std::regex version_re("-[\\.0-9-]*$", std::regex_constants::basic); - std::string map_basename = simgrid::xbt::Path(pathname).getBasename(); + std::string map_basename = simgrid::xbt::Path(pathname).get_base_name(); std::string libname; - std::smatch match; - if (std::regex_search(map_basename, match, so_re)) { - libname = match.prefix(); - - // Strip the version suffix: - if (std::regex_search(libname, match, version_re)) - libname = match.prefix(); + size_t pos = map_basename.rfind(".so"); + if (pos != std::string::npos) { + // strip the extension (matching regex "\.so.*$") + libname.assign(map_basename, 0, pos); + + // strip the version suffix (matching regex "-[.0-9-]*$") + while (true) { + pos = libname.rfind('-'); + if (pos == std::string::npos || libname.find_first_not_of(".0123456789", pos + 1) != std::string::npos) + break; + libname.erase(pos); + } } return libname; @@ -412,7 +419,6 @@ std::string RemoteClient::read_string(RemotePtr address) const if (not address) return {}; - // TODO, use std::vector with .data() in C++17 to avoid useless copies std::vector res(128); off_t off = 0; @@ -441,7 +447,7 @@ const void* RemoteClient::read_bytes(void* buffer, std::size_t size, RemotePtr const& info = this->find_object_info_rw((void*)address.address()); + std::shared_ptr const& info = this->find_object_info_rw(address); // Segment overlap is not handled. #if HAVE_SMPI if (info.get() && this->privatized(*info)) { @@ -583,10 +589,7 @@ void RemoteClient::unignore_heap(void* address, size_t size) while (start <= end) { cursor = (start + end) / 2; auto& region = ignored_heap_[cursor]; - if (region.address == address) { - ignored_heap_.erase(ignored_heap_.begin() + cursor); - return; - } else if (region.address < address) + if (region.address < address) start = cursor + 1; else if ((char*)region.address <= ((char*)address + size)) { ignored_heap_.erase(ignored_heap_.begin() + cursor); @@ -646,17 +649,16 @@ void RemoteClient::dumpStack() _UPT_destroy(context); unw_destroy_addr_space(as); - return; } bool RemoteClient::actor_is_enabled(aid_t pid) { - s_mc_message_actor_enabled msg{MC_MESSAGE_ACTOR_ENABLED, pid}; + s_mc_message_actor_enabled_t msg{MC_MESSAGE_ACTOR_ENABLED, pid}; process()->getChannel().send(msg); char buff[MC_MESSAGE_LENGTH]; ssize_t received = process()->getChannel().receive(buff, MC_MESSAGE_LENGTH, true); - xbt_assert(received == sizeof(s_mc_message_int), "Unexpected size in answer to ACTOR_ENABLED"); - return ((mc_message_int_t*)buff)->value; + xbt_assert(received == sizeof(s_mc_message_int_t), "Unexpected size in answer to ACTOR_ENABLED"); + return ((s_mc_message_int_t*)buff)->value; } } }