diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2010-09-13 19:26:03 -0700 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2010-09-13 19:26:03 -0700 |
commit | 6833ca7eedd351596bb1518620af7465f5172fcd (patch) | |
tree | 4a67b3d591132dab3e8273fc9dfba606a1720e4a /src/arch/alpha | |
parent | 2edfcbbaee87c1a28351fc0dcd81d52d0d9102a4 (diff) | |
download | gem5-6833ca7eedd351596bb1518620af7465f5172fcd.tar.xz |
Faults: Pass the StaticInst involved, if any, to a Fault's invoke method.
Also move the "Fault" reference counted pointer type into a separate file,
sim/fault.hh. It would be better to name this less similarly to sim/faults.hh
to reduce confusion, but fault.hh matches the name of the type. We could change
Fault to FaultPtr to match other pointer types, and then changing the name of
the file would make more sense.
Diffstat (limited to 'src/arch/alpha')
-rw-r--r-- | src/arch/alpha/faults.cc | 17 | ||||
-rw-r--r-- | src/arch/alpha/faults.hh | 19 | ||||
-rw-r--r-- | src/arch/alpha/isa.cc | 2 | ||||
-rw-r--r-- | src/arch/alpha/process.cc | 1 | ||||
-rw-r--r-- | src/arch/alpha/tlb.hh | 2 | ||||
-rw-r--r-- | src/arch/alpha/tru64/process.cc | 1 |
6 files changed, 27 insertions, 15 deletions
diff --git a/src/arch/alpha/faults.cc b/src/arch/alpha/faults.cc index 3264fc8b2..9d4eeda8a 100644 --- a/src/arch/alpha/faults.cc +++ b/src/arch/alpha/faults.cc @@ -110,7 +110,7 @@ FaultStat IntegerOverflowFault::_count; #if FULL_SYSTEM void -AlphaFault::invoke(ThreadContext *tc) +AlphaFault::invoke(ThreadContext *tc, StaticInstPtr inst) { FaultBase::invoke(tc); countStat()++; @@ -130,14 +130,14 @@ AlphaFault::invoke(ThreadContext *tc) } void -ArithmeticFault::invoke(ThreadContext *tc) +ArithmeticFault::invoke(ThreadContext *tc, StaticInstPtr inst) { FaultBase::invoke(tc); panic("Arithmetic traps are unimplemented!"); } void -DtbFault::invoke(ThreadContext *tc) +DtbFault::invoke(ThreadContext *tc, StaticInstPtr inst) { // Set fault address and flags. Even though we're modeling an // EV5, we use the EV6 technique of not latching fault registers @@ -150,9 +150,10 @@ DtbFault::invoke(ThreadContext *tc) tc->setMiscRegNoEffect(IPR_VA, vaddr); // set MM_STAT register flags + MachInst machInst = inst->machInst; tc->setMiscRegNoEffect(IPR_MM_STAT, - (((Opcode(tc->getInst()) & 0x3f) << 11) | - ((Ra(tc->getInst()) & 0x1f) << 6) | + (((Opcode(machInst) & 0x3f) << 11) | + ((Ra(machInst) & 0x1f) << 6) | (flags & 0x3f))); // set VA_FORM register with faulting formatted address @@ -164,7 +165,7 @@ DtbFault::invoke(ThreadContext *tc) } void -ItbFault::invoke(ThreadContext *tc) +ItbFault::invoke(ThreadContext *tc, StaticInstPtr inst) { if (!tc->misspeculating()) { tc->setMiscRegNoEffect(IPR_ITB_TAG, pc); @@ -178,7 +179,7 @@ ItbFault::invoke(ThreadContext *tc) #else void -ItbPageFault::invoke(ThreadContext *tc) +ItbPageFault::invoke(ThreadContext *tc, StaticInstPtr inst) { Process *p = tc->getProcessPtr(); TlbEntry entry; @@ -192,7 +193,7 @@ ItbPageFault::invoke(ThreadContext *tc) } void -NDtbMissFault::invoke(ThreadContext *tc) +NDtbMissFault::invoke(ThreadContext *tc, StaticInstPtr inst) { Process *p = tc->getProcessPtr(); TlbEntry entry; diff --git a/src/arch/alpha/faults.hh b/src/arch/alpha/faults.hh index 9d90c7719..2b45a430c 100644 --- a/src/arch/alpha/faults.hh +++ b/src/arch/alpha/faults.hh @@ -34,6 +34,7 @@ #include "arch/alpha/pagetable.hh" #include "config/full_system.hh" +#include "mem/request.hh" #include "sim/faults.hh" // The design of the "name" and "vect" functions is in sim/faults.hh @@ -49,7 +50,8 @@ class AlphaFault : public FaultBase virtual bool setRestartAddress() {return true;} public: #if FULL_SYSTEM - void invoke(ThreadContext * tc); + void invoke(ThreadContext * tc, + StaticInstPtr inst = StaticInst::nullStaticInstPtr); #endif virtual FaultVect vect() = 0; virtual FaultStat & countStat() = 0; @@ -116,7 +118,8 @@ class ArithmeticFault : public AlphaFault FaultVect vect() {return _vect;} FaultStat & countStat() {return _count;} #if FULL_SYSTEM - void invoke(ThreadContext * tc); + void invoke(ThreadContext * tc, + StaticInstPtr inst = StaticInst::nullStaticInstPtr); #endif }; @@ -151,7 +154,8 @@ class DtbFault : public AlphaFault FaultVect vect() = 0; FaultStat & countStat() = 0; #if FULL_SYSTEM - void invoke(ThreadContext * tc); + void invoke(ThreadContext * tc, + StaticInstPtr inst = StaticInst::nullStaticInstPtr); #endif }; @@ -170,7 +174,8 @@ class NDtbMissFault : public DtbFault FaultVect vect() {return _vect;} FaultStat & countStat() {return _count;} #if !FULL_SYSTEM - void invoke(ThreadContext * tc); + void invoke(ThreadContext * tc, + StaticInstPtr inst = StaticInst::nullStaticInstPtr); #endif }; @@ -249,7 +254,8 @@ class ItbFault : public AlphaFault FaultVect vect() = 0; FaultStat & countStat() = 0; #if FULL_SYSTEM - void invoke(ThreadContext * tc); + void invoke(ThreadContext * tc, + StaticInstPtr inst = StaticInst::nullStaticInstPtr); #endif }; @@ -266,7 +272,8 @@ class ItbPageFault : public ItbFault FaultVect vect() {return _vect;} FaultStat & countStat() {return _count;} #if !FULL_SYSTEM - void invoke(ThreadContext * tc); + void invoke(ThreadContext * tc, + StaticInstPtr inst = StaticInst::nullStaticInstPtr); #endif }; diff --git a/src/arch/alpha/isa.cc b/src/arch/alpha/isa.cc index 8b6da3649..d89026ba7 100644 --- a/src/arch/alpha/isa.cc +++ b/src/arch/alpha/isa.cc @@ -28,6 +28,8 @@ * Authors: Gabe Black */ +#include <cassert> + #include "arch/alpha/isa.hh" #include "base/misc.hh" #include "cpu/thread_context.hh" diff --git a/src/arch/alpha/process.cc b/src/arch/alpha/process.cc index 431ef86c0..c65cf2d37 100644 --- a/src/arch/alpha/process.cc +++ b/src/arch/alpha/process.cc @@ -36,6 +36,7 @@ #include "base/misc.hh" #include "cpu/thread_context.hh" #include "mem/page_table.hh" +#include "sim/byteswap.hh" #include "sim/process_impl.hh" #include "sim/system.hh" diff --git a/src/arch/alpha/tlb.hh b/src/arch/alpha/tlb.hh index b84c26451..ed7e7ab61 100644 --- a/src/arch/alpha/tlb.hh +++ b/src/arch/alpha/tlb.hh @@ -42,7 +42,7 @@ #include "base/statistics.hh" #include "mem/request.hh" #include "params/AlphaTLB.hh" -#include "sim/faults.hh" +#include "sim/fault.hh" #include "sim/tlb.hh" class ThreadContext; diff --git a/src/arch/alpha/tru64/process.cc b/src/arch/alpha/tru64/process.cc index 824e0413c..9aae7e155 100644 --- a/src/arch/alpha/tru64/process.cc +++ b/src/arch/alpha/tru64/process.cc @@ -34,6 +34,7 @@ #include "arch/alpha/tru64/process.hh" #include "cpu/thread_context.hh" #include "kern/tru64/tru64.hh" +#include "sim/byteswap.hh" #include "sim/process.hh" #include "sim/syscall_emul.hh" |