loc_rd_func_nodes_map = new HashTable<void *, SnapVector<FuncNode *> *, uintptr_t, 0>();
loc_wr_func_nodes_map = new HashTable<void *, SnapVector<FuncNode *> *, uintptr_t, 0>();
loc_waiting_writes_map = new HashTable<void *, SnapVector<ConcretePredicate *> *, uintptr_t, 0>();
loc_rd_func_nodes_map = new HashTable<void *, SnapVector<FuncNode *> *, uintptr_t, 0>();
loc_wr_func_nodes_map = new HashTable<void *, SnapVector<FuncNode *> *, uintptr_t, 0>();
loc_waiting_writes_map = new HashTable<void *, SnapVector<ConcretePredicate *> *, uintptr_t, 0>();
thrd_waiting_write = new SnapVector<ConcretePredicate *>();
thrd_wait_obj = new SnapVector<WaitObj *>();
func_inst_act_maps = new HashTable<uint32_t, SnapVector<inst_act_map_t *> *, int, 0>(128);
thrd_waiting_write = new SnapVector<ConcretePredicate *>();
thrd_wait_obj = new SnapVector<WaitObj *>();
func_inst_act_maps = new HashTable<uint32_t, SnapVector<inst_act_map_t *> *, int, 0>(128);
void ModelHistory::enter_function(const uint32_t func_id, thread_id_t tid)
{
//model_print("thread %d entering func %d\n", tid, func_id);
void ModelHistory::enter_function(const uint32_t func_id, thread_id_t tid)
{
//model_print("thread %d entering func %d\n", tid, func_id);
- SnapVector<func_id_list_t> * thrd_func_list = execution->get_thrd_func_list();
- SnapVector< SnapList<action_list_t *> *> *
- thrd_func_act_lists = execution->get_thrd_func_act_lists();
- SnapVector<uint32_t> * thrd_last_entered_func = execution->get_thrd_last_entered_func();
-
if ( thrd_func_list->size() <= id ) {
uint oldsize = thrd_func_list->size();
thrd_func_list->resize( id + 1 );
if ( thrd_func_list->size() <= id ) {
uint oldsize = thrd_func_list->size();
thrd_func_list->resize( id + 1 );
/* @param func_id a non-zero value */
void ModelHistory::exit_function(const uint32_t func_id, thread_id_t tid)
{
/* @param func_id a non-zero value */
void ModelHistory::exit_function(const uint32_t func_id, thread_id_t tid)
{
SnapList<action_list_t *> * func_act_lists = (*thrd_func_act_lists)[id];
uint32_t last_func_id = (*thrd_func_list)[id].back();
SnapList<action_list_t *> * func_act_lists = (*thrd_func_act_lists)[id];
uint32_t last_func_id = (*thrd_func_list)[id].back();
- ModelExecution * execution = model->get_execution();
- SnapVector<func_id_list_t> * thrd_func_list = execution->get_thrd_func_list();
- SnapVector< SnapList<action_list_t *> *> *
- thrd_func_act_lists = execution->get_thrd_func_act_lists();
-
uint32_t thread_id = id_to_int(tid);
/* Return if thread tid has not entered any function that contains atomics */
if ( thrd_func_list->size() <= thread_id )
uint32_t thread_id = id_to_int(tid);
/* Return if thread tid has not entered any function that contains atomics */
if ( thrd_func_list->size() <= thread_id )
func_node->update_inst_act_map(tid, act);
Fuzzer * fuzzer = model->get_execution()->getFuzzer();
func_node->update_inst_act_map(tid, act);
Fuzzer * fuzzer = model->get_execution()->getFuzzer();
Thread * thread = model->get_thread(tid);
//model_print("** thread %d is woken up\n", thread->get_id());
Thread * thread = model->get_thread(tid);
//model_print("** thread %d is woken up\n", thread->get_id());
{
WaitObj * self_wait_obj = getWaitObj(self_id);
self_wait_obj->add_waiting_for(waiting_for_id, target_node, dist);
{
WaitObj * self_wait_obj = getWaitObj(self_id);
self_wait_obj->add_waiting_for(waiting_for_id, target_node, dist);
{
WaitObj * self_wait_obj = getWaitObj(self_id);
bool thread_removed = self_wait_obj->remove_waiting_for_node(waiting_for_id, target_node);
{
WaitObj * self_wait_obj = getWaitObj(self_id);
bool thread_removed = self_wait_obj->remove_waiting_for_node(waiting_for_id, target_node);
// model_print("\tthread %d waits for nobody, wake up\n", self_id);
ModelExecution * execution = model->get_execution();
Thread * thread = execution->get_thread(self_id);
// model_print("\tthread %d waits for nobody, wake up\n", self_id);
ModelExecution * execution = model->get_execution();
Thread * thread = execution->get_thread(self_id);
// model_print("\tthread %d waits for nobody, wake up\n", self_id);
ModelExecution * execution = model->get_execution();
Thread * thread = execution->get_thread(waited_by_id);
// model_print("\tthread %d waits for nobody, wake up\n", self_id);
ModelExecution * execution = model->get_execution();
Thread * thread = execution->get_thread(waited_by_id);
/* function id starts with 1 */
for (uint32_t i = 1;i < func_nodes.size();i++) {
FuncNode * func_node = func_nodes[i];
/* function id starts with 1 */
for (uint32_t i = 1;i < func_nodes.size();i++) {
FuncNode * func_node = func_nodes[i];