X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=history.h;h=4795eb53e4cae374027cccf6592eb68549dbc0f4;hp=36b584831fdcba9ac3f1112e700dcb6650b3f6f4;hb=064db08aed92a31adbf00497f4dc4608f5b99857;hpb=d29571ea49a6abb1b291e547b497ea914da1bef2 diff --git a/history.h b/history.h index 36b58483..4795eb53 100644 --- a/history.h +++ b/history.h @@ -1,13 +1,11 @@ #ifndef __HISTORY_H__ #define __HISTORY_H__ -#include "stl-model.h" #include "common.h" +#include "classlist.h" #include "hashtable.h" -#include "hashset.h" #include "threads-model.h" - class ModelHistory { public: ModelHistory(); @@ -27,28 +25,65 @@ public: ModelVector * getFuncNodes() { return &func_nodes; } FuncNode * get_func_node(uint32_t func_id); - uint64_t query_last_read(void * location, thread_id_t tid); + FuncNode * get_curr_func_node(thread_id_t tid); + + void update_write_history(void * location, uint64_t write_val); + 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); + SnapVector * getWrFuncNodes(void * location); + + void add_waiting_write(ConcretePredicate * concrete); + void remove_waiting_write(thread_id_t tid); + void check_waiting_write(ModelAction * write_act); + SnapVector * getThrdWaitingWrite() { return thrd_waiting_write; } - void add_to_write_history(void * location, uint64_t write_val); - HashTable * getWriteHistory() { return &write_history; } + 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); + + SnapVector * getThrdInstActMap(uint32_t func_id); void set_new_exec_flag(); - void print_write(); + void dump_func_node_graph(); void print_func_node(); + void print_waiting_threads(); MEMALLOC private: uint32_t func_counter; - /* map function names to integer ids */ + /* Map function names to integer ids */ HashTable func_map; - /* map integer ids to function names */ + + /* Map integer ids to function names */ ModelVector func_map_rev; ModelVector func_nodes; - HashTable write_history; - HashSet write_locations; + /* Map a location to a set of values that have been written to it */ + HashTable * write_history; + + /* Map a location to FuncNodes that may read from it */ + HashTable *, uintptr_t, 0> * loc_rd_func_nodes_map; + + /* Map a location to FuncNodes that may write to it */ + HashTable *, uintptr_t, 0> * loc_wr_func_nodes_map; + + HashTable *, uintptr_t, 0> * loc_waiting_writes_map; + /* The write values each paused thread is waiting for */ + SnapVector * thrd_waiting_write; + SnapVector * thrd_wait_obj; + + /* A run-time map from FuncInst to ModelAction per thread, per FuncNode. + * Manipulated by FuncNode, and needed by NewFuzzer */ + HashTable *, int, 0> * func_inst_act_maps; + + bool skip_action(ModelAction * act, SnapList * curr_act_list); + void monitor_waiting_thread(uint32_t func_id, thread_id_t tid); + void monitor_waiting_thread_counter(thread_id_t tid); }; #endif /* __HISTORY_H__ */