34a35,38
> #if !FULL_SYSTEM
> #include "sim/process.hh"
> #include "mem/page_table.hh"
> #endif
54a59,64
> #if !FULL_SYSTEM
> FaultName PageTableFault::_name = "page_table_fault";
> FaultVect PageTableFault::_vect = 0x0000;
> FaultStat PageTableFault::_count;
> #endif
>
130c140
< #endif
---
> #else //!FULL_SYSTEM
131a142,162
> 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) {
> 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);
> }
> }
>
> #endif