ecos_kernel_test: detect memory access outside of bounds from the golden run

git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1478 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
This commit is contained in:
chb
2012-08-08 14:20:56 +00:00
parent b5b06a0448
commit 12a762dcda
2 changed files with 15 additions and 1 deletions

View File

@ -336,11 +336,21 @@ bool EcosKernelTestExperiment::faultInjection() {
// catch traps as "extraordinary" ending
TrapListener ev_trap(ANY_TRAP);
simulator.addListener(&ev_trap);
// jump outside text segment
BPRangeListener ev_below_text(ANY_ADDR, ECOS_TEXT_START - 1);
BPRangeListener ev_beyond_text(ECOS_TEXT_END + 1, ANY_ADDR);
simulator.addListener(&ev_below_text);
simulator.addListener(&ev_beyond_text);
// memory access outside of bound determined in the golden run [lowest_addr, highest_addr]
MemAccessListener ev_mem_low(0x0, MemAccessEvent::MEM_READWRITE);
ev_mem_low.setWatchWidth(lowest_addr - 2); //TODO FIXME: why - 2?
MemAccessListener ev_mem_high(highest_addr + 2, MemAccessEvent::MEM_READWRITE);
ev_mem_high.setWatchWidth(0xFFFFFFFFU - (highest_addr + 2));
simulator.addListener(&ev_mem_low);
simulator.addListener(&ev_mem_high);
// timeout (e.g., stuck in a HLT instruction)
// 10000us = 500000 instructions
TimerListener ev_timeout(500000);
@ -428,6 +438,9 @@ bool EcosKernelTestExperiment::faultInjection() {
} else if (ev == &ev_below_text || ev == &ev_beyond_text) {
log << "Result OUTSIDE" << endl;
result->set_resulttype(result->OUTSIDE);
} else if (ev == &ev_mem_low || ev == &ev_mem_high) {
log << "Result MEMORYACCESS" << endl;
result->set_resulttype(result->MEMORYACCESS);
} else if (ev == &ev_trap) {
log << dec << "Result TRAP #" << ev_trap.getTriggerNumber() << endl;
result->set_resulttype(result->TRAP);