summaryrefslogtreecommitdiff
path: root/src/cpu/inorder/resource.cc
diff options
context:
space:
mode:
authorKorey Sewell <ksewell@umich.edu>2011-06-19 21:43:39 -0400
committerKorey Sewell <ksewell@umich.edu>2011-06-19 21:43:39 -0400
commit5f608dd2e9a760b4280fb03ce82a11a62c6f3af9 (patch)
tree725a942e67f2efeffaa84c4385afc81424e142ee /src/cpu/inorder/resource.cc
parente0e387c2a926dcdb53f85d8189e6d7158765b4ac (diff)
downloadgem5-5f608dd2e9a760b4280fb03ce82a11a62c6f3af9.tar.xz
inorder: squash and trap behind a tlb fault
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)
{