From 8eb7bd129a92b2cefd1c2d0acb0fe04d8e9cd192 Mon Sep 17 00:00:00 2001 From: chb Date: Wed, 5 Sep 2012 09:05:11 +0000 Subject: [PATCH] ecos_kernel_test: take width of memory accesses into account for determining bounds git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1591 8c4709b5-6ec9-48aa-a5cd-a96041d1645a --- .../ecos_kernel_test/experiment.cc | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/experiments/ecos_kernel_test/experiment.cc b/src/experiments/ecos_kernel_test/experiment.cc index b9c89222..611d930a 100644 --- a/src/experiments/ecos_kernel_test/experiment.cc +++ b/src/experiments/ecos_kernel_test/experiment.cc @@ -172,7 +172,7 @@ bool EcosKernelTestExperiment::performTrace() { // on the way, record lowest and highest memory address accessed MemAccessListener ev_mem(ANY_ADDR, MemAccessEvent::MEM_READWRITE); simulator.addListener(&ev_mem); - unsigned lowest_addr = 0; + unsigned lowest_addr = 0xFFFFFFFFUL; unsigned highest_addr = 0; // do the job, 'till the end @@ -193,15 +193,14 @@ bool EcosKernelTestExperiment::performTrace() { simulator.addListener(&time_step); } else if(ev == &ev_mem) { - unsigned trigger_addr = ev_mem.getTriggerAddress(); - if( (lowest_addr == 0) && (highest_addr == 0) ) { - lowest_addr = highest_addr = trigger_addr; + unsigned lo = ev_mem.getTriggerAddress(); + unsigned hi = lo + ev_mem.getTriggerWidth() - 1; + + if(hi > highest_addr) { + highest_addr = hi; } - else if(trigger_addr > highest_addr){ - highest_addr = trigger_addr; - } - else if(trigger_addr < lowest_addr){ - lowest_addr = trigger_addr; + if(lo < lowest_addr) { + lowest_addr = lo; } simulator.addListener(&ev_mem); } @@ -363,9 +362,9 @@ bool EcosKernelTestExperiment::faultInjection() { // 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)); + ev_mem_low.setWatchWidth(lowest_addr); + MemAccessListener ev_mem_high(highest_addr + 1, MemAccessEvent::MEM_READWRITE); + ev_mem_high.setWatchWidth(0xFFFFFFFFU - (highest_addr + 1)); simulator.addListener(&ev_mem_low); simulator.addListener(&ev_mem_high);