summaryrefslogtreecommitdiff
path: root/src/cpu/inorder/resource.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/inorder/resource.cc')
-rw-r--r--src/cpu/inorder/resource.cc19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/cpu/inorder/resource.cc b/src/cpu/inorder/resource.cc
index a21536676..817cc5868 100644
--- a/src/cpu/inorder/resource.cc
+++ b/src/cpu/inorder/resource.cc
@@ -336,6 +336,25 @@ Resource::squashDueToMemStall(DynInstPtr inst, int stage_num,
squash(inst, stage_num, squash_seq_num, tid);
}
+void
+Resource::squashThenTrap(int stage_num, DynInstPtr inst)
+{
+ ThreadID tid = inst->readTid();
+
+ inst->setSquashInfo(stage_num);
+ setupSquash(inst, stage_num, tid);
+
+ if (inst->traceData && DTRACE(ExecFaulting)) {
+ inst->traceData->setStageCycle(stage_num, curTick());
+ inst->traceData->setFetchSeq(inst->seqNum);
+ inst->traceData->dump();
+ delete inst->traceData;
+ inst->traceData = NULL;
+ }
+
+ cpu->trapContext(inst->fault, tid, inst);
+}
+
Tick
Resource::ticks(int num_cycles)
{