SPARC: Narrow the scope of #if FULL_SYSTEM in SPARC's faults.
authorGabe Black <gblack@eecs.umich.edu>
Thu, 13 Oct 2011 08:11:00 +0000 (01:11 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Thu, 13 Oct 2011 08:11:00 +0000 (01:11 -0700)
src/arch/sparc/faults.cc
src/arch/sparc/faults.hh

index 01d57e627b0d4eafe9ce9f7b2ce58486b7d16f3d..fb0f6acb1c24200a04fc6572f2a446e20d6d7944 100644 (file)
@@ -36,7 +36,7 @@
 #include "arch/sparc/types.hh"
 #include "base/bitfield.hh"
 #include "base/trace.hh"
-#include "config/full_system.hh"
+#include "sim/full_system.hh"
 #include "cpu/base.hh"
 #include "cpu/thread_context.hh"
 #if !FULL_SYSTEM
@@ -44,6 +44,7 @@
 #include "mem/page_table.hh"
 #include "sim/process.hh"
 #endif
+#include "sim/full_system.hh"
 
 using namespace std;
 
@@ -494,12 +495,13 @@ getPrivVector(ThreadContext *tc, Addr &PC, Addr &NPC, MiscReg TT, MiscReg TL)
     NPC = PC + sizeof(MachInst);
 }
 
-#if FULL_SYSTEM
-
 void
 SparcFaultBase::invoke(ThreadContext * tc, StaticInstPtr inst)
 {
     FaultBase::invoke(tc);
+    if (!FullSystem)
+        return;
+
     countStat()++;
 
     // We can refer to this to see what the trap level -was-, but something
@@ -619,11 +621,10 @@ PowerOnReset::invoke(ThreadContext *tc, StaticInstPtr inst)
     */
 }
 
-#else // !FULL_SYSTEM
-
 void
 FastInstructionAccessMMUMiss::invoke(ThreadContext *tc, StaticInstPtr inst)
 {
+#if !FULL_SYSTEM
     Process *p = tc->getProcessPtr();
     TlbEntry entry;
     bool success = p->pTable->lookup(vaddr, entry);
@@ -634,11 +635,15 @@ FastInstructionAccessMMUMiss::invoke(ThreadContext *tc, StaticInstPtr inst)
         tc->getITBPtr()->insert(alignedVaddr, 0 /*partition id*/,
                 p->M5_pid /*context id*/, false, entry.pte);
     }
+#else
+    SparcFaultBase::invoke(tc, inst);
+#endif
 }
 
 void
 FastDataAccessMMUMiss::invoke(ThreadContext *tc, StaticInstPtr inst)
 {
+#if !FULL_SYSTEM
     Process *p = tc->getProcessPtr();
     TlbEntry entry;
     bool success = p->pTable->lookup(vaddr, entry);
@@ -653,11 +658,15 @@ FastDataAccessMMUMiss::invoke(ThreadContext *tc, StaticInstPtr inst)
         tc->getDTBPtr()->insert(alignedVaddr, 0 /*partition id*/,
                 p->M5_pid /*context id*/, false, entry.pte);
     }
+#else
+    SparcFaultBase::invoke(tc, inst);
+#endif
 }
 
 void
 SpillNNormal::invoke(ThreadContext *tc, StaticInstPtr inst)
 {
+#if !FULL_SYSTEM
     doNormalFault(tc, trapType(), false);
 
     Process *p = tc->getProcessPtr();
@@ -668,11 +677,15 @@ SpillNNormal::invoke(ThreadContext *tc, StaticInstPtr inst)
 
     // Then adjust the PC and NPC
     tc->pcState(lp->readSpillStart());
+#else
+    SparcFaultBase::invoke(tc, inst);
+#endif
 }
 
 void
 FillNNormal::invoke(ThreadContext *tc, StaticInstPtr inst)
 {
+#if !FULL_SYSTEM
     doNormalFault(tc, trapType(), false);
 
     Process *p = tc->getProcessPtr();
@@ -683,11 +696,15 @@ FillNNormal::invoke(ThreadContext *tc, StaticInstPtr inst)
 
     // Then adjust the PC and NPC
     tc->pcState(lp->readFillStart());
+#else
+    SparcFaultBase::invoke(tc, inst);
+#endif
 }
 
 void
 TrapInstruction::invoke(ThreadContext *tc, StaticInstPtr inst)
 {
+#if !FULL_SYSTEM
     // In SE, this mechanism is how the process requests a service from the
     // operating system. We'll get the process object from the thread context
     // and let it service the request.
@@ -704,9 +721,10 @@ TrapInstruction::invoke(ThreadContext *tc, StaticInstPtr inst)
     PCState pc = tc->pcState();
     pc.advance();
     tc->pcState(pc);
-}
-
+#else
+    SparcFaultBase::invoke(tc, inst);
 #endif
+}
 
 } // namespace SparcISA
 
index 88c269d66ccf098f15ea6d4e64b41a7c0e96c3e2..e8fea3b15d73f3ba1bc956bc66cae1313df74358 100644 (file)
@@ -66,10 +66,8 @@ class SparcFaultBase : public FaultBase
         const PrivilegeLevel nextPrivilegeLevel[NumLevels];
         FaultStat count;
     };
-#if FULL_SYSTEM
     void invoke(ThreadContext * tc,
             StaticInstPtr inst = StaticInst::nullStaticInstPtr);
-#endif
     virtual TrapType trapType() = 0;
     virtual FaultPriority priority() = 0;
     virtual FaultStat & countStat() = 0;
@@ -96,10 +94,8 @@ class SparcFault : public SparcFaultBase
 
 class PowerOnReset : public SparcFault<PowerOnReset>
 {
-#if FULL_SYSTEM
     void invoke(ThreadContext * tc,
             StaticInstPtr inst = StaticInst::nullStaticInstPtr);
-#endif
 };
 
 class WatchDogReset : public SparcFault<WatchDogReset> {};
@@ -204,28 +200,28 @@ class VAWatchpoint : public SparcFault<VAWatchpoint> {};
 class FastInstructionAccessMMUMiss :
     public SparcFault<FastInstructionAccessMMUMiss>
 {
-#if !FULL_SYSTEM
   protected:
     Addr vaddr;
   public:
     FastInstructionAccessMMUMiss(Addr addr) : vaddr(addr)
     {}
+    FastInstructionAccessMMUMiss() : vaddr(0)
+    {}
     void invoke(ThreadContext * tc,
             StaticInstPtr inst = StaticInst::nullStaticInstPtr);
-#endif
 };
 
 class FastDataAccessMMUMiss : public SparcFault<FastDataAccessMMUMiss>
 {
-#if !FULL_SYSTEM
   protected:
     Addr vaddr;
   public:
     FastDataAccessMMUMiss(Addr addr) : vaddr(addr)
     {}
+    FastDataAccessMMUMiss() : vaddr(0)
+    {}
     void invoke(ThreadContext * tc,
             StaticInstPtr inst = StaticInst::nullStaticInstPtr);
-#endif
 };
 
 class FastDataAccessProtection : public SparcFault<FastDataAccessProtection> {};
@@ -243,10 +239,8 @@ class SpillNNormal : public EnumeratedFault<SpillNNormal>
   public:
     SpillNNormal(uint32_t n) : EnumeratedFault<SpillNNormal>(n) {;}
     // These need to be handled specially to enable spill traps in SE
-#if !FULL_SYSTEM
     void invoke(ThreadContext * tc,
             StaticInstPtr inst = StaticInst::nullStaticInstPtr);
-#endif
 };
 
 class SpillNOther : public EnumeratedFault<SpillNOther>
@@ -262,10 +256,8 @@ class FillNNormal : public EnumeratedFault<FillNNormal>
     FillNNormal(uint32_t n) : EnumeratedFault<FillNNormal>(n)
     {}
     // These need to be handled specially to enable fill traps in SE
-#if !FULL_SYSTEM
     void invoke(ThreadContext * tc,
             StaticInstPtr inst = StaticInst::nullStaticInstPtr);
-#endif
 };
 
 class FillNOther : public EnumeratedFault<FillNOther>
@@ -281,10 +273,8 @@ class TrapInstruction : public EnumeratedFault<TrapInstruction>
     TrapInstruction(uint32_t n) : EnumeratedFault<TrapInstruction>(n)
     {}
     // In SE, trap instructions are requesting services from the OS.
-#if !FULL_SYSTEM
     void invoke(ThreadContext * tc,
             StaticInstPtr inst = StaticInst::nullStaticInstPtr);
-#endif
 };
 
 } // namespace SparcISA