X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=main.cc;h=b38f7ef4816d003f45d876133dacf0dc0d816bab;hb=9b784333e1a62ed6d258e96502a5733041389c8f;hp=0d73c68dbe1f03ac5cd05b5496cd50e66581a42b;hpb=50f263af6b0ea0148dfaa1e527951c6b9022ff7f;p=c11tester.git diff --git a/main.cc b/main.cc index 0d73c68d..b38f7ef4 100644 --- a/main.cc +++ b/main.cc @@ -1,15 +1,21 @@ +/** @file main.cc + * @brief Entry point for the model checker. + */ + #include "libthreads.h" #include "common.h" #include "threads.h" /* global "model" object */ #include "model.h" +#include "snapshot-interface.h" -/* - * Return 1 if found next thread, 0 otherwise +/** The thread_system_next function takes the next step in the + * execution. @return Returns the 1 if there is another step and 0 + * otherwise. */ -static int thread_system_next(void) -{ + +static int thread_system_next(void) { Thread *curr, *next; curr = thread_current(); @@ -32,32 +38,38 @@ static int thread_system_next(void) return Thread::swap(model->get_system_context(), next); } -static void thread_wait_finish(void) -{ +/** The thread_wait_finish method runs the current execution until we + * have no more steps to take. + */ +static void thread_wait_finish(void) { DBG(); while (!thread_system_next()); } -/* - * Main system function - */ -int main() -{ + +/** The real_main function contains the main model checking loop. */ + +void real_main() { thrd_t user_thread; ucontext_t main_context; + //Create the singleton SnapshotStack object + snapshotObject = new SnapshotStack(); + model = new ModelChecker(); if (getcontext(&main_context)) - return 1; + return; model->set_system_context(&main_context); + snapshotObject->snapshotStep(0); + do { /* Start user program */ - model->add_thread(new Thread(&user_thread, &user_main, NULL)); + model->add_thread(new Thread(&user_thread, (void (*)(void *)) &user_main, NULL)); /* Wait for all threads to complete */ thread_wait_finish(); @@ -66,5 +78,20 @@ int main() delete model; DEBUG("Exiting\n"); - return 0; +} + +int main_numargs; +char ** main_args; + +/** + * Main function. Just initializes snapshotting library and the + * snapshotting library calls the real_main function. + */ +int main(int numargs, char ** args) { + /* Stash this stuff in case someone wants it eventually */ + main_numargs=numargs; + main_args=args; + + /* Let's jump in quickly and start running stuff */ + initSnapShotLibrary(10000, 1024, 1024, 1000, &real_main); }