X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;ds=sidebyside;f=model.h;h=5f389c5b9d245d359434772240e7212a27c7c8ba;hb=1a2fb82a5c26ec83fb05d0fa208662cf98f4758b;hp=58ee152aa7ce94c6ae84f7d14bdec5d6894447ce;hpb=99cf3d542dfda51e082db5058af0bf178ed9c464;p=model-checker.git diff --git a/model.h b/model.h index 58ee152..5f389c5 100644 --- a/model.h +++ b/model.h @@ -47,6 +47,15 @@ struct model_params { * expiration time exceeds the existing one by more than the slop * value */ unsigned int expireslop; + + /** @brief Verbosity (0 = quiet; 1 = noisy) */ + int verbose; + + /** @brief Command-line argument count to pass to user program */ + int argc; + + /** @brief Command-line arguments to pass to user program */ + char **argv; }; /** @brief Model checker execution stats */ @@ -55,6 +64,7 @@ struct execution_stats { int num_infeasible; /**< @brief Number of infeasible executions */ int num_buggy_executions; /** @brief Number of buggy executions */ int num_complete; /**< @brief Number of feasible, non-buggy, complete executions */ + int num_redundant; /**< @brief Number of redundant, aborted executions */ }; struct PendingFutureValue { @@ -81,11 +91,12 @@ public: ModelChecker(struct model_params params); ~ModelChecker(); + void run(); + /** @returns the context for the main model-checking system thread */ ucontext_t * get_system_context() { return &system_context; } - /** Prints an execution summary with trace information. */ - void print_summary(); + void print_summary() const; #if SUPPORT_MOD_ORDER_DUMP void dumpGraph(char *filename); #endif @@ -116,17 +127,14 @@ public: void finish_execution(); bool isfeasibleprefix() const; - void assert_bug(const char *msg, bool user_thread = false, bool immediate = false); - void assert_bug(bool user_thread = true); - void assert_bug_immediate(const char *msg); + bool assert_bug(const char *msg); + void assert_user_bug(const char *msg); - void set_assert() {asserted=true;} bool is_deadlocked() const; bool is_complete_execution() const; + void print_stats() const; - /** @brief Alert the model-checker that an incorrectly-ordered - * synchronization was made */ - void set_bad_synchronization() { bad_synchronization = true; } + void set_bad_synchronization(); const model_params params; Node * get_curr_node(); @@ -139,8 +147,8 @@ private: bool sleep_can_read_from(ModelAction * curr, const ModelAction *write); bool thin_air_constraint_may_allow(const ModelAction * writer, const ModelAction *reader); bool mo_may_allow(const ModelAction * writer, const ModelAction *reader); - bool has_asserted() {return asserted;} - void reset_asserted() {asserted=false;} + bool has_asserted() const; + void set_assert(); bool promises_expired() const; void execute_sleep_set(); void wake_up_sleeping_actions(ModelAction * curr); @@ -238,19 +246,16 @@ private: * b. */ CycleGraph *mo_graph; - bool failed_promise; - bool too_many_reads; - bool asserted; - /** @brief Incorrectly-ordered synchronization was made */ - bool bad_synchronization; /** @brief The cumulative execution stats */ struct execution_stats stats; void record_stats(); - void print_stats() const; bool have_bug_reports() const; void print_bugs() const; + void print_execution(bool printbugs) const; + + friend void user_main_wrapper(); }; extern ModelChecker *model;