3 #include "src/mc/Session.hpp"
4 #include "src/mc/mc_private.hpp"
5 #include "src/mc/remote/RemoteSimulation.hpp"
6 #include "src/mc/mc_smx.hpp"
8 #include <xbt/asserts.h>
11 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_api, mc, "Logging specific to MC Fasade APIs ");
16 void mc_api::initialize(char** argv)
18 simgrid::mc::session = new simgrid::mc::Session([argv] {
20 while (argv[i] != nullptr && argv[i][0] == '-')
22 xbt_assert(argv[i] != nullptr,
23 "Unable to find a binary to exec on the command line. Did you only pass config flags?");
24 execvp(argv[i], argv + i);
25 xbt_die("The model-checked process failed to exec(): %s", strerror(errno));
29 void mc_api::s_initialize() const
31 session->initialize();
34 void mc_api::create_model_checker(std::unique_ptr<RemoteSimulation> remote_simulation, int sockfd)
39 ModelChecker* mc_api::get_model_checker() const
41 return mc_model_checker;
44 void mc_api::mc_inc_visited_states() const
46 mc_model_checker->visited_states++;
49 void mc_api::mc_inc_executed_trans() const
51 mc_model_checker->executed_transitions++;
54 unsigned long mc_api::mc_get_visited_states() const
56 return mc_model_checker->visited_states;
59 unsigned long mc_api::mc_get_executed_trans() const
61 return mc_model_checker->executed_transitions;
64 bool mc_api::mc_check_deadlock() const
66 return mc_model_checker->checkDeadlock();
69 void mc_api::mc_show_deadlock() const
74 smx_actor_t mc_api::mc_smx_simcall_get_issuer(s_smx_simcall const* req) const
76 return MC_smx_simcall_get_issuer(req);
79 std::vector<simgrid::mc::ActorInformation>& mc_api::get_actors() const
81 return mc_model_checker->get_remote_simulation().actors();
84 bool mc_api::actor_is_enabled(aid_t pid) const
86 return session->actor_is_enabled(pid);
89 void mc_api::mc_assert(bool notNull, const char* message) const
92 xbt_assert(mc_model_checker == nullptr, message);
94 xbt_assert(mc_model_checker != nullptr, message);
97 bool mc_api::mc_is_null() const
99 auto is_null = (mc_model_checker == nullptr) ? true : false;
103 Checker* mc_api::mc_get_checker() const
105 return mc_model_checker->getChecker();
108 RemoteSimulation& mc_api::mc_get_remote_simulation() const
110 return mc_model_checker->get_remote_simulation();
113 void mc_api::handle_simcall(Transition const& transition) const
115 mc_model_checker->handle_simcall(transition);
118 void mc_api::mc_wait_for_requests() const
120 mc_model_checker->wait_for_requests();
123 void mc_api::mc_exit(int status) const
125 mc_model_checker->exit(status);
128 std::string const& mc_api::mc_get_host_name(std::string const& hostname) const
130 return mc_model_checker->get_host_name(hostname);
133 PageStore& mc_api::mc_page_store() const
135 return mc_model_checker->page_store();
138 void mc_api::mc_cleanup()
142 bool mc_api::request_depend(smx_simcall_t req1, smx_simcall_t req2) const
144 return simgrid::mc::request_depend(req1, req2);
147 std::string mc_api::request_to_string(smx_simcall_t req, int value, RequestType request_type) const
149 return simgrid::mc::request_to_string(req, value, request_type).c_str();
152 const char * mc_api::simix_simcall_name(e_smx_simcall_t kind) const
154 return SIMIX_simcall_name(kind);
157 void mc_api::s_close() const
162 void mc_api::s_restore_initial_state() const
164 session->restore_initial_state();
167 void mc_api::execute(Transition const& transition)
169 session->execute(transition);
172 void mc_api::s_log_state() const
174 session->log_state();
178 } // namespace simgrid