From 8ec235c7b189c3ae1bf13358774add595710cfd6 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Mon, 27 Jul 2009 00:54:09 -0700 Subject: ARM: Make native trace print out what instruction caused an error. --- src/arch/arm/nativetrace.cc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/arch/arm') diff --git a/src/arch/arm/nativetrace.cc b/src/arch/arm/nativetrace.cc index 2dd0b8575..7301653f4 100644 --- a/src/arch/arm/nativetrace.cc +++ b/src/arch/arm/nativetrace.cc @@ -86,6 +86,7 @@ Trace::ArmNativeTrace::check(NativeTraceRecord *record) nState.update(this); mState.update(record->getThread()); + bool errorFound = false; // Regular int regs for (int i = 0; i < STATE_NUMVALS; i++) { if (nState.changed[i] || mState.changed[i]) { @@ -104,6 +105,7 @@ Trace::ArmNativeTrace::check(NativeTraceRecord *record) vergence, regNames[i], nState.newState[i], mState.oldState[i], mState.newState[i]); + errorFound = true; } else if (!mState.changed[i]) { DPRINTF(ExecRegDelta, "%s [%5s] "\ "Native: %#010x => %#010x "\ @@ -111,6 +113,7 @@ Trace::ArmNativeTrace::check(NativeTraceRecord *record) vergence, regNames[i], nState.oldState[i], nState.newState[i], mState.newState[i]); + errorFound = true; } else if (mState.oldState[i] != nState.oldState[i] || mState.newState[i] != nState.newState[i]) { DPRINTF(ExecRegDelta, "%s [%5s] "\ @@ -119,9 +122,21 @@ Trace::ArmNativeTrace::check(NativeTraceRecord *record) vergence, regNames[i], nState.oldState[i], nState.newState[i], mState.oldState[i], mState.newState[i]); + errorFound = true; } } } + if (errorFound) { + StaticInstPtr inst = record->getStaticInst(); + assert(inst); + bool ran = true; + if (inst->isMicroop()) { + ran = false; + inst = record->getMacroStaticInst(); + } + assert(inst); + record->traceInst(inst, ran); + } } } /* namespace Trace */ -- cgit v1.2.3