From 4b2b00011db860c8812b6d5e31fd5b3989890ac6 Mon Sep 17 00:00:00 2001 From: hsc Date: Wed, 11 Apr 2012 15:21:13 +0000 Subject: [PATCH] checksum-oostubs: another possible outcome (CLI+HLT) git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1055 8c4709b5-6ec9-48aa-a5cd-a96041d1645a --- core/experiments/checksum-oostubs/checksum-oostubs.proto | 3 ++- core/experiments/checksum-oostubs/experiment.cc | 7 +++++++ core/experiments/checksum-oostubs/experimentInfo.hpp | 3 +++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/core/experiments/checksum-oostubs/checksum-oostubs.proto b/core/experiments/checksum-oostubs/checksum-oostubs.proto index 11c9ad2b..b94dc470 100644 --- a/core/experiments/checksum-oostubs/checksum-oostubs.proto +++ b/core/experiments/checksum-oostubs/checksum-oostubs.proto @@ -19,7 +19,8 @@ message OOStuBSProtoMsg { enum ResultType { FINISHED = 1; TRAP = 2; - UNKNOWN = 3; + HALT = 3; + UNKNOWN = 4; } optional ResultType resulttype = 6; diff --git a/core/experiments/checksum-oostubs/experiment.cc b/core/experiments/checksum-oostubs/experiment.cc index a57644c3..aea6832d 100644 --- a/core/experiments/checksum-oostubs/experiment.cc +++ b/core/experiments/checksum-oostubs/experiment.cc @@ -195,6 +195,7 @@ bool ChecksumOOStuBSExperiment::run() // --- aftermath --- // four possible outcomes: // - guest causes a trap, "crashes" + // - guest reaches a "weird" state, stops with CLI+HLT ("panic") // - guest runs OOSTUBS_NUMINSTR+OOSTUBS_RECOVERYINSTR instructions but // never reaches finish() // - guest reaches finish() within OOSTUBS_NUMINSTR+OOSTUBS_RECOVERYINSTR @@ -205,6 +206,9 @@ bool ChecksumOOStuBSExperiment::run() // catch traps as "extraordinary" ending fi::TrapEvent ev_trap(fi::ANY_TRAP); sal::simulator.addEvent(&ev_trap); + // OOStuBS' way to terminally halt (CLI+HLT) + fi::BPEvent ev_halt(OOSTUBS_FUNC_CPU_HALT); + sal::simulator.addEvent(&ev_halt); // remaining instructions until "normal" ending fi::BPEvent ev_done(fi::ANY_ADDR); ev_done.setCounter(OOSTUBS_NUMINSTR + OOSTUBS_RECOVERYINSTR - instr_offset); @@ -246,6 +250,9 @@ bool ChecksumOOStuBSExperiment::run() if (ev == &ev_done) { log << std::dec << "Result FINISHED" << endl; param.msg.set_resulttype(param.msg.FINISHED); + } else if (ev == &ev_halt) { + log << std::dec << "Result HALT #" << endl; + param.msg.set_resulttype(param.msg.HALT); } else if (ev == &ev_trap) { log << std::dec << "Result TRAP #" << ev_trap.getTriggerNumber() << endl; param.msg.set_resulttype(param.msg.TRAP); diff --git a/core/experiments/checksum-oostubs/experimentInfo.hpp b/core/experiments/checksum-oostubs/experimentInfo.hpp index f40dbb00..40390055 100644 --- a/core/experiments/checksum-oostubs/experimentInfo.hpp +++ b/core/experiments/checksum-oostubs/experimentInfo.hpp @@ -11,6 +11,9 @@ // empty function that is called explicitly when the experiment finished // nm -C ecc.elf|fgrep "finished()" #define OOSTUBS_FUNC_FINISH 0x001093f0 +// function executing HLT with no chance for further progress (after panic()) +// nm -C ecc.elf|fgrep cpu_halt +#define OOSTUBS_FUNC_CPU_HALT 0x00100987 // number of instructions the target executes under non-error conditions from ENTRY to DONE: // (result of experiment's step #2) #define OOSTUBS_NUMINSTR 0x4a3401