X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/864d17d38d2f5ffecea2c9104af9e538a25b56db..cbbb07080a0f34d57baf2bf136f0b17954947b89:/src/mc/Process.cpp diff --git a/src/mc/Process.cpp b/src/mc/Process.cpp index 1c003948d2..dd04f153ae 100644 --- a/src/mc/Process.cpp +++ b/src/mc/Process.cpp @@ -11,6 +11,10 @@ #include #include +#include + +#include + #include #include #include @@ -24,7 +28,6 @@ #include #include -#include #include #include #include @@ -226,9 +229,10 @@ void Process::init() this->smx_process_infos.clear(); this->smx_old_process_infos.clear(); - this->unw_addr_space = unw_create_addr_space(&mc_unw_accessors , __BYTE_ORDER); - this->unw_underlying_addr_space = unw_create_addr_space(&mc_unw_vmread_accessors, __BYTE_ORDER); - this->unw_underlying_context = _UPT_create(this->pid_); + this->unw_addr_space = simgrid::mc::UnwindContext::createUnwindAddressSpace(); + this->unw_underlying_addr_space = simgrid::unw::create_addr_space(); + this->unw_underlying_context = simgrid::unw::create_context( + this->unw_underlying_addr_space, this->pid_); } Process::~Process() @@ -256,7 +260,6 @@ Process::~Process() */ void Process::refresh_heap() { - xbt_assert(mc_mode == MC_MODE_SERVER); // Read/dereference/refresh the std_heap pointer: if (!this->heap) this->heap = std::unique_ptr(new s_xbt_mheap_t()); @@ -272,7 +275,6 @@ void Process::refresh_heap() * */ void Process::refresh_malloc_info() { - xbt_assert(mc_mode == MC_MODE_SERVER); // Refresh process->heapinfo: if (this->cache_flags_ & Process::cache_malloc) return; @@ -672,17 +674,45 @@ void Process::ignore_local_variable(const char *var_name, const char *frame_name std::vector& Process::simix_processes() { - xbt_assert(mc_mode != MC_MODE_CLIENT); this->refresh_simix(); return smx_process_infos; } std::vector& Process::old_simix_processes() { - xbt_assert(mc_mode != MC_MODE_CLIENT); this->refresh_simix(); return smx_old_process_infos; } +void Process::dumpStack() +{ + 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; + } + + void* context = _UPT_create(this->pid_); + if (context == nullptr) { + unw_destroy_addr_space(as); + XBT_ERROR("Could not initialize ptrace context"); + return; + } + + unw_cursor_t cursor; + if (unw_init_remote(&cursor, as, context) != 0) { + _UPT_destroy(context); + unw_destroy_addr_space(as); + XBT_ERROR("Could not initialiez ptrace cursor"); + return; + } + + simgrid::mc::dumpStack(stderr, cursor); + + _UPT_destroy(context); + unw_destroy_addr_space(as); + return; +} + } }