Example #1
0
static void
simulate(const Settings &settings, const std::vector<std::string> &args, char *envp[]) {
    // Create and configure simulator
    Simulator sim;
    if (settings.usingDebugger)
        RSIM_Debugger::attach(sim);
    sim.configure(settings.simSettings, envp);

    // Load specimen directly or via debugger
    pid_t existingPid = -1;
    char *rest = NULL;
    errno = 0;
    if (args.size()==1 && (existingPid=strtoul(args.front().c_str(), &rest, 0))>=0 && !errno && !*rest) {
        if (sim.loadSpecimen(existingPid) < 0)
            return;
    } else {
        if (sim.loadSpecimen(args) < 0)
            return;
    }

    // Run the simulation
    if (settings.catchingSignals)
        sim.activate();
    sim.main_loop();
    if (settings.catchingSignals)
        sim.deactivate();
    std::cerr <<sim.describe_termination() <<"\n";
    sim.terminate_self(); // probably doesn't return
}
Example #2
0
static void
simulate(const Settings &settings, const std::vector<std::string> &args, char *envp[]) {
    Simulator sim;

    if (settings.usingDebugger)
        RSIM_Debugger::attach(sim);

    sim.configure(settings.simSettings, envp);
    if (sim.loadSpecimen(args) < 0)
        return;
    if (settings.catchingSignals)
        sim.activate();
    sim.main_loop();
    if (settings.catchingSignals)
        sim.deactivate();
    std::cerr <<sim.describe_termination() <<"\n";
    sim.terminate_self(); // probably doesn't return
}