Change how Page Faults work in SPARC. It now prints the faulting address, and panics instead of fatals. This isn't technically what it should do, but it makes gdb stop at the panic rather than letting m5 exit.
--HG-- extra : convert_revision : 3b14c99edaf649e0809977c9579afb2b7b0d72e9
This commit is contained in:
parent
50b8cce355
commit
015873fa86
1 changed files with 11 additions and 9 deletions
|
@ -690,19 +690,21 @@ void PageTableFault::invoke(ThreadContext *tc)
|
|||
{
|
||||
Process *p = tc->getProcessPtr();
|
||||
|
||||
// address is higher than the stack region or in the current stack region
|
||||
if (vaddr > p->stack_base || vaddr > p->stack_min)
|
||||
FaultBase::invoke(tc);
|
||||
|
||||
// We've accessed the next page
|
||||
if (vaddr > p->stack_min - PageBytes) {
|
||||
// We've accessed the next page of the stack, so extend the stack
|
||||
// to cover it.
|
||||
if(vaddr < p->stack_min && vaddr >= p->stack_min - PageBytes)
|
||||
{
|
||||
p->stack_min -= PageBytes;
|
||||
if (p->stack_base - p->stack_min > 8*1024*1024)
|
||||
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);
|
||||
}
|
||||
// Otherwise, we have an unexpected page fault. Report that fact,
|
||||
// and what address was accessed to cause the fault.
|
||||
else
|
||||
{
|
||||
panic("Page table fault when accessing virtual address %#x\n", vaddr);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue