X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=history.h;h=431f978ea3f54e1053e682aadece744b9ed0ca44;hb=d49c09078cfbb85f565cc59b83ec727bc08b72bf;hp=869aecf58669b1ac5b2c61dbc0a37b2609fca3bb;hpb=dc8e9b89ec62b6da4816ec4e31fe2971cbcdcb54;p=c11tester.git diff --git a/history.h b/history.h index 869aecf5..431f978e 100644 --- a/history.h +++ b/history.h @@ -1,12 +1,13 @@ #ifndef __HISTORY_H__ #define __HISTORY_H__ -#include "stl-model.h" #include "common.h" #include "classlist.h" #include "hashtable.h" #include "threads-model.h" +#define INIT_SEQ_NUMBER 0xffffffff + class ModelHistory { public: ModelHistory(); @@ -29,7 +30,7 @@ public: FuncNode * get_curr_func_node(thread_id_t tid); void update_write_history(void * location, uint64_t write_val); - HashTable * getWriteHistory() { return write_history; } + HashTable * getWriteHistory() { return write_history; } void update_loc_rd_func_nodes_map(void * location, FuncNode * node); void update_loc_wr_func_nodes_map(void * location, FuncNode * node); SnapVector * getRdFuncNodes(void * location); @@ -40,18 +41,20 @@ public: void check_waiting_write(ModelAction * write_act); SnapVector * getThrdWaitingWrite() { return thrd_waiting_write; } - SnapVector * getThrdInstActMap(uint32_t func_id); - - void update_func_threads_map(uint32_t func_id, thread_id_t tid); - SnapVector * get_calling_threads(uint32_t func_id); + WaitObj * getWaitObj(thread_id_t tid); + void add_waiting_thread(thread_id_t self_id, thread_id_t waiting_for_id, FuncNode * target_node, int dist); + void remove_waiting_thread(thread_id_t tid); + void stop_waiting_for_node(thread_id_t self_id, thread_id_t waiting_for_id, FuncNode * target_node); void set_new_exec_flag(); void dump_func_node_graph(); void print_func_node(); + void print_waiting_threads(); MEMALLOC private: uint32_t func_counter; + modelclock_t last_seq_number; /* Map function names to integer ids */ HashTable func_map; @@ -62,7 +65,7 @@ private: ModelVector func_nodes; /* Map a location to a set of values that have been written to it */ - HashTable * write_history; + HashTable * write_history; /* Map a location to FuncNodes that may read from it */ HashTable *, uintptr_t, 0> * loc_rd_func_nodes_map; @@ -71,16 +74,22 @@ private: HashTable *, uintptr_t, 0> * loc_wr_func_nodes_map; HashTable *, uintptr_t, 0> * loc_waiting_writes_map; - SnapVector * thrd_waiting_write; - /* A run-time map from FuncInst to ModelAction per each FuncNode, per each thread. - * Manipulated by FuncNode, and needed by NewFuzzer */ - HashTable *, int, 0> * func_inst_act_maps; + /* thrd_func_list stores a list of function ids for each thread. + * Each element in thrd_func_list stores the functions that + * thread i has entered and yet to exit from + */ + SnapVector * thrd_func_list; + SnapVector * thrd_last_entered_func; + + /* The write values each paused thread is waiting for */ + SnapVector * thrd_waiting_write; + SnapVector * thrd_wait_obj; - bool skip_action(ModelAction * act, SnapList * curr_act_list); + bool skip_action(ModelAction * act); + void monitor_waiting_thread(uint32_t func_id, thread_id_t tid); + void monitor_waiting_thread_counter(thread_id_t tid); - /* Map func_id to threads that have called this function */ - HashTable *, int, 0> * func_threads_map; }; #endif /* __HISTORY_H__ */