Merge branch 'new_fuzzer' of /home/git/random-fuzzer into new_fuzzer
authorroot <root@dw-6.eecs.uci.edu>
Wed, 26 Jun 2019 20:04:49 +0000 (13:04 -0700)
committerroot <root@dw-6.eecs.uci.edu>
Wed, 26 Jun 2019 20:04:49 +0000 (13:04 -0700)
1  2 
model.cc

diff --combined model.cc
index 61d0b64c8ba4042e31a8945b9ecce5f8a20f1136,4b159aa5d35f879da883571c0bbc203d68a1c6d5..c468d0deb3e8b6972673d3910670e99eff42052f
+++ b/model.cc
  #include "execution.h"
  #include "bugmessage.h"
  
- ModelChecker *model;
+ ModelChecker *model = NULL;
+ ModelChecker *model_init = NULL;
+ /** Wrapper to run the user's main function, with appropriate arguments */
+ void user_main_wrapper(void *)
+ {
+       user_main(model->params.argc, model->params.argv);
+ }
  
  /** @brief Constructor */
  ModelChecker::ModelChecker() :
@@@ -33,6 -40,9 +40,9 @@@
        inspect_plugin(NULL)
  {
        memset(&stats,0,sizeof(struct execution_stats));
+       init_thread = new Thread(execution->get_next_id(), (thrd_t *) malloc(sizeof(thrd_t)), &user_main_wrapper, NULL, NULL);  // L: user_main_wrapper passes the user program
+       execution->add_thread(init_thread);
+       scheduler->set_current_thread(init_thread);
  }
  
  /** @brief Destructor */
@@@ -54,6 -64,8 +64,6 @@@ void ModelChecker::setParams(struct mod
   */
  void ModelChecker::reset_to_initial_state()
  {
 -      DEBUG("+++ Resetting to initial state +++\n");
 -      node_stack->reset_execution();
  
        /**
         * FIXME: if we utilize partial rollback, we will need to free only
@@@ -251,6 -263,7 +261,6 @@@ bool ModelChecker::next_execution(
  // test code
        execution_number++;
        reset_to_initial_state();
 -      node_stack->full_reset();
        return false;
  }
  
@@@ -310,10 -323,11 +320,11 @@@ uint64_t ModelChecker::switch_to_master
        Thread *old = thread_current();
        scheduler->set_current_thread(NULL);
        ASSERT(!old->get_pending());
- /* W: No plugin
-         if (inspect_plugin != NULL) {
-                 inspect_plugin->inspectModelAction(act);
-         }*/
+       if (inspect_plugin != NULL) {
+               inspect_plugin->inspectModelAction(act);
+       }
        old->set_pending(act);
        if (Thread::swap(old, &system_context) < 0) {
                perror("swap threads");
        return old->get_return_value();
  }
  
- /** Wrapper to run the user's main function, with appropriate arguments */
- void user_main_wrapper(void *)
- {
-       user_main(model->params.argc, model->params.argv);
- }
  bool ModelChecker::should_terminate_execution()
  {
        /* Infeasible -> don't take any more steps */
@@@ -351,6 -359,7 +356,6 @@@ void ModelChecker::do_restart(
  {
        restart_flag = false;
        reset_to_initial_state();
 -      node_stack->full_reset();
        memset(&stats,0,sizeof(struct execution_stats));
        execution_number = 1;
  }
@@@ -363,10 -372,8 +368,8 @@@ void ModelChecker::run(
        initstate(423121, random_state, sizeof(random_state));
  
        for(int exec = 0;exec < params.maxexecutions;exec++) {
-               thrd_t user_thread;
-               Thread *t = new Thread(execution->get_next_id(), &user_thread, &user_main_wrapper, NULL, NULL); // L: user_main_wrapper passes the user program
-               execution->add_thread(t);
-               //Need to seed random number generator, otherwise its state gets reset
+               Thread * t = init_thread;
                do {
                        /*
                         * Stash next pending action(s) for thread(s). There