L4Sys: some bug fixes

* Fowler's Law of Refactoring: Have test cases available.
* BjoernD's Corollary to Fowler's Law: Use these tests!

Change-Id: I3d3e48ffe08209891c6204655323cd26a0eaaebd
This commit is contained in:
Bjoern Doebel
2013-09-12 18:19:04 +02:00
parent 37eda90971
commit ff19bec52d

View File

@ -261,6 +261,9 @@ void L4SysExperiment::collectInstructionTrace(fail::BPSingleListener* bp)
ogzstream out("trace.pb"); ogzstream out("trace.pb");
ProtoOStream *os = new ProtoOStream(&out); ProtoOStream *os = new ProtoOStream(&out);
simtime_t prevtime = 0, currtime;
simtime_diff_t deltatime;
while (bp->getTriggerInstructionPointer() != L4SYS_FUNC_EXIT) { while (bp->getTriggerInstructionPointer() != L4SYS_FUNC_EXIT) {
fail::BaseListener *res = simulator.resume(); fail::BaseListener *res = simulator.resume();
address_t curr_addr = 0; address_t curr_addr = 0;
@ -277,8 +280,6 @@ void L4SysExperiment::collectInstructionTrace(fail::BPSingleListener* bp)
++count; ++count;
} }
simtime_t prevtime = 0, currtime;
simtime_diff_t deltatime;
currtime = simulator.getTimerTicks(); currtime = simulator.getTimerTicks();
deltatime = currtime - prevtime; deltatime = currtime - prevtime;
@ -306,7 +307,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); }; if (deltatime != 0) { 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 );
@ -337,7 +338,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); }; if (deltatime != 0) { e.set_time_delta(1); };
e.set_ip(curr_addr); e.set_ip(curr_addr);
os->writeMessage(&e); os->writeMessage(&e);
} else { } else {
@ -632,6 +633,8 @@ bool L4SysExperiment::run()
result->set_bit_offset(bit); result->set_bit_offset(bit);
doMemoryInjection(param->msg.fsppilot().data_address(), bit); doMemoryInjection(param->msg.fsppilot().data_address(), bit);
} else if (exp_type == param->msg.GPRFLIP) { } else if (exp_type == param->msg.GPRFLIP) {
int reg = (param->msg.fsppilot().data_address() >> 4) + 1;
result->set_register_offset(static_cast<L4SysProtoMsg_RegisterType>(reg));
result->set_bit_offset(bit + 8 * (param->msg.fsppilot().data_address() & 0xF)); result->set_bit_offset(bit + 8 * (param->msg.fsppilot().data_address() & 0xF));
doRegisterInjection(param->msg.fsppilot().data_address(), bit); doRegisterInjection(param->msg.fsppilot().data_address(), bit);
} else { } else {