Make full CPU handle SE faults
authorAli Saidi <saidi@eecs.umich.edu>
Tue, 27 Jun 2006 18:59:38 +0000 (14:59 -0400)
committerAli Saidi <saidi@eecs.umich.edu>
Tue, 27 Jun 2006 18:59:38 +0000 (14:59 -0400)
--HG--
extra : convert_revision : e336623ac3329ec0ee2430548c6a9650e2a69d6a

src/arch/alpha/faults.cc
src/cpu/o3/alpha_cpu.hh
src/cpu/o3/alpha_cpu_impl.hh
src/cpu/o3/commit_impl.hh
src/cpu/o3/fetch.hh
src/cpu/o3/lsq_unit.hh

index 06765768a17cd13d81381d9be1fa675d449bb2cb..eef4361fda2f1a845ad74284e0ce7c63434c7938 100644 (file)
@@ -194,11 +194,13 @@ void PageTableFault::invoke(ThreadContext *tc)
 
     // We've accessed the next page
     if (vaddr > p->stack_min - PageBytes) {
+        warn("Increasing stack %#x:%#x to %#x:%#x because of access to %#x",
+                p->stack_min, p->stack_base, p->stack_min - PageBytes,
+                p->stack_base, vaddr);
         p->stack_min -= PageBytes;
         if (p->stack_base - p->stack_min > 8*1024*1024)
             fatal("Over max stack size for one thread\n");
         p->pTable->allocate(p->stack_min, PageBytes);
-        warn("Increasing stack size by one page.");
     } else {
         FaultBase::invoke(tc);
     }
index 55b9751420c7cb3964963bc31dec738dc9fc128e..d7f3d5801ff73367ceff4088fa0074d995d5e51a 100644 (file)
@@ -384,8 +384,6 @@ class AlphaO3CPU : public FullO3CPU<Impl>
     bool inPalMode(uint64_t PC)
     { return AlphaISA::PcPAL(PC); }
 
-    /** Traps to handle given fault. */
-    void trap(Fault fault, unsigned tid);
     bool simPalCheck(int palFunc, unsigned tid);
 
     /** Processes any interrupts. */
@@ -395,6 +393,8 @@ class AlphaO3CPU : public FullO3CPU<Impl>
     void halt() { panic("Halt not implemented!\n"); }
 #endif
 
+    /** Traps to handle given fault. */
+    void trap(Fault fault, unsigned tid);
 
 #if !FULL_SYSTEM
     /** Executes a syscall.
index 532611fb6a2b1283fdf62fd9f354e0138602dd0e..eca6fbbcbf63b965a794e848e4cc799516080100 100644 (file)
@@ -753,14 +753,6 @@ AlphaO3CPU<Impl>::simPalCheck(int palFunc, unsigned tid)
     return true;
 }
 
-template <class Impl>
-void
-AlphaO3CPU<Impl>::trap(Fault fault, unsigned tid)
-{
-    // Pass the thread's TC into the invoke method.
-    fault->invoke(this->threadContexts[tid]);
-}
-
 template <class Impl>
 void
 AlphaO3CPU<Impl>::processInterrupts()
@@ -823,6 +815,14 @@ AlphaO3CPU<Impl>::processInterrupts()
 
 #endif // FULL_SYSTEM
 
+template <class Impl>
+void
+AlphaO3CPU<Impl>::trap(Fault fault, unsigned tid)
+{
+    // Pass the thread's TC into the invoke method.
+    fault->invoke(this->threadContexts[tid]);
+}
+
 #if !FULL_SYSTEM
 
 template <class Impl>
index 176f8324681818775da36684f69b7f12a71cf3f7..cd7dd47d48b259aadb3828b4bc285f37c266167d 100644 (file)
@@ -991,7 +991,6 @@ DefaultCommit<Impl>::commitHead(DynInstPtr &head_inst, unsigned inst_num)
 
     if (inst_fault != NoFault) {
         head_inst->setCompleted();
-#if FULL_SYSTEM
         DPRINTF(Commit, "Inst [sn:%lli] PC %#x has a fault\n",
                 head_inst->seqNum, head_inst->readPC());
 
@@ -1035,10 +1034,6 @@ DefaultCommit<Impl>::commitHead(DynInstPtr &head_inst, unsigned inst_num)
         generateTrapEvent(tid);
 
         return false;
-#else // !FULL_SYSTEM
-        panic("fault (%d) detected @ PC %08p", inst_fault,
-              head_inst->PC);
-#endif // FULL_SYSTEM
     }
 
     updateComInstStats(head_inst);
index 790c28f09a8194b958592347fd2b13174fbb1286..7fcd21b7d44e4e72e7ca46a4c6aef5b0009c8601 100644 (file)
@@ -36,7 +36,7 @@
 #include "base/statistics.hh"
 #include "base/timebuf.hh"
 #include "cpu/pc_event.hh"
-#include "mem/packet.hh"
+#include "mem/packet_impl.hh"
 #include "mem/port.hh"
 #include "sim/eventq.hh"
 
index 9b67e61f2fb1b504c64d2e67ae7137a7f1cea79d..74b8fe5bbbb3aad0d5bc9bb50bfb17f2b356e2b2 100644 (file)
@@ -40,7 +40,7 @@
 #include "config/full_system.hh"
 #include "base/hashmap.hh"
 #include "cpu/inst_seq.hh"
-#include "mem/packet.hh"
+#include "mem/packet_impl.hh"
 #include "mem/port.hh"
 
 /**