Tweak a few things for better page fault debugging.
authorSteve Reinhardt <stever@eecs.umich.edu>
Sat, 21 Oct 2006 09:28:05 +0000 (05:28 -0400)
committerSteve Reinhardt <stever@eecs.umich.edu>
Sat, 21 Oct 2006 09:28:05 +0000 (05:28 -0400)
src/sim/faults.cc:
    Fix fault message.
src/kern/tru64/tru64.hh:
    Add DPRINTF to see where new thread stacks are allocated.
src/arch/alpha/faults.cc:
    Add print statement so we know what the faulting address is in SE mode.

--HG--
extra : convert_revision : 6eb2b513c339496a0d013b7e914953a0a066c12d

src/arch/alpha/faults.cc
src/kern/tru64/tru64.hh
src/sim/faults.cc

index eef4361fda2f1a845ad74284e0ce7c63434c7938..7179bf025bb7ea191243fbff770845b5389be107 100644 (file)
@@ -194,7 +194,8 @@ 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",
+        DPRINTF(Stack,
+                "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;
@@ -202,6 +203,7 @@ void PageTableFault::invoke(ThreadContext *tc)
             fatal("Over max stack size for one thread\n");
         p->pTable->allocate(p->stack_min, PageBytes);
     } else {
+        warn("Page fault on address %#x\n", vaddr);
         FaultBase::invoke(tc);
     }
 }
index 18671c36414d22c13139f9e2ef2c28aae4c57c10..9bad6ce09f1b57d01da817e42fa0896fd115d005 100644 (file)
@@ -600,12 +600,19 @@ class Tru64 : public OperatingSystem
             process->next_thread_stack_base -= stack_size;
         }
 
-        stack_base = roundDown(stack_base, VMPageSize);
+        Addr rounded_stack_base = roundDown(stack_base, VMPageSize);
+        Addr rounded_stack_size = roundUp(stack_size, VMPageSize);
+
+        DPRINTF(SyscallVerbose,
+                "stack_create: allocating stack @ %#x size %#x "
+                "(rounded from %#x, %#x)\n",
+                rounded_stack_base, rounded_stack_size,
+                stack_base, stack_size);
 
         // map memory
-        process->pTable->allocate(stack_base, roundUp(stack_size, VMPageSize));
+        process->pTable->allocate(rounded_stack_base, rounded_stack_size);
 
-        argp->address = gtoh(stack_base);
+        argp->address = gtoh(rounded_stack_base);
         argp.copyOut(tc->getMemPort());
 
         return 0;
index 650b728f77e1ec9f2e4a44675f35b264f598b031..cea35482a363424771c4b12f107986c8398da006 100644 (file)
@@ -37,7 +37,7 @@
 #if !FULL_SYSTEM
 void FaultBase::invoke(ThreadContext * tc)
 {
-    fatal("fault (%s) detected @ PC 0x%08p", name(), tc->readPC());
+    fatal("fault (%s) detected @ PC %p", name(), tc->readPC());
 }
 #else
 void FaultBase::invoke(ThreadContext * tc)