X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=model.h;h=8593b98f06a186aa7e297cd661219edf1c69c264;hb=84e24d516d4e9dbd30f1fff7e9a185d1540d20eb;hp=4ea55903dde4ae3b595ca5a653c22415b50f320a;hpb=9e48f3b0ad6b84ad90d085a55611b60467ebe6dd;p=model-checker.git diff --git a/model.h b/model.h index 4ea5590..8593b98 100644 --- a/model.h +++ b/model.h @@ -1,5 +1,5 @@ /** @file model.h - * @brief Core model checker. + * @brief Core model checker. */ #ifndef __MODEL_H__ @@ -13,15 +13,14 @@ #include "schedule.h" #include "mymemory.h" -#include #include "libthreads.h" -#include "libatomic.h" #include "threads.h" #include "action.h" #include "clockvector.h" /* Forward declaration */ class NodeStack; +class CycleGraph; /** @brief The central structure for model-checking */ class ModelChecker { @@ -30,7 +29,7 @@ public: ~ModelChecker(); /** The scheduler to use: tracks the running/ready Threads */ - class Scheduler *scheduler; + Scheduler *scheduler; /** Stores the context for the main model-checking system thread (call * once) @@ -54,8 +53,9 @@ public: modelclock_t get_next_seq_num(); int switch_to_master(ModelAction *act); - + ClockVector * get_cv(thread_id_t tid); bool next_execution(); + bool isfeasible(); MEMALLOC private: @@ -80,7 +80,12 @@ 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); + ModelAction * process_rmw(ModelAction * curr); + void r_modification_order(ModelAction * curr, const ModelAction *rf); + void w_modification_order(ModelAction * curr); + ModelAction *current_action; ModelAction *diverge; @@ -88,11 +93,17 @@ private: ucontext_t *system_context; action_list_t *action_trace; - std::map *thread_map; + 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; - class NodeStack *node_stack; + NodeStack *node_stack; ModelAction *next_backtrack; + CycleGraph * cyclegraph; }; extern ModelChecker *model;