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) { while (true) {
simulator.addListener(&ev_ioport); simulator.addListener(&ev_ioport);
ev = simulator.resume(); ev = simulator.resume();
simulator.removeListener(&ev_ioport); //log << "hello " << simulator.getListenerCount() << std::endl;
//simulator.removeListener(&ev_ioport);
if (ev == &ev_ioport) { if (ev == &ev_ioport) {
currentOutput += ev_ioport.getData(); currentOutput += ev_ioport.getData();
} else { } else {
@ -252,8 +253,6 @@ void L4SysExperiment::collectInstructionTrace(fail::BPSingleListener& bp)
} }
size_t count = 0, inst_accepted = 0, mem = 0, mem_valid = 0; 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; map<address_t, unsigned> times_called_map;
bool injecting = false; bool injecting = false;
@ -278,9 +277,6 @@ void L4SysExperiment::collectInstructionTrace(fail::BPSingleListener& bp)
++count; ++count;
} }
currtime = simulator.getTimerTicks();
deltatime = currtime - prevtime;
unsigned times_called = times_called_map[curr_addr]; unsigned times_called = times_called_map[curr_addr];
++times_called; ++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; ++mem_valid;
Trace_Event te; Trace_Event te;
if (deltatime != 0) { te.set_time_delta(deltatime); }; te.set_time_delta(1);
te.set_ip(curr_addr); te.set_ip(curr_addr);
te.set_memaddr(ML.getTriggerAddress()); te.set_memaddr(ML.getTriggerAddress());
te.set_accesstype( (ML.getTriggerAccessType() & MemAccessEvent::MEM_READ) ? te.READ : te.WRITE ); 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 // the generic *-trace tools
// XXX: need to log CR3 if we want multiple binaries here // XXX: need to log CR3 if we want multiple binaries here
Trace_Event e; Trace_Event e;
if (deltatime != 0) { e.set_time_delta(deltatime); }; e.set_time_delta(1);
e.set_ip(curr_addr); e.set_ip(curr_addr);
os_instr->writeMessage(&e); os_instr->writeMessage(&e);
} else { } else {
@ -455,6 +451,32 @@ bool L4SysExperiment::run() {
int instr_offset = param->msg.fsppilot().injection_instr(); int instr_offset = param->msg.fsppilot().injection_instr();
int regData = param->msg.fsppilot().data_address(); 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; int reg, width, offset;
reg = ((regData >> 8) & 0xF) + 1; // regs start at 1 reg = ((regData >> 8) & 0xF) + 1; // regs start at 1
width = (regData >> 4) & 0xF; width = (regData >> 4) & 0xF;