summaryrefslogtreecommitdiff
path: root/src/arch/arm/nativetrace.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/arm/nativetrace.cc')
-rw-r--r--src/arch/arm/nativetrace.cc15
1 files changed, 15 insertions, 0 deletions
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 */