From a4d3f2ae3f3a9e2a30cc36c92cee9f83bb09e9b1 Mon Sep 17 00:00:00 2001 From: Brian Demsky Date: Mon, 6 May 2013 13:06:53 -0700 Subject: [PATCH 1/1] cleanup plugin interface a little more. add support for options for SCAnalysis --- main.cc | 11 +++++++++-- model.cc | 2 -- scanalysis.cc | 33 +++++++++++++++++++++++++++------ scanalysis.h | 4 +++- traceanalysis.h | 2 +- 5 files changed, 40 insertions(+), 12 deletions(-) diff --git a/main.cc b/main.cc index d2d8d4a..5a33baf 100644 --- a/main.cc +++ b/main.cc @@ -35,6 +35,7 @@ static void param_defaults(struct model_params *params) static void print_usage(const char *program_name, struct model_params *params) { + ModelVector * registeredanalysis=getRegisteredTraceAnalysis(); /* Reset defaults before printing */ param_defaults(params); @@ -78,8 +79,9 @@ static void print_usage(const char *program_name, struct model_params *params) "-u, --uninitialized=VALUE Return VALUE any load which may read from an\n" " uninitialized atomic.\n" " Default: %u\n" -"-t, --analysis=NAME Use Trace Analysis.\n" -"-o, --options=NAME Options.\n" +"-t, --analysis=NAME Use Analysis Plugin.\n" +"-o, --options=NAME Option for previous analysis plugin. \n" +" -o help for a list of options\n" " -- Program arguments follow.\n\n", program_name, params->maxreads, @@ -92,6 +94,11 @@ static void print_usage(const char *program_name, struct model_params *params) params->enabledcount, params->bound, params->uninitvalue); + model_print("Analysis plug ins:\n"); + for(unsigned int i=0;isize();i++) { + TraceAnalysis * analysis=(*registeredanalysis)[i]; + model_print("%s\n", analysis->name()); + } exit(EXIT_SUCCESS); } diff --git a/model.cc b/model.cc index e0c3089..d9caf9a 100644 --- a/model.cc +++ b/model.cc @@ -36,8 +36,6 @@ ModelChecker::ModelChecker(struct model_params params) : ModelChecker::~ModelChecker() { delete node_stack; - for (unsigned int i = 0; i < trace_analyses.size(); i++) - delete trace_analyses[i]; delete scheduler; } diff --git a/scanalysis.cc b/scanalysis.cc index 2738bb5..13aada1 100644 --- a/scanalysis.cc +++ b/scanalysis.cc @@ -10,7 +10,9 @@ SCAnalysis::SCAnalysis() : badrfset(), lastwrmap(), threadlists(1), - execution(NULL) + execution(NULL), + print_always(false), + print_buggy(true) { } @@ -21,13 +23,31 @@ void SCAnalysis::setExecution(ModelExecution * execution) { this->execution=execution; } -char * SCAnalysis::name() { - char * name = "SC"; +const char * SCAnalysis::name() { + const char * name = "SC"; return name; } -bool SCAnalysis::option(char *) { - return false; +bool SCAnalysis::option(char * opt) { + if (strcmp(opt, "verbose")==0) { + print_always=true; + return false; + } else if (strcmp(opt, "buggy")==0) { + return false; + } else if (strcmp(opt, "quiet")==0) { + print_buggy=false; + return false; + } if (strcmp(opt, "help") != 0) { + model_print("Unrecognized option: %s\n", opt); + } + + model_print("SC Analysis options\n"); + model_print("verbose -- print all feasible executions\n"); + model_print("buggy -- print only buggy executions (default)\n"); + model_print("quiet -- print nothing\n"); + model_print("\n"); + + return true; } void SCAnalysis::print_list(action_list_t *list) { @@ -55,7 +75,8 @@ void SCAnalysis::print_list(action_list_t *list) { void SCAnalysis::analyze(action_list_t *actions) { action_list_t *list = generateSC(actions); check_rf(list); - print_list(list); + if (print_always || (print_buggy && execution->have_bug_reports())) + print_list(list); } void SCAnalysis::check_rf(action_list_t *list) { diff --git a/scanalysis.h b/scanalysis.h index 286f73d..3ad69e5 100644 --- a/scanalysis.h +++ b/scanalysis.h @@ -9,7 +9,7 @@ class SCAnalysis : public TraceAnalysis { ~SCAnalysis(); virtual void setExecution(ModelExecution * execution); virtual void analyze(action_list_t *); - virtual char * name(); + virtual const char * name(); virtual bool option(char *); SNAPSHOTALLOC @@ -33,5 +33,7 @@ class SCAnalysis : public TraceAnalysis { HashTable lastwrmap; SnapVector threadlists; ModelExecution *execution; + bool print_always; + bool print_buggy; }; #endif diff --git a/traceanalysis.h b/traceanalysis.h index a71e8c9..fe60591 100644 --- a/traceanalysis.h +++ b/traceanalysis.h @@ -6,7 +6,7 @@ class TraceAnalysis { public: virtual void setExecution(ModelExecution * execution) = 0; virtual void analyze(action_list_t *) = 0; - virtual char * name() = 0; + virtual const char * name() = 0; virtual bool option(char *) = 0; SNAPSHOTALLOC -- 2.34.1