X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/679aea4811f683bfa2820872cd147d31b53d0d7f..564a883b3d816d2c5d227f5311d248ef799b5190:/src/mc/Process.cpp diff --git a/src/mc/Process.cpp b/src/mc/Process.cpp index 95187eeb30..2e510676db 100644 --- a/src/mc/Process.cpp +++ b/src/mc/Process.cpp @@ -8,7 +8,6 @@ #include #include -#include #include #include @@ -25,6 +24,9 @@ #include #include +#include +#include +#include #include #include "src/mc/mc_object_info.h" @@ -104,7 +106,7 @@ static char* MC_get_lib_name(const char* pathname, struct s_mc_memory_map_re* re regmatch_t match; if(regexec(&res->so_re, map_basename, 1, &match, 0)) - return NULL; + return nullptr; char* libname = strndup(map_basename, match.rm_so); @@ -166,7 +168,7 @@ static void MC_zero_buffer_init(void) int fd = open("/dev/zero", O_RDONLY); if (fd<0) xbt_die("Could not open /dev/zero"); - zero_buffer = mmap(NULL, zero_buffer_size, PROT_READ, MAP_SHARED, fd, 0); + zero_buffer = mmap(nullptr, zero_buffer_size, PROT_READ, MAP_SHARED, fd, 0); if (zero_buffer == MAP_FAILED) xbt_die("Could not map the zero buffer"); close(fd); @@ -256,11 +258,11 @@ Process::~Process() unw_destroy_addr_space(this->unw_underlying_addr_space); _UPT_destroy(this->unw_underlying_context); } - this->unw_underlying_context = NULL; - this->unw_underlying_addr_space = NULL; + this->unw_underlying_context = nullptr; + this->unw_underlying_addr_space = nullptr; unw_destroy_addr_space(this->unw_addr_space); - this->unw_addr_space = NULL; + this->unw_addr_space = nullptr; this->cache_flags = MC_PROCESS_CACHE_FLAG_NONE; @@ -312,8 +314,8 @@ void Process::init_memory_map_info() this->maestro_stack_start_ = nullptr; this->maestro_stack_end_ = nullptr; this->object_infos.resize(0); - this->binary_info = NULL; - this->libsimgrid_info = NULL; + this->binary_info = nullptr; + this->libsimgrid_info = nullptr; struct s_mc_memory_map_re res; @@ -322,7 +324,7 @@ void Process::init_memory_map_info() std::vector const& maps = this->memory_map_; - const char* current_name = NULL; + const char* current_name = nullptr; this->object_infos.resize(0); @@ -332,7 +334,7 @@ void Process::init_memory_map_info() // Nothing to do if (maps[i].pathname.empty()) { - current_name = NULL; + current_name = nullptr; continue; } @@ -342,7 +344,7 @@ void Process::init_memory_map_info() this->maestro_stack_start_ = remote(reg.start_addr); this->maestro_stack_end_ = remote(reg.end_addr); } - current_name = NULL; + current_name = nullptr; continue; } @@ -354,7 +356,7 @@ void Process::init_memory_map_info() continue; const bool is_executable = !i; - char* libname = NULL; + char* libname = nullptr; if (!is_executable) { libname = MC_get_lib_name(pathname, &res); if(!libname) @@ -388,7 +390,7 @@ void Process::init_memory_map_info() XBT_DEBUG("Get debug information done !"); } -std::shared_ptr Process::find_object_info(remote_ptr addr) const +std::shared_ptr Process::find_object_info(RemotePtr addr) const { for (auto const& object_info : this->object_infos) { if (addr.address() >= (std::uint64_t)object_info->start @@ -396,10 +398,10 @@ std::shared_ptr Process::find_object_info(remote return object_info; } } - return NULL; + return nullptr; } -std::shared_ptr Process::find_object_info_exec(remote_ptr addr) const +std::shared_ptr Process::find_object_info_exec(RemotePtr addr) const { for (std::shared_ptr const& info : this->object_infos) { if (addr.address() >= (std::uint64_t) info->start_exec @@ -410,7 +412,7 @@ std::shared_ptr Process::find_object_info_exec(remote_ptr Process::find_object_info_rw(remote_ptr addr) const +std::shared_ptr Process::find_object_info_rw(RemotePtr addr) const { for (std::shared_ptr const& info : this->object_infos) { if (addr.address() >= (std::uint64_t)info->start_rw @@ -421,7 +423,7 @@ std::shared_ptr Process::find_object_info_rw(remote_ptr return nullptr; } -simgrid::mc::Frame* Process::find_function(remote_ptr ip) const +simgrid::mc::Frame* Process::find_function(RemotePtr ip) const { std::shared_ptr info = this->find_object_info_exec(ip); return info ? info->find_function((void*) ip.address()) : nullptr; @@ -448,7 +450,7 @@ simgrid::mc::Variable* Process::find_variable(const char* name) const return var; } - return NULL; + return nullptr; } void Process::read_variable(const char* name, void* target, size_t size) const @@ -464,10 +466,10 @@ void Process::read_variable(const char* name, void* target, size_t size) const this->read_bytes(target, size, remote(var->address)); } -char* Process::read_string(remote_ptr address) const +char* Process::read_string(RemotePtr address) const { if (!address) - return NULL; + return nullptr; off_t len = 128; char* res = (char*) malloc(len); @@ -497,7 +499,7 @@ char* Process::read_string(remote_ptr address) const } const void *Process::read_bytes(void* buffer, std::size_t size, - remote_ptr address, int process_index, + RemotePtr address, int process_index, ReadOptions options) const { if (process_index != simgrid::mc::ProcessIndexDisabled) { @@ -539,13 +541,13 @@ const void *Process::read_bytes(void* buffer, std::size_t size, * @param remote target process memory address (target) * @param len data size */ -void Process::write_bytes(const void* buffer, size_t len, remote_ptr address) +void Process::write_bytes(const void* buffer, size_t len, RemotePtr address) { if (pwrite_whole(this->memory_file, buffer, len, address.address()) < 0) xbt_die("Write to process %lli failed", (long long) this->pid_); } -void Process::clear_bytes(remote_ptr address, size_t len) +void Process::clear_bytes(RemotePtr address, size_t len) { pthread_once(&zero_buffer_flag, MC_zero_buffer_init); while (len) { @@ -699,5 +701,12 @@ void Process::ignore_local_variable(const char *var_name, const char *frame_name info->remove_local_variable(var_name, frame_name); } +boost::iterator_range Process::simix_processes() +{ + xbt_assert(mc_mode != MC_MODE_CLIENT); + MC_process_smx_refresh(&mc_model_checker->process()); + return simgrid::xbt::range(smx_process_infos); +} + } }