Tweak a few things for better page fault debugging.

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
This commit is contained in:
Steve Reinhardt 2006-10-21 05:28:05 -04:00
parent 0e121bc14f
commit 3ac1ca8ff6
3 changed files with 14 additions and 5 deletions

View file

@ -194,7 +194,8 @@ void PageTableFault::invoke(ThreadContext *tc)
// We've accessed the next page // We've accessed the next page
if (vaddr > p->stack_min - PageBytes) { 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_min, p->stack_base, p->stack_min - PageBytes,
p->stack_base, vaddr); p->stack_base, vaddr);
p->stack_min -= PageBytes; p->stack_min -= PageBytes;
@ -202,6 +203,7 @@ void PageTableFault::invoke(ThreadContext *tc)
fatal("Over max stack size for one thread\n"); fatal("Over max stack size for one thread\n");
p->pTable->allocate(p->stack_min, PageBytes); p->pTable->allocate(p->stack_min, PageBytes);
} else { } else {
warn("Page fault on address %#x\n", vaddr);
FaultBase::invoke(tc); FaultBase::invoke(tc);
} }
} }

View file

@ -600,12 +600,19 @@ class Tru64 : public OperatingSystem
process->next_thread_stack_base -= stack_size; 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 // 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()); argp.copyOut(tc->getMemPort());
return 0; return 0;

View file

@ -37,7 +37,7 @@
#if !FULL_SYSTEM #if !FULL_SYSTEM
void FaultBase::invoke(ThreadContext * tc) 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 #else
void FaultBase::invoke(ThreadContext * tc) void FaultBase::invoke(ThreadContext * tc)