X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2b0d4aa36f4ef3a0e253b6104b317b5737e075e8..0eead244337fde8f0508629f8f8473f946c19f88:/src/mc/Process.cpp diff --git a/src/mc/Process.cpp b/src/mc/Process.cpp index de390cd39c..663e4866d1 100644 --- a/src/mc/Process.cpp +++ b/src/mc/Process.cpp @@ -55,36 +55,50 @@ namespace mc { #define SO_RE "\\.so[\\.0-9]*$" #define VERSION_RE "-[\\.0-9-]*$" -// In lexicographic order (but this is currently not used in the code): -static const char *const filtered_libraries[] = { - "ld", - "libbz2", - "libboost_chrono", - "libboost_context", - "libboost_system", - "libboost_thread", - "libc", - "libc++", - "libcdt", - "libcgraph", - "libdl", - "libdw", - "libelf", - "libgcc_s", - "liblua5.1", - "liblua5.3", - "liblzma", - "libm", - "libpthread", - "librt", - "libsigc", - "libstdc++", - "libunwind", - "libunwind-x86_64", - "libunwind-x86", - "libunwind-ptrace", - "libz" -}; +// List of library which memory segments are not considered: +static const char* const filtered_libraries[] = { +#ifdef __linux__ + "ld", +#elif defined __FreeBSD__ + "ld-elf", + "ld-elf32", + "libkvm", /* kernel data access library */ + "libprocstat", /* process and file information retrieval */ + "libthr", /* thread library */ + "libutil", +#endif + "libasan", /* gcc sanitizers */ + "libargp", /* workarounds for glibc-less systems */ + "libtsan", + "libubsan", + "libbz2", + "libboost_chrono", + "libboost_context", + "libboost_context-mt", + "libboost_system", + "libboost_thread", + "libc", + "libc++", + "libcdt", + "libcgraph", + "libcxxrt", + "libdl", + "libdw", + "libelf", + "libevent", + "libgcc_s", + "liblua5.1", + "liblua5.3", + "liblzma", + "libm", + "libpthread", + "librt", + "libstdc++", + "libunwind", + "libunwind-x86_64", + "libunwind-x86", + "libunwind-ptrace", + "libz"}; static bool is_simgrid_lib(const char* libname) { @@ -242,7 +256,7 @@ Process::~Process() /** Refresh the information about the process * - * Do not use direclty, this is used by the getters when appropriate + * Do not use directly, this is used by the getters when appropriate * in order to have fresh data. */ void Process::refresh_heap() @@ -346,7 +360,7 @@ void Process::init_memory_map_info() regfree(&res.so_re); regfree(&res.version_re); - // Resolve time (including accross differents objects): + // Resolve time (including across different objects): for (auto const& object_info : this->object_infos) postProcessObjectInformation(this, object_info.get()); @@ -389,14 +403,14 @@ simgrid::mc::Frame* Process::find_function(RemotePtr ip) const return info ? info->find_function((void*) ip.address()) : nullptr; } -/** Find (one occurence of) the named variable definition +/** Find (one occurrence of) the named variable definition */ simgrid::mc::Variable* Process::find_variable(const char* name) const { // First lookup the variable in the executable shared object. // A global variable used directly by the executable code from a library // is reinstanciated in the executable memory .data/.bss. - // We need to look up the variable in the execvutable first. + // We need to look up the variable in the executable first. if (this->binary_info) { std::shared_ptr const& info = this->binary_info; simgrid::mc::Variable* var = info->find_variable(name); @@ -426,11 +440,12 @@ void Process::read_variable(const char* name, void* target, size_t size) const this->read_bytes(target, size, remote(var->address)); } -std::string Process::read_string(RemotePtr address) const +std::string Process::read_string(RemotePtr address) const { if (!address) return {}; + // TODO, use std::vector with .data() in C++17 to avoid useless copies std::vector res(128); off_t off = 0; @@ -479,7 +494,7 @@ const void *Process::read_bytes(void* buffer, std::size_t size, mc_model_checker->process().read( remote(remote_smpi_privatisation_regions + process_index)); - // Address translation in the privaization segment: + // Address translation in the privatization segment: size_t offset = address.address() - (std::uint64_t)info->start_rw; address = remote((char*)privatisation_region.address + offset); } @@ -646,7 +661,7 @@ std::vector& Process::old_simix_processes( void Process::dumpStack() { - unw_addr_space_t as = unw_create_addr_space(&_UPT_accessors, __BYTE_ORDER); + unw_addr_space_t as = unw_create_addr_space(&_UPT_accessors, BYTE_ORDER); if (as == nullptr) { XBT_ERROR("Could not initialize ptrace address space"); return;