#include <libunwind.h>
#include <libunwind-ptrace.h>
+#include <xbt/dynar.h>
+#include <xbt/log.h>
+#include <xbt/base.h>
#include <xbt/mmalloc.h>
#include "src/mc/mc_object_info.h"
count -= res;
buffer += res;
offset += res;
- } else if (res==0) {
+ } else if (res==0)
return -1;
- } else if (errno != EINTR) {
+ else if (errno != EINTR) {
perror("pread_whole");
return -1;
}
count -= res;
buffer += res;
offset += res;
- } else if (res==0) {
+ } else if (res==0)
return -1;
- } else if (errno != EINTR) {
+ else if (errno != EINTR)
return -1;
- }
}
return real_count;
}
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_);
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);
}
XBT_DEBUG("Get debug information done !");
}
-std::shared_ptr<simgrid::mc::ObjectInformation> Process::find_object_info(remote_ptr<void> addr) const
+std::shared_ptr<simgrid::mc::ObjectInformation> Process::find_object_info(RemotePtr<void> addr) const
{
- for (auto const& object_info : this->object_infos) {
+ for (auto const& object_info : this->object_infos)
if (addr.address() >= (std::uint64_t)object_info->start
- && addr.address() <= (std::uint64_t)object_info->end) {
+ && addr.address() <= (std::uint64_t)object_info->end)
return object_info;
- }
- }
return nullptr;
}
-std::shared_ptr<ObjectInformation> Process::find_object_info_exec(remote_ptr<void> addr) const
+std::shared_ptr<ObjectInformation> Process::find_object_info_exec(RemotePtr<void> addr) const
{
- for (std::shared_ptr<ObjectInformation> const& info : this->object_infos) {
+ for (std::shared_ptr<ObjectInformation> const& info : this->object_infos)
if (addr.address() >= (std::uint64_t) info->start_exec
- && addr.address() <= (std::uint64_t) info->end_exec) {
+ && addr.address() <= (std::uint64_t) info->end_exec)
return info;
- }
- }
return nullptr;
}
-std::shared_ptr<ObjectInformation> Process::find_object_info_rw(remote_ptr<void> addr) const
+std::shared_ptr<ObjectInformation> Process::find_object_info_rw(RemotePtr<void> addr) const
{
- for (std::shared_ptr<ObjectInformation> const& info : this->object_infos) {
+ for (std::shared_ptr<ObjectInformation> const& info : this->object_infos)
if (addr.address() >= (std::uint64_t)info->start_rw
- && addr.address() <= (std::uint64_t)info->end_rw) {
+ && addr.address() <= (std::uint64_t)info->end_rw)
return info;
- }
- }
return nullptr;
}
-simgrid::mc::Frame* Process::find_function(remote_ptr<void> ip) const
+simgrid::mc::Frame* Process::find_function(RemotePtr<void> ip) const
{
std::shared_ptr<simgrid::mc::ObjectInformation> info = this->find_object_info_exec(ip);
return info ? info->find_function((void*) ip.address()) : nullptr;
this->read_bytes(target, size, remote(var->address));
}
-char* Process::read_string(remote_ptr<void> address) const
+char* Process::read_string(RemotePtr<void> address) const
{
if (!address)
return nullptr;
}
const void *Process::read_bytes(void* buffer, std::size_t size,
- remote_ptr<void> address, int process_index,
+ RemotePtr<void> address, int process_index,
ReadOptions options) const
{
if (process_index != simgrid::mc::ProcessIndexDisabled) {
* @param remote target process memory address (target)
* @param len data size
*/
-void Process::write_bytes(const void* buffer, size_t len, remote_ptr<void> address)
+void Process::write_bytes(const void* buffer, size_t len, RemotePtr<void> 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<void> address, size_t len)
+void Process::clear_bytes(RemotePtr<void> address, size_t len)
{
pthread_once(&zero_buffer_flag, MC_zero_buffer_init);
while (len) {
std::size_t position;
if (current_region->addr == addr) {
- if (current_region->size < size) {
+ if (current_region->size < size)
position = cursor + 1;
- } else {
+ else
position = cursor;
- }
- } else if (current_region->addr < addr) {
+ } else if (current_region->addr < addr)
position = cursor + 1;
- } else {
+ else
position = cursor;
- }
ignored_regions_.insert(
ignored_regions_.begin() + position, region);
}
info->remove_local_variable(var_name, frame_name);
}
+std::vector<simgrid::mc::SimixProcessInformation>& Process::simix_processes()
+{
+ xbt_assert(mc_mode != MC_MODE_CLIENT);
+ MC_process_smx_refresh(&mc_model_checker->process());
+ return smx_process_infos;
+}
+
}
}