From 4886d8250d6e78a4853006c0fea755d49a509405 Mon Sep 17 00:00:00 2001 From: hsc Date: Thu, 13 Sep 2012 20:08:45 +0000 Subject: [PATCH] RAMpage experiment now utilizes serial I/O and timers git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1640 8c4709b5-6ec9-48aa-a5cd-a96041d1645a --- src/experiments/rampage/experiment.cc | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/experiments/rampage/experiment.cc b/src/experiments/rampage/experiment.cc index 7d0cb842..da211759 100644 --- a/src/experiments/rampage/experiment.cc +++ b/src/experiments/rampage/experiment.cc @@ -29,6 +29,7 @@ using namespace fail; bool RAMpageExperiment::run() { + string output; Logger log("RAMpage", false); address_t addr1 = 1024*1024*62+3; int bit1 = 3; @@ -38,15 +39,16 @@ bool RAMpageExperiment::run() // not implemented yet for QEMU: //simulator.restore("rampage-cext-started"); - // TODO: Timeout - // TODO: Serial - MemWriteListener l_mem1(addr1); MemoryManager& mm = simulator.getMemoryManager(); IOPortListener l_io(0x2f8, true); // ttyS1 aka COM2 + TimerListener l_timeout_local(1000*60*10); // 10m + TimerListener l_timeout_global(1000*60*30); // 30m simulator.addListener(&l_mem1); simulator.addListener(&l_io); + simulator.addListener(&l_timeout_local); + simulator.addListener(&l_timeout_global); while (true) { BaseListener *l = simulator.resume(); @@ -76,7 +78,23 @@ bool RAMpageExperiment::run() log << "access to addr 0x" << std::hex << addr1 << ", FI!" << endl; } else if (l == &l_io) { simulator.addListener(&l_io); - std::cout << l_io.getData() << std::endl; + output += l_io.getData(); + if (l_io.getData() == '\n') { + // calculating stats + // starting test pass + // tested %08x-%08x %08x-%08x ... + // bad frame at pfn %08x + // TODO scan + react + output.clear(); + + // restart local timer + simulator.removeListener(&l_timeout_local); + simulator.addListener(&l_timeout_local); + } + } else if (l == &l_timeout_local) { + log << "local timeout" << std::endl; + } else if (l == &l_timeout_global) { + log << "global timeout" << std::endl; } }