X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ba9a4cfeba4eb00e84cd17603fc9654e81445655..cf71783d4bf34090b9ba489365fcf85b22b04e50:/src/mc/Process.cpp diff --git a/src/mc/Process.cpp b/src/mc/Process.cpp index 482c07d1a3..5360933c4a 100644 --- a/src/mc/Process.cpp +++ b/src/mc/Process.cpp @@ -232,8 +232,8 @@ void Process::init() remote(std_heap_var->address), simgrid::mc::ProcessIndexDisabled); - this->smx_process_infos = MC_smx_process_info_list_new(); - this->smx_old_process_infos = MC_smx_process_info_list_new(); + 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_); @@ -247,9 +247,6 @@ Process::~Process() this->maestro_stack_start_ = nullptr; this->maestro_stack_end_ = nullptr; - xbt_dynar_free(&this->smx_process_infos); - xbt_dynar_free(&this->smx_old_process_infos); - if (this->memory_file >= 0) { close(this->memory_file); } @@ -390,7 +387,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 @@ -401,7 +398,7 @@ std::shared_ptr Process::find_object_info(remote 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 @@ -412,7 +409,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 @@ -423,7 +420,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; @@ -466,7 +463,7 @@ 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 nullptr; @@ -499,7 +496,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) { @@ -541,13 +538,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) { @@ -701,5 +698,12 @@ void Process::ignore_local_variable(const char *var_name, const char *frame_name info->remove_local_variable(var_name, frame_name); } +std::vector& Process::simix_processes() +{ + xbt_assert(mc_mode != MC_MODE_CLIENT); + MC_process_smx_refresh(&mc_model_checker->process()); + return smx_process_infos; +} + } }