Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of https://github.com/Onesphore/simgrid into Onesphore-master
[simgrid.git] / src / mc / remote / RemoteClient.cpp
index d243abb..a399e33 100644 (file)
@@ -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 <cerrno>
 #include <cstddef>
 #include <cstdint>
-#include <regex>
 #include <string>
 #include <vector>
 
@@ -36,8 +35,8 @@
 #include <xbt/mmalloc.h>
 
 #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<std::string> filtered_libraries = {
     "libboost_context-mt",
     "libboost_system",
     "libboost_thread",
+    "libboost_unit_test_framework",
     "libc",
     "libc++",
     "libcdt",
@@ -86,6 +86,9 @@ static const std::vector<std::string> filtered_libraries = {
     "libelf",
     "libevent",
     "libgcc_s",
+    "libimf",
+    "libintlc",
+    "libirng",
     "liblua5.1",
     "liblua5.3",
     "liblzma",
@@ -93,6 +96,7 @@ static const std::vector<std::string> 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]*$");
-  static const std::regex version_re("-[.0-9-]*$");
-  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<char> address) const
   if (not address)
     return {};
 
-  // TODO, use std::vector with .data() in C++17 to avoid useless copies
   std::vector<char> res(128);
   off_t off = 0;
 
@@ -441,7 +447,7 @@ const void* RemoteClient::read_bytes(void* buffer, std::size_t size, RemotePtr<v
                                      ReadOptions options) const
 {
   if (process_index != simgrid::mc::ProcessIndexDisabled) {
-    std::shared_ptr<simgrid::mc::ObjectInformation> const& info = this->find_object_info_rw((void*)address.address());
+    std::shared_ptr<simgrid::mc::ObjectInformation> 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;
 }
 }
 }