X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5bd5ce1bb9c20fd24ae5cd730d717cf1426ce613..3d845df082d79ab89649c1a8829eea201ae01085:/src/mc/simgrid_mc.cpp diff --git a/src/mc/simgrid_mc.cpp b/src/mc/simgrid_mc.cpp index 6ffb402179..f56cc71cce 100644 --- a/src/mc/simgrid_mc.cpp +++ b/src/mc/simgrid_mc.cpp @@ -1,4 +1,4 @@ - /* Copyright (c) 2015. The SimGrid Team. +/* Copyright (c) 2015. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -18,7 +18,10 @@ #include #include #include + +#ifdef __linux__ #include +#endif #include @@ -38,10 +41,15 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_main, mc, "Entry point for simgrid-mc"); static int do_child(int socket, char** argv) { XBT_DEBUG("Inside the child process PID=%i", (int) getpid()); + +#ifdef __linux__ + // Make sure we do not outlive our parent: if (prctl(PR_SET_PDEATHSIG, SIGHUP) != 0) { std::perror("simgrid-mc"); return MC_SERVER_ERROR; } +#endif + int res; // Remove CLOEXEC in order to pass the socket to the exec-ed program: @@ -60,6 +68,11 @@ static int do_child(int socket, char** argv) // Set environment: setenv(MC_ENV_VARIABLE, "1", 1); + // Disable lazy relocation in the model-ched process. + // We don't want the model-checked process to modify its .got.plt during + // snapshot. + setenv("LC_BIND_NOW", "1", 1); + char buffer[64]; res = std::snprintf(buffer, sizeof(buffer), "%i", socket); if ((size_t) res >= sizeof(buffer) || res == -1) @@ -106,6 +119,8 @@ static char** argvdup(int argc, char** argv) int main(int argc, char** argv) { + _sg_do_model_check = 1; + // We need to keep the original parameters in order to pass them to the // model-checked process: int argc_copy = argc; @@ -116,25 +131,6 @@ int main(int argc, char** argv) if (argc < 2) xbt_die("Missing arguments.\n"); - bool server_mode = true; - char* env = std::getenv("SIMGRID_MC_MODE"); - if (env) { - if (std::strcmp(env, "server") == 0) - server_mode = true; - else if (std::strcmp(env, "standalone") == 0) - server_mode = false; - else - xbt_die("Unrecognised value for SIMGRID_MC_MODE (server/standalone)"); - } - - if (!server_mode) { - setenv(MC_ENV_VARIABLE, "1", 1); - execvp(argv[1], argv+1); - - std::perror("simgrid-mc"); - return 127; - } - // Create a AF_LOCAL socketpair: int res;