start memory experiment

Change-Id: Ice7921a02f899c7381d15ead10b27e21df7019fb
This commit is contained in:
Björn Döbel
2013-09-11 09:07:44 +02:00
parent 32efc604e7
commit 20a9904032

View File

@ -67,7 +67,8 @@ BaseListener* L4SysExperiment::waitIOOrOther(bool clear_output) {
while (true) {
simulator.addListener(&ev_ioport);
ev = simulator.resume();
simulator.removeListener(&ev_ioport);
//log << "hello " << simulator.getListenerCount() << std::endl;
//simulator.removeListener(&ev_ioport);
if (ev == &ev_ioport) {
currentOutput += ev_ioport.getData();
} else {
@ -252,8 +253,6 @@ void L4SysExperiment::collectInstructionTrace(fail::BPSingleListener& bp)
}
size_t count = 0, inst_accepted = 0, mem = 0, mem_valid = 0;
simtime_t prevtime = 0, currtime;
simtime_diff_t deltatime;
map<address_t, unsigned> times_called_map;
bool injecting = false;
@ -278,9 +277,6 @@ void L4SysExperiment::collectInstructionTrace(fail::BPSingleListener& bp)
++count;
}
currtime = simulator.getTimerTicks();
deltatime = currtime - prevtime;
unsigned times_called = times_called_map[curr_addr];
++times_called;
times_called_map[curr_addr] = times_called;
@ -309,7 +305,7 @@ void L4SysExperiment::collectInstructionTrace(fail::BPSingleListener& bp)
++mem_valid;
Trace_Event te;
if (deltatime != 0) { te.set_time_delta(deltatime); };
te.set_time_delta(1);
te.set_ip(curr_addr);
te.set_memaddr(ML.getTriggerAddress());
te.set_accesstype( (ML.getTriggerAccessType() & MemAccessEvent::MEM_READ) ? te.READ : te.WRITE );
@ -336,7 +332,7 @@ void L4SysExperiment::collectInstructionTrace(fail::BPSingleListener& bp)
// the generic *-trace tools
// XXX: need to log CR3 if we want multiple binaries here
Trace_Event e;
if (deltatime != 0) { e.set_time_delta(deltatime); };
e.set_time_delta(1);
e.set_ip(curr_addr);
os_instr->writeMessage(&e);
} else {
@ -455,6 +451,32 @@ bool L4SysExperiment::run() {
int instr_offset = param->msg.fsppilot().injection_instr();
int regData = param->msg.fsppilot().data_address();
if (exp_type == param->msg.MEM) {
currentOutput.clear();
currentOutput.reserve(teststruct.st_size);
simulator.clearListeners();
log << "Memory fault injection at instruction " << std::hex << instr_offset
<< ", ip " << param->msg.fsppilot().injection_instr_absolute() << ", address "
<< regData << std::endl;
bp.setWatchInstructionPointer(
param->msg.fsppilot().injection_instr_absolute() & 0xFFFFFFFF);
bp.setCounter(1);
log << bp.getWatchInstructionPointer() << " - " << bp.getCounter() << std::endl;
simulator.restore(L4SYS_STATE_FOLDER);
simtime_t now = simulator.getTimerTicks();
simulator.addListener(&bp);
//and log the output
waitIOOrOther(true);
log << "Hit BP. Start time " << now << ", new time " << simulator.getTimerTicks()
<< ", diff = " << simulator.getTimerTicks() - now << std::endl;
//assert(ev == &bp);
exit(1);
}
int reg, width, offset;
reg = ((regData >> 8) & 0xF) + 1; // regs start at 1
width = (regData >> 4) & 0xF;