#include <unistd.h>
-#include <threads.h>
#include "common.h"
-#include "threads-model.h"
#include "output.h"
#include "datarace.h"
#include "model.h"
#include "snapshot-interface.h"
-static void param_defaults(struct model_params * params) {
+static void param_defaults(struct model_params *params)
+{
params->maxreads = 0;
params->maxfuturedelay = 100;
params->fairwindow = 0;
params->verbose = 0;
}
-static void print_usage(struct model_params *params) {
+static void print_usage(struct model_params *params)
+{
/* Reset defaults before printing */
param_defaults(params);
exit(EXIT_SUCCESS);
}
-static void parse_options(struct model_params *params, int *argc, char ***argv) {
+static void parse_options(struct model_params *params, int argc, char **argv)
+{
const char *shortopts = "hm:M:s:S:f:e:b:v";
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(params);
break;
}
}
- (*argv)[optind - 1] = (*argv)[0];
- (*argc) -= (optind - 1);
- (*argv) += (optind - 1);
+
+ /* Pass remaining arguments to user program */
+ params->argc = argc - (optind - 1);
+ params->argv = argv + (optind - 1);
+
+ /* Reset program name */
+ params->argv[0] = argv[0];
+
+ /* Reset (global) optind for potential use by user program */
optind = 1;
if (error)
char **main_argv;
/** The model_main function contains the main model checking loop. */
-static void model_main() {
+static void model_main()
+{
struct model_params params;
param_defaults(¶ms);
- parse_options(¶ms, &main_argc, &main_argv);
-
- /* Pass remaining arguments to user program */
- params.argc = main_argc;
- params.argv = main_argv;
+ parse_options(¶ms, main_argc, main_argv);
//Initialize race detector
initRaceDetector();
- //Create the singleton SnapshotStack object
- snapshotObject = new SnapshotStack();
+ snapshot_stack_init();
model = new ModelChecker(params);
- snapshotObject->snapshotStep(0);
+ snapshot_record(0);
model->run();
delete model;
* Main function. Just initializes snapshotting library and the
* snapshotting library calls the model_main function.
*/
-int main(int argc, char ** argv) {
+int main(int argc, char **argv)
+{
main_argc = argc;
main_argv = argv;
redirect_output();
/* Let's jump in quickly and start running stuff */
- initSnapshotLibrary(10000, 1024, 1024, 4000, &model_main);
+ snapshot_system_init(10000, 1024, 1024, 4000, &model_main);
}