X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=execution.h;h=2dc3333bb3deb8a3d804d6369658dcdfa771337d;hb=6ff4cc0d650d6cd126b4ad57692552ab054f76c4;hp=5e1b18700c248736d7657f04c625eaea1c18b277;hpb=cc6b96adbe8bc76d49c71df36de6b9ff99f373dd;p=c11tester.git diff --git a/execution.h b/execution.h index 5e1b1870..2dc3333b 100644 --- a/execution.h +++ b/execution.h @@ -66,7 +66,7 @@ public: bool check_action_enabled(ModelAction *curr); - bool assert_bug(const char *msg); + void assert_bug(const char *msg); bool have_bug_reports() const; @@ -92,34 +92,25 @@ public: void setFinished() {isfinished = true;} void restore_last_seq_num(); - +#ifdef TLS + pthread_key_t getPthreadKey() {return pthreadkey;} +#endif SNAPSHOTALLOC private: int get_execution_number() const; - - ModelChecker *model; - - struct model_params * params; - - /** The scheduler to use: tracks the running/ready Threads */ - Scheduler * const scheduler; - bool mo_may_allow(const ModelAction *writer, const ModelAction *reader); bool should_wake_up(const ModelAction *curr, const Thread *thread) const; void wake_up_sleeping_actions(ModelAction *curr); modelclock_t get_next_seq_num(); - bool next_execution(); bool initialize_curr_action(ModelAction **curr); bool process_read(ModelAction *curr, SnapVector * rf_set); void process_write(ModelAction *curr); bool process_fence(ModelAction *curr); bool process_mutex(ModelAction *curr); - void process_thread_action(ModelAction *curr); void read_from(ModelAction *act, ModelAction *rf); bool synchronize(const ModelAction *first, ModelAction *second); - void add_uninit_action_to_lists(ModelAction *act); void add_action_to_lists(ModelAction *act); void add_normal_write_to_lists(ModelAction *act); @@ -130,28 +121,42 @@ private: ModelAction * get_last_unlock(ModelAction *curr) const; SnapVector * build_may_read_from(ModelAction *curr); ModelAction * process_rmw(ModelAction *curr); - bool r_modification_order(ModelAction *curr, const ModelAction *rf, SnapVector *priorset, bool *canprune, bool check_only = false); void w_modification_order(ModelAction *curr); ClockVector * get_hb_from_write(ModelAction *rf) const; ModelAction * get_uninitialized_action(ModelAction *curr) const; ModelAction * convertNonAtomicStore(void*); +#ifdef TLS + pthread_key_t pthreadkey; +#endif + ModelChecker *model; + struct model_params * params; + + /** The scheduler to use: tracks the running/ready Threads */ + Scheduler * const scheduler; action_list_t action_trace; + + SnapVector thread_map; SnapVector pthread_map; uint32_t pthread_counter; + /** Per-object list of actions. Maps an object (i.e., memory location) - * to a trace of all actions performed on the object. */ + * to a trace of all actions performed on the object. + * Used only for SC fences, unlocks, & wait. + */ HashTable obj_map; /** Per-object list of actions. Maps an object (i.e., memory location) * to a trace of all actions performed on the object. */ HashTable condvar_waiters_map; + /** Per-object list of actions that each thread performed. */ HashTable *, uintptr_t, 2> obj_thrd_map; + /** Per-object list of writes that each thread performed. */ HashTable *, uintptr_t, 2> obj_wr_thrd_map; HashTable obj_last_sc_map;