-/* 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. */
#include <cerrno>
#include <cstddef>
#include <cstdint>
-#include <regex>
#include <string>
#include <vector>
"libelf",
"libevent",
"libgcc_s",
+ "libimf",
+ "libintlc",
+ "libirng",
"liblua5.1",
"liblua5.3",
"liblzma",
"libpthread",
"librt",
"libstdc++",
+ "libsvml",
"libunwind",
"libunwind-x86_64",
"libunwind-x86",
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-]*$");
+ constexpr char digits[] = ".0123456789";
std::string map_basename = simgrid::xbt::Path(pathname).getBasename();
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 && map_basename.find_first_not_of(digits, pos + 3) == std::string::npos) {
+ // strip the extension (matching regex "\.so[.0-9]*$")
+ 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(digits, pos + 1) != std::string::npos)
+ break;
+ libname.erase(pos);
+ }
}
return libname;
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;
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)) {
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);
_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;
}
}
}