X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/47f0168a8d8b7b257528283ca0e20e3b27d1ea4b..398f1a82c992764ca69db74edde82ad36a6b1277:/src/xbt/memory_map.cpp diff --git a/src/xbt/memory_map.cpp b/src/xbt/memory_map.cpp index b575f5e3ec..edba494696 100644 --- a/src/xbt/memory_map.cpp +++ b/src/xbt/memory_map.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2008-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2008-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. */ @@ -13,13 +13,13 @@ #include #if defined __APPLE__ +# include # include # include # include # include # include # include -# include # if __MAC_OS_X_VERSION_MIN_REQUIRED < 1050 # define mach_vm_address_t vm_address_t # define mach_vm_size_t vm_size_t @@ -46,15 +46,14 @@ # include #endif -#include +#include #include #include +#include #include "memory_map.hpp" -extern "C" { XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_memory_map, xbt, "Logging specific to algorithms for memory_map"); -} namespace simgrid { namespace xbt { @@ -146,21 +145,13 @@ XBT_PRIVATE std::vector get_memory_map(pid_t pid) memreg.inode = 0; /* Path */ - char path[MAXPATHLEN]; - int pathlen; - pathlen = proc_regionfilename(pid, address, path, sizeof(path)); - path[pathlen] = '\0'; - memreg.pathname = path; - -#if 0 /* Display mappings for debug */ - fprintf(stderr, - "%#014llx - %#014llx | %c%c%c | %s\n", - memreg.start_addr, memreg.end_addr, - (memreg.prot & PROT_READ) ? 'r' : '-', - (memreg.prot & PROT_WRITE) ? 'w' : '-', - (memreg.prot & PROT_EXEC) ? 'x' : '-', - memreg.pathname.c_str()); -#endif + Dl_info dlinfo; + if (dladdr(reinterpret_cast(address), &dlinfo)) + memreg.pathname = dlinfo.dli_fname; + + XBT_DEBUG("Region: %016" PRIx64 "-%016" PRIx64 " | %c%c%c | %s", memreg.start_addr, memreg.end_addr, + (memreg.prot & PROT_READ) ? 'r' : '-', (memreg.prot & PROT_WRITE) ? 'w' : '-', + (memreg.prot & PROT_EXEC) ? 'x' : '-', memreg.pathname.c_str()); ret.push_back(std::move(memreg)); address += size;