From: Brian Norris <banorris@uci.edu>
Date: Tue, 11 Sep 2012 17:10:39 +0000 (-0700)
Subject: main: add "maxreads" parameter
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=6405f91a3847312815ffaa8407787b7d3e30a21b;p=cdsspec-compiler.git

main: add "maxreads" parameter
---

diff --git a/main.cc b/main.cc
index f58f304..215a219 100644
--- a/main.cc
+++ b/main.cc
@@ -14,30 +14,41 @@
 #include "model.h"
 #include "snapshot-interface.h"
 
+static void param_defaults(struct model_params * params) {
+	params->maxreads = 0;
+}
+
 static void print_usage() {
 	printf(
-"Usage: <program name> [OPTIONS]\n"
+"Usage: <program name> [MC_OPTIONS] -- [PROGRAM ARGUMENTS]\n"
 "\n"
 "Options:\n"
 "-h                    Display this help message and exit\n"
-);
+"-m                    Maximum times a thread can read from the same write while other writes exist\n"
+"--                    Program arguments follow.\n\n");
 	exit(EXIT_SUCCESS);
 }
 
-static void parse_options(struct model_params *params, int argc, char **argv) {
-	const char *shortopts = "h";
+static void parse_options(struct model_params *params, int *argc, char ***argv) {
+	const char *shortopts = "hm:";
 	int opt;
 	bool error = false;
-	while (!error && (opt = getopt(argc, argv, shortopts)) != -1) {
+	while (!error && (opt = getopt(*argc, *argv, shortopts)) != -1) {
 		switch (opt) {
 		case 'h':
 			print_usage();
 			break;
+		case 'm':
+			params->maxreads = atoi(optarg);
+			break;
 		default: /* '?' */
 			error = true;
 			break;
 		}
 	}
+	(*argc) -= optind;
+	(*argv) += optind;
+
 	if (error)
 		print_usage();
 }
@@ -50,7 +61,9 @@ static void real_main() {
 	thrd_t user_thread;
 	struct model_params params;
 
-	parse_options(&params, main_argc, main_argv);
+	param_defaults(&params);
+
+	parse_options(&params, &main_argc, &main_argv);
 
 	//Initialize race detector
 	initRaceDetector();
diff --git a/model.h b/model.h
index b2f7897..990f559 100644
--- a/model.h
+++ b/model.h
@@ -28,6 +28,7 @@ class Promise;
  * the model checker.
  */
 struct model_params {
+	int maxreads;
 };
 
 /**