Try to catch data races for memcpy
[c11tester.git] / model.cc
index 4b2143dc36ab4e303840059dd9ed1f7f22cd2c43..450aac5a51f2201c62d4743d94339c0cab0c2469 100644 (file)
--- a/model.cc
+++ b/model.cc
@@ -21,6 +21,7 @@
 #include "plugins.h"
 
 ModelChecker *model = NULL;
+int inside_model = 0;
 
 void placeholder(void *) {
        ASSERT(0);
@@ -80,6 +81,7 @@ ModelChecker::ModelChecker() :
                                                        "Copyright (c) 2013 and 2019 Regents of the University of California. All rights reserved.\n"
                                                        "Distributed under the GPLv2\n"
                                                        "Written by Weiyu Luo, Brian Norris, and Brian Demsky\n\n");
+       init_memory_ops();
        memset(&stats,0,sizeof(struct execution_stats));
        init_thread = new Thread(execution->get_next_id(), (thrd_t *) model_malloc(sizeof(thrd_t)), &placeholder, NULL, NULL);
 #ifdef TLS
@@ -353,7 +355,7 @@ void ModelChecker::startRunExecution(Thread *old) {
                Thread *thr = getNextThread(old);
                if (thr != nullptr) {
                        scheduler->set_current_thread(thr);
-
+                       inside_model = 0;
                        if (Thread::swap(old, thr) < 0) {
                                perror("swap threads");
                                exit(EXIT_FAILURE);
@@ -452,6 +454,8 @@ uint64_t ModelChecker::switch_thread(ModelAction *act)
                delete act;
                return 0;
        }
+       inside_model = 1;
+
        DBG();
        Thread *old = thread_current();
        old->set_state(THREAD_READY);