X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=model.h;h=4c0af0af1f3e33ba3aaa0e3bc5a74f67f6cd9c10;hb=123c66e0c1b0f58aae2916cc22b2100143a2ceb4;hp=941601b61fba027fe9b4a3dc366eef420aa561e1;hpb=2db2ef3b8bdabacc7784fd5a4e7e7520f1cd2298;p=c11tester.git diff --git a/model.h b/model.h index 941601b6..4c0af0af 100644 --- a/model.h +++ b/model.h @@ -13,7 +13,6 @@ #include "schedule.h" #include "mymemory.h" -#include #include "libthreads.h" #include "libatomic.h" #include "threads.h" @@ -22,6 +21,7 @@ /* Forward declaration */ class NodeStack; +class CycleGraph; /** @brief The central structure for model-checking */ class ModelChecker { @@ -56,6 +56,7 @@ public: int switch_to_master(ModelAction *act); ClockVector * get_cv(thread_id_t tid); bool next_execution(); + bool isfeasible(); MEMALLOC private: @@ -80,7 +81,11 @@ private: void add_action_to_lists(ModelAction *act); ModelAction * get_last_action(thread_id_t tid); ModelAction * get_parent_action(thread_id_t tid); + ModelAction * get_last_seq_cst(const void *location); void build_reads_from_past(ModelAction *curr); + void r_modification_order(ModelAction * curr, const ModelAction *rf); + void w_modification_order(ModelAction * curr); + ModelAction *current_action; ModelAction *diverge; @@ -89,10 +94,16 @@ private: ucontext_t *system_context; action_list_t *action_trace; std::map *thread_map; + + /** Per-object list of actions. Maps an object (i.e., memory location) + * to a trace of all actions performed on the object. */ + std::map *obj_map; + std::map > *obj_thrd_map; std::vector *thrd_last_action; NodeStack *node_stack; ModelAction *next_backtrack; + CycleGraph * cyclegraph; }; extern ModelChecker *model;