-mc_smx_process_info_t MC_smx_resolve_process_info(smx_process_t process_remote_address)
-{
- if (mc_mode == MC_MODE_CLIENT)
- xbt_die("No process_info for local process is not enabled.");
-
- unsigned index;
- mc_smx_process_info_t process_info;
- xbt_dynar_foreach_ptr(mc_model_checker->process().smx_process_infos, index, process_info)
- if (process_info->address == process_remote_address)
- return process_info;
- xbt_dynar_foreach_ptr(mc_model_checker->process().smx_old_process_infos, index, process_info)
- if (process_info->address == process_remote_address)
- return process_info;
- xbt_die("Process info not found");
-}
-
-const char* MC_smx_process_get_host_name(smx_process_t p)
-{
- if (mc_mode == MC_MODE_CLIENT)
- return sg_host_get_name(p->host);
-
- simgrid::mc::Process* process = &mc_model_checker->process();
-
- /* Horrible hack to find the offset of the id in the simgrid::s4u::Host.
-
- Offsetof is not supported for non-POD types but this should
- work in pratice for the targets currently supported by the MC
- as long as we do not add funny features to the Host class
- (such as virtual base).
-
- We are using a (C++11) unrestricted union in order to avoid
- any construction/destruction of the simgrid::s4u::Host.
- */
- union fake_host {
- simgrid::s4u::Host host;
- fake_host() {}
- ~fake_host() {}
- };
- fake_host foo;
- const size_t offset = (char*) &foo.host.name() - (char*) &foo.host;