weather-monitor: renamed logger object
This change renames the logger object used in weather-monitor from "log" to "LOG" in order to circumvent potential naming conflicts with e.g. the log() function from e.g. math.h/cmath. Change-Id: I73758374f76ea5c29cb636ae3e0685a4a4cceacb
This commit is contained in:
@ -180,8 +180,8 @@ bool WeatherMonitorExperiment::establishState(guest_address_t& entry)
|
|||||||
// STEP 1: run until interesting function starts, and save state
|
// STEP 1: run until interesting function starts, and save state
|
||||||
bp.setWatchInstructionPointer(entry);
|
bp.setWatchInstructionPointer(entry);
|
||||||
simulator.addListenerAndResume(&bp);
|
simulator.addListenerAndResume(&bp);
|
||||||
log << "test function entry reached, saving state" << endl;
|
LOG << "test function entry reached, saving state" << endl;
|
||||||
log << "EIP = " << hex << bp.getTriggerInstructionPointer() << endl;
|
LOG << "EIP = " << hex << bp.getTriggerInstructionPointer() << endl;
|
||||||
simulator.save(filename_state(m_variant, m_benchmark).c_str());
|
simulator.save(filename_state(m_variant, m_benchmark).c_str());
|
||||||
assert(bp.getTriggerInstructionPointer() == entry);
|
assert(bp.getTriggerInstructionPointer() == entry);
|
||||||
assert(simulator.getCPU(0).getInstructionPointer() == entry);
|
assert(simulator.getCPU(0).getInstructionPointer() == entry);
|
||||||
@ -196,12 +196,12 @@ bool WeatherMonitorExperiment::performTrace(
|
|||||||
guest_address_t& wait_end)
|
guest_address_t& wait_end)
|
||||||
{
|
{
|
||||||
// STEP 2: record trace for fault-space pruning
|
// STEP 2: record trace for fault-space pruning
|
||||||
log << "STEP 2 restoring state" << endl;
|
LOG << "STEP 2 restoring state" << endl;
|
||||||
simulator.restore(filename_state(m_variant, m_benchmark).c_str());
|
simulator.restore(filename_state(m_variant, m_benchmark).c_str());
|
||||||
log << "EIP = " << hex << simulator.getCPU(0).getInstructionPointer() << endl;
|
LOG << "EIP = " << hex << simulator.getCPU(0).getInstructionPointer() << endl;
|
||||||
assert(simulator.getCPU(0).getInstructionPointer() == entry);
|
assert(simulator.getCPU(0).getInstructionPointer() == entry);
|
||||||
|
|
||||||
log << "enabling tracing" << endl;
|
LOG << "enabling tracing" << endl;
|
||||||
TracingPlugin tp;
|
TracingPlugin tp;
|
||||||
|
|
||||||
// TODO: record max(ESP)
|
// TODO: record max(ESP)
|
||||||
@ -244,18 +244,18 @@ bool WeatherMonitorExperiment::performTrace(
|
|||||||
simulator.addListener(&ev_count);
|
simulator.addListener(&ev_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
log << dec << "tracing finished after " << numinstr_tracing
|
LOG << dec << "tracing finished after " << numinstr_tracing
|
||||||
<< " instructions, seeing wait_end " << WEATHER_NUMITER_TRACING << " times" << endl;
|
<< " instructions, seeing wait_end " << WEATHER_NUMITER_TRACING << " times" << endl;
|
||||||
simulator.removeFlow(&tp);
|
simulator.removeFlow(&tp);
|
||||||
|
|
||||||
// serialize trace to file
|
// serialize trace to file
|
||||||
if (of.fail()) {
|
if (of.fail()) {
|
||||||
log << "failed to write " << filename_trace(m_variant, m_benchmark) << endl;
|
LOG << "failed to write " << filename_trace(m_variant, m_benchmark) << endl;
|
||||||
simulator.clearListeners(this); // cleanup
|
simulator.clearListeners(this); // cleanup
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
of.close();
|
of.close();
|
||||||
log << "trace written to " << filename_trace(m_variant, m_benchmark) << endl;
|
LOG << "trace written to " << filename_trace(m_variant, m_benchmark) << endl;
|
||||||
|
|
||||||
// wait another WEATHER_NUMITER_AFTER measurement loop iterations
|
// wait another WEATHER_NUMITER_AFTER measurement loop iterations
|
||||||
bp.setWatchInstructionPointer(wait_end);
|
bp.setWatchInstructionPointer(wait_end);
|
||||||
@ -270,11 +270,11 @@ bool WeatherMonitorExperiment::performTrace(
|
|||||||
simulator.addListener(&ev_count);
|
simulator.addListener(&ev_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
log << dec << "experiment finished after " << numinstr_after
|
LOG << dec << "experiment finished after " << numinstr_after
|
||||||
<< " instructions, seeing wait_end " << WEATHER_NUMITER_AFTER << " times" << endl;
|
<< " instructions, seeing wait_end " << WEATHER_NUMITER_AFTER << " times" << endl;
|
||||||
|
|
||||||
if (!writeTraceInfo(numinstr_tracing, numinstr_after)) {
|
if (!writeTraceInfo(numinstr_tracing, numinstr_after)) {
|
||||||
log << "failed to write " << filename_traceinfo(m_variant, m_benchmark) << endl;
|
LOG << "failed to write " << filename_traceinfo(m_variant, m_benchmark) << endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -288,11 +288,11 @@ bool WeatherMonitorExperiment::faultInjection()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// get an experiment parameter set
|
// get an experiment parameter set
|
||||||
log << "asking job server for experiment parameters" << endl;
|
LOG << "asking job server for experiment parameters" << endl;
|
||||||
WeatherMonitorExperimentData param;
|
WeatherMonitorExperimentData param;
|
||||||
#if !LOCAL
|
#if !LOCAL
|
||||||
if (!m_jc.getParam(param)) {
|
if (!m_jc.getParam(param)) {
|
||||||
log << "Dying." << endl;
|
LOG << "Dying." << endl;
|
||||||
// communicate that we were told to die
|
// communicate that we were told to die
|
||||||
simulator.terminate(1);
|
simulator.terminate(1);
|
||||||
}
|
}
|
||||||
@ -308,19 +308,19 @@ bool WeatherMonitorExperiment::faultInjection()
|
|||||||
unsigned injection_instr = param.msg.fsppilot().injection_instr();
|
unsigned injection_instr = param.msg.fsppilot().injection_instr();
|
||||||
|
|
||||||
/* get symbols from ELF */
|
/* get symbols from ELF */
|
||||||
log << "retrieving ELF addresses..." << endl;
|
LOG << "retrieving ELF addresses..." << endl;
|
||||||
guest_address_t entry, text_start, text_end, data_start, data_end, wait_begin, wait_end, vptr_panic;
|
guest_address_t entry, text_start, text_end, data_start, data_end, wait_begin, wait_end, vptr_panic;
|
||||||
if (!readElfSymbols(entry, text_start, text_end, data_start, data_end, wait_begin, wait_end, vptr_panic)) {
|
if (!readElfSymbols(entry, text_start, text_end, data_start, data_end, wait_begin, wait_end, vptr_panic)) {
|
||||||
log << "failed, essential symbols are missing!" << endl;
|
LOG << "failed, essential symbols are missing!" << endl;
|
||||||
simulator.terminate(1);
|
simulator.terminate(1);
|
||||||
} else {
|
} else {
|
||||||
log << "successfully retrieved ELF's addresses." << endl;
|
LOG << "successfully retrieved ELF's addresses." << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get NUMINSTR_TRACING and NUMINSTR_AFTER */
|
/* get NUMINSTR_TRACING and NUMINSTR_AFTER */
|
||||||
unsigned numinstr_tracing, numinstr_after;
|
unsigned numinstr_tracing, numinstr_after;
|
||||||
if (!readTraceInfo(numinstr_tracing, numinstr_after)) {
|
if (!readTraceInfo(numinstr_tracing, numinstr_after)) {
|
||||||
log << "failed to read trace info from " << filename_traceinfo(m_variant, m_benchmark) << endl;
|
LOG << "failed to read trace info from " << filename_traceinfo(m_variant, m_benchmark) << endl;
|
||||||
simulator.terminate(1);
|
simulator.terminate(1);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -334,10 +334,10 @@ bool WeatherMonitorExperiment::faultInjection()
|
|||||||
// 8 results in one job
|
// 8 results in one job
|
||||||
WeathermonitorProtoMsg_Result *result = param.msg.add_result();
|
WeathermonitorProtoMsg_Result *result = param.msg.add_result();
|
||||||
result->set_bitoffset(bit_offset);
|
result->set_bitoffset(bit_offset);
|
||||||
log << dec << "job " << id << " instr " << injection_instr
|
LOG << dec << "job " << id << " instr " << injection_instr
|
||||||
<< " mem " << data_address << "+" << bit_offset << endl;
|
<< " mem " << data_address << "+" << bit_offset << endl;
|
||||||
|
|
||||||
log << "restoring state" << endl;
|
LOG << "restoring state" << endl;
|
||||||
simulator.restore(filename_state(m_variant, m_benchmark).c_str());
|
simulator.restore(filename_state(m_variant, m_benchmark).c_str());
|
||||||
|
|
||||||
// XXX debug
|
// XXX debug
|
||||||
@ -383,7 +383,7 @@ bool WeatherMonitorExperiment::faultInjection()
|
|||||||
// note at what IP we did it
|
// note at what IP we did it
|
||||||
uint32_t injection_ip = simulator.getCPU(0).getInstructionPointer();
|
uint32_t injection_ip = simulator.getCPU(0).getInstructionPointer();
|
||||||
result->set_iter_before_fi(count_loop_iter_before);
|
result->set_iter_before_fi(count_loop_iter_before);
|
||||||
log << "fault injected @ ip " << injection_ip
|
LOG << "fault injected @ ip " << injection_ip
|
||||||
<< " 0x" << hex << ((int)data) << " -> 0x" << ((int)newdata) << endl;
|
<< " 0x" << hex << ((int)data) << " -> 0x" << ((int)newdata) << endl;
|
||||||
// sanity check
|
// sanity check
|
||||||
if (param.msg.fsppilot().has_injection_instr_absolute() &&
|
if (param.msg.fsppilot().has_injection_instr_absolute() &&
|
||||||
@ -391,7 +391,7 @@ bool WeatherMonitorExperiment::faultInjection()
|
|||||||
stringstream ss;
|
stringstream ss;
|
||||||
ss << "SANITY CHECK FAILED: " << injection_ip
|
ss << "SANITY CHECK FAILED: " << injection_ip
|
||||||
<< " != " << param.msg.fsppilot().injection_instr_absolute();
|
<< " != " << param.msg.fsppilot().injection_instr_absolute();
|
||||||
log << ss.str() << endl;
|
LOG << ss.str() << endl;
|
||||||
result->set_resulttype(result->UNKNOWN);
|
result->set_resulttype(result->UNKNOWN);
|
||||||
result->set_latest_ip(injection_ip);
|
result->set_latest_ip(injection_ip);
|
||||||
result->set_details(ss.str());
|
result->set_details(ss.str());
|
||||||
@ -432,7 +432,7 @@ bool WeatherMonitorExperiment::faultInjection()
|
|||||||
|
|
||||||
#if LOCAL && 0
|
#if LOCAL && 0
|
||||||
// XXX debug
|
// XXX debug
|
||||||
log << "enabling tracing" << endl;
|
LOG << "enabling tracing" << endl;
|
||||||
TracingPlugin tp;
|
TracingPlugin tp;
|
||||||
tp.setLogIPOnly(true);
|
tp.setLogIPOnly(true);
|
||||||
tp.setOstream(&cout);
|
tp.setOstream(&cout);
|
||||||
@ -454,28 +454,28 @@ bool WeatherMonitorExperiment::faultInjection()
|
|||||||
result->set_latest_ip(simulator.getCPU(0).getInstructionPointer());
|
result->set_latest_ip(simulator.getCPU(0).getInstructionPointer());
|
||||||
|
|
||||||
if (ev == &ev_end) {
|
if (ev == &ev_end) {
|
||||||
log << "Result FINISHED (" << dec
|
LOG << "Result FINISHED (" << dec
|
||||||
<< count_loop_iter_before << "+" << count_loop_iter_after << ")" << endl;
|
<< count_loop_iter_before << "+" << count_loop_iter_after << ")" << endl;
|
||||||
result->set_resulttype(result->FINISHED);
|
result->set_resulttype(result->FINISHED);
|
||||||
} else if (ev == &ev_timeout) {
|
} else if (ev == &ev_timeout) {
|
||||||
log << "Result TIMEOUT (" << dec
|
LOG << "Result TIMEOUT (" << dec
|
||||||
<< count_loop_iter_before << "+" << count_loop_iter_after << ")" << endl;
|
<< count_loop_iter_before << "+" << count_loop_iter_after << ")" << endl;
|
||||||
result->set_resulttype(result->TIMEOUT);
|
result->set_resulttype(result->TIMEOUT);
|
||||||
} else if (ev == &ev_below_text || ev == &ev_beyond_text) {
|
} else if (ev == &ev_below_text || ev == &ev_beyond_text) {
|
||||||
log << "Result OUTSIDE" << endl;
|
LOG << "Result OUTSIDE" << endl;
|
||||||
result->set_resulttype(result->OUTSIDE);
|
result->set_resulttype(result->OUTSIDE);
|
||||||
} else if (ev == &ev_trap) {
|
} else if (ev == &ev_trap) {
|
||||||
log << dec << "Result TRAP #" << ev_trap.getTriggerNumber() << endl;
|
LOG << dec << "Result TRAP #" << ev_trap.getTriggerNumber() << endl;
|
||||||
result->set_resulttype(result->TRAP);
|
result->set_resulttype(result->TRAP);
|
||||||
|
|
||||||
stringstream ss;
|
stringstream ss;
|
||||||
ss << ev_trap.getTriggerNumber();
|
ss << ev_trap.getTriggerNumber();
|
||||||
result->set_details(ss.str());
|
result->set_details(ss.str());
|
||||||
} else if (ev == &ev_detected) {
|
} else if (ev == &ev_detected) {
|
||||||
log << dec << "Result DETECTED" << endl;
|
LOG << dec << "Result DETECTED" << endl;
|
||||||
result->set_resulttype(result->DETECTED);
|
result->set_resulttype(result->DETECTED);
|
||||||
} else {
|
} else {
|
||||||
log << "Result WTF?" << endl;
|
LOG << "Result WTF?" << endl;
|
||||||
result->set_resulttype(result->UNKNOWN);
|
result->set_resulttype(result->UNKNOWN);
|
||||||
|
|
||||||
stringstream ss;
|
stringstream ss;
|
||||||
@ -485,7 +485,7 @@ bool WeatherMonitorExperiment::faultInjection()
|
|||||||
}
|
}
|
||||||
// sanity check: do we have exactly 8 results?
|
// sanity check: do we have exactly 8 results?
|
||||||
if (param.msg.result_size() != 8) {
|
if (param.msg.result_size() != 8) {
|
||||||
log << "WTF? param.msg.result_size() != 8" << endl;
|
LOG << "WTF? param.msg.result_size() != 8" << endl;
|
||||||
} else {
|
} else {
|
||||||
#if !LOCAL
|
#if !LOCAL
|
||||||
m_jc.sendResult(param);
|
m_jc.sendResult(param);
|
||||||
@ -501,32 +501,32 @@ bool WeatherMonitorExperiment::faultInjection()
|
|||||||
|
|
||||||
bool WeatherMonitorExperiment::run()
|
bool WeatherMonitorExperiment::run()
|
||||||
{
|
{
|
||||||
log << "startup" << endl;
|
LOG << "startup" << endl;
|
||||||
#if PREREQUISITES
|
#if PREREQUISITES
|
||||||
parseOptions();
|
parseOptions();
|
||||||
|
|
||||||
/* get symbols from ELF */
|
/* get symbols from ELF */
|
||||||
log << "retrieving ELF addresses..." << endl;
|
LOG << "retrieving ELF addresses..." << endl;
|
||||||
guest_address_t entry, text_start, text_end, data_start, data_end, wait_begin, wait_end, vptr_panic;
|
guest_address_t entry, text_start, text_end, data_start, data_end, wait_begin, wait_end, vptr_panic;
|
||||||
if (!readElfSymbols(entry, text_start, text_end, data_start, data_end, wait_begin, wait_end, vptr_panic)) {
|
if (!readElfSymbols(entry, text_start, text_end, data_start, data_end, wait_begin, wait_end, vptr_panic)) {
|
||||||
log << "failed, essential symbols are missing!" << endl;
|
LOG << "failed, essential symbols are missing!" << endl;
|
||||||
simulator.terminate(1);
|
simulator.terminate(1);
|
||||||
} else {
|
} else {
|
||||||
log << "successfully retrieved ELF's addresses." << endl;
|
LOG << "successfully retrieved ELF's addresses." << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
//STEP 1
|
//STEP 1
|
||||||
if (establishState(entry)) {
|
if (establishState(entry)) {
|
||||||
log << "STEP 1 (establish state) finished." << endl;
|
LOG << "STEP 1 (establish state) finished." << endl;
|
||||||
} else {
|
} else {
|
||||||
log << "STEP 1 (establish state) failed!" << endl;
|
LOG << "STEP 1 (establish state) failed!" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
//STEP 2
|
//STEP 2
|
||||||
if (performTrace(entry, data_start, data_end, wait_end)) {
|
if (performTrace(entry, data_start, data_end, wait_end)) {
|
||||||
log << "STEP 2 (perform trace) finished." << endl;
|
LOG << "STEP 2 (perform trace) finished." << endl;
|
||||||
} else {
|
} else {
|
||||||
log << "STEP 2 (perform trace) failed!" << endl;
|
LOG << "STEP 2 (perform trace) failed!" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else // !PREREQUISITES i.e. STEP 3 "the actual experiment"
|
#else // !PREREQUISITES i.e. STEP 3 "the actual experiment"
|
||||||
|
|||||||
@ -15,7 +15,7 @@ class WeatherMonitorExperiment : public fail::ExperimentFlow {
|
|||||||
std::string m_variant, m_benchmark;
|
std::string m_variant, m_benchmark;
|
||||||
static const std::string dir_images;
|
static const std::string dir_images;
|
||||||
static const std::string dir_prerequisites;
|
static const std::string dir_prerequisites;
|
||||||
fail::Logger log;
|
fail::Logger LOG;
|
||||||
fail::BPSingleListener bp;
|
fail::BPSingleListener bp;
|
||||||
|
|
||||||
std::string filename_elf(const std::string& variant, const std::string& benchmark);
|
std::string filename_elf(const std::string& variant, const std::string& benchmark);
|
||||||
@ -34,7 +34,7 @@ class WeatherMonitorExperiment : public fail::ExperimentFlow {
|
|||||||
bool faultInjection();
|
bool faultInjection();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
WeatherMonitorExperiment() : log("Weathermonitor", false) {}
|
WeatherMonitorExperiment() : LOG("Weathermonitor", false) {}
|
||||||
bool run();
|
bool run();
|
||||||
void parseOptions(void);
|
void parseOptions(void);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user