syscalls: fix latent brk/obreak bug.
[gem5.git] / src / sim / faults.cc
index cea35482a363424771c4b12f107986c8398da006..0fe85378516f0b0a2880c196d7ffd73fe2264d2e 100644 (file)
  *          Gabe Black
  */
 
+#include "arch/isa_traits.hh"
 #include "base/misc.hh"
-#include "sim/faults.hh"
 #include "cpu/thread_context.hh"
 #include "cpu/base.hh"
+#include "sim/faults.hh"
+#include "sim/process.hh"
+#include "mem/page_table.hh"
 
 #if !FULL_SYSTEM
 void FaultBase::invoke(ThreadContext * tc)
@@ -51,5 +54,21 @@ void FaultBase::invoke(ThreadContext * tc)
 
 void UnimpFault::invoke(ThreadContext * tc)
 {
-    panic("Unimpfault: %s\n", panicStr.c_str());
+    fatal("Unimpfault: %s\n", panicStr.c_str());
+}
+
+#if !FULL_SYSTEM
+void GenericPageTableFault::invoke(ThreadContext *tc)
+{
+    Process *p = tc->getProcessPtr();
+
+    if (!p->checkAndAllocNextPage(vaddr))
+        panic("Page table fault when accessing virtual address %#x\n", vaddr);
+
+}
+
+void GenericAlignmentFault::invoke(ThreadContext *tc)
+{
+    panic("Alignment fault when accessing virtual address %#x\n", vaddr);
 }
+#endif