void CommunicationDeterminismChecker::get_comm_pattern(smx_simcall_t request, e_mc_call_type_t call_type,
int backtracking)
{
- const smx_actor_t issuer = MC_smx_simcall_get_issuer(request);
+ const smx_actor_t issuer = mcapi::get().mc_smx_simcall_get_issuer(request);
const mc::PatternCommunicationList& initial_pattern = initial_communications_pattern[issuer->get_pid()];
const std::vector<PatternCommunication*>& incomplete_pattern = incomplete_communications_pattern[issuer->get_pid()];
if (call_type == MC_CALL_TYPE_SEND) {
/* Create comm pattern */
pattern->type = PatternCommunicationType::send;
- pattern->comm_addr = static_cast<kernel::activity::CommImpl*>(simcall_comm_isend__getraw__result(request));
+ pattern->comm_addr = mcapi::get().get_pattern_comm_addr(request);
Remote<kernel::activity::CommImpl> temp_synchro;
mc_model_checker->get_remote_simulation().read(temp_synchro, remote(pattern->comm_addr));
char* remote_name = mc_model_checker->get_remote_simulation().read<char*>(RemotePtr<char*>(
(uint64_t)(synchro->get_mailbox() ? &synchro->get_mailbox()->name_ : &synchro->mbox_cpy->name_)));
- // pattern->rdv = mc_model_checker->get_remote_simulation().read_string(RemotePtr<char>(remote_name));
- pattern->rdv = mc_api::get().get_pattern_comm_rdv(pattern->comm_addr);
- pattern->src_proc =
- mc_model_checker->get_remote_simulation().resolve_actor(mc::remote(synchro->src_actor_.get()))->get_pid();
- pattern->src_host = MC_smx_actor_get_host_name(issuer);
+ pattern->rdv = mcapi::get().get_pattern_comm_rdv(pattern->comm_addr);
+ pattern->src_proc = mcapi::get().get_pattern_comm_src_proc(pattern->comm_addr);
+ pattern->src_host = mc_api::get().get_actor_host_name(issuer);
#if HAVE_SMPI
simgrid::smpi::Request mpi_request;
pattern->tag = mpi_request.tag();
#endif
- if (synchro->src_buff_ != nullptr) {
- pattern->data.resize(synchro->src_buff_size_);
- mc_model_checker->get_remote_simulation().read_bytes(pattern->data.data(), pattern->data.size(),
- remote(synchro->src_buff_));
+ // if (synchro->src_buff_ != nullptr) {
+ // pattern->data.resize(synchro->src_buff_size_);
+ // mc_model_checker->get_remote_simulation().read_bytes(pattern->data.data(), pattern->data.size(),
+ // remote(synchro->src_buff_));
+ // }
+
+ auto pattern_data = mcapi::get().get_pattern_comm_data(pattern->comm_addr);
+ if(pattern_data.data() != nullptr) {
+ auto data_size = pattern_data.size();
+ pattern->data.resize(data_size);
+ memcpy(pattern->data.data(), pattern_data.data(), data_size);
}
#if HAVE_SMPI
if(mpi_request.detached()){
for (auto const& state : stack_) {
smx_simcall_t req = &state->executed_req_;
if (req)
- trace.push_back(request_to_string(req, state->transition_.argument_, RequestType::executed));
+ trace.push_back(mcapi::get().request_to_string(req, state->transition_.argument_, RequestType::executed));
}
return trace;
}
MC_state_copy_index_communications_pattern((simgrid::mc::State*)state);
}
+kernel::activity::CommImpl* mc_api::get_pattern_comm_addr(smx_simcall_t request) const
+{
+ auto comm_addr = simcall_comm_isend__getraw__result(request);
+ return static_cast<kernel::activity::CommImpl*>(comm_addr);
+}
std::string mc_api::get_pattern_comm_rdv(void* addr) const
{
Remote<kernel::activity::CommImpl> temp_synchro;
return rdv;
}
+unsigned long mc_api::get_pattern_comm_src_proc(void* addr) const
+{
+ Remote<kernel::activity::CommImpl> temp_synchro;
+ mc_model_checker->get_remote_simulation().read(temp_synchro, remote((simgrid::kernel::activity::CommImpl*)addr));
+ const kernel::activity::CommImpl* synchro = temp_synchro.get_buffer();
+ auto src_proc = mc_model_checker->get_remote_simulation().resolve_actor(mc::remote(synchro->src_actor_.get()))->get_pid();
+ return src_proc;
+}
+
+std::vector<char> mc_api::get_pattern_comm_data(void* addr) const
+{
+ Remote<kernel::activity::CommImpl> temp_synchro;
+ mc_model_checker->get_remote_simulation().read(temp_synchro, remote((simgrid::kernel::activity::CommImpl*)addr));
+ const kernel::activity::CommImpl* synchro = temp_synchro.get_buffer();
+
+ std::vector<char> buffer {};
+ if (synchro->src_buff_ != nullptr) {
+ buffer.resize(synchro->src_buff_size_);
+ mc_model_checker->get_remote_simulation().read_bytes(buffer.data(), buffer.size(),
+ remote(synchro->src_buff_));
+ }
+ return buffer;
+}
+
+const char* mc_api::get_actor_host_name(smx_actor_t actor) const
+{
+ const char* host_name = MC_smx_actor_get_host_name(actor);
+ return host_name;
+}
+
std::size_t mc_api::get_remote_heap_bytes() const
{
RemoteSimulation& process = mc_model_checker->get_remote_simulation();
- auto heap_bytes_used = mmalloc_get_bytes_used_remote(process.get_heap()->heaplimit, process.get_malloc_info());
+ auto heap_bytes_used = mmalloc_get_bytes_used_remote(process.get_heap()->heaplimit, process.get_malloc_info());
return heap_bytes_used;
}