diff --git a/core/experiments/weathermonitor/experiment.cc b/core/experiments/weathermonitor/experiment.cc index 4b314860..cd058062 100644 --- a/core/experiments/weathermonitor/experiment.cc +++ b/core/experiments/weathermonitor/experiment.cc @@ -226,6 +226,7 @@ bool WeathermonitorExperiment::run() // - (XXX weird instructions?) // - (XXX results displayed?) // - reaches THE END + // - error detected, stop // additional info: // - #loop iterations before/after FI // - (XXX "sane" display?) @@ -238,6 +239,9 @@ bool WeathermonitorExperiment::run() fi::BPRangeEvent ev_beyond_text(WEATHER_TEXT_END + 1, fi::ANY_ADDR); sal::simulator.addEvent(&ev_below_text); sal::simulator.addEvent(&ev_beyond_text); + // error detected + fi::BPEvent ev_detected(WEATHER_FUNC_VPTR_PANIC); + sal::simulator.addEvent(&ev_detected); #if LOCAL && 0 // XXX debug @@ -276,6 +280,9 @@ bool WeathermonitorExperiment::run() std::stringstream ss; ss << ev_trap.getTriggerNumber(); result->set_details(ss.str()); + } else if (ev == &ev_detected) { + log << std::dec << "Result DETECTED" << endl; + result->set_resulttype(result->DETECTED); } else { log << "Result WTF?" << endl; result->set_resulttype(result->UNKNOWN); diff --git a/core/experiments/weathermonitor/experimentInfo.hpp b/core/experiments/weathermonitor/experimentInfo.hpp index 03632cd7..12ee4a74 100644 --- a/core/experiments/weathermonitor/experimentInfo.hpp +++ b/core/experiments/weathermonitor/experimentInfo.hpp @@ -14,6 +14,8 @@ #define WEATHER_FUNC_WAIT_BEGIN 0x00100f50 // wait_end address #define WEATHER_FUNC_WAIT_END 0x00100f60 +// vptr_panic address (only exists in guarded variant) +#define WEATHER_FUNC_VPTR_PANIC 0x99999999 // number of main loop iterations to trace // (determines trace length and therefore fault-space width) #define WEATHER_NUMITER_TRACING 4 diff --git a/core/experiments/weathermonitor/experimentInfo.hpp.sh b/core/experiments/weathermonitor/experimentInfo.hpp.sh index a23e40da..0cd27161 100755 --- a/core/experiments/weathermonitor/experimentInfo.hpp.sh +++ b/core/experiments/weathermonitor/experimentInfo.hpp.sh @@ -3,7 +3,7 @@ set -e [ ! -e "$1" -o ! -e "$2" ] && echo "usage: $0 vanilla.elf guarded.elf" && exit 1 -function addrof() { nm -C $1 | fgrep "$2" | awk '{print $1}'; } +function addrof() { nm -C $1 | (fgrep "$2" || echo 99999999) | awk '{print $1}'; } cat >experimentInfo.hpp <experimentInfo.hpp <