diff options
author | Steve Reinhardt <stever@eecs.umich.edu> | 2007-06-23 13:26:30 -0700 |
---|---|---|
committer | Steve Reinhardt <stever@eecs.umich.edu> | 2007-06-23 13:26:30 -0700 |
commit | 245b0bd9b94bfaaa188b7e945f91c0e4a9909cbe (patch) | |
tree | 7ca0de263839f60d35cd6cf0ca8c17d94c375209 /src/arch/mips/faults.cc | |
parent | 57ff2604e59647c6afe988767186f13c80c1aa16 (diff) | |
parent | ac19e0c5050219cbb0579a319fa3fab5cf92835d (diff) | |
download | gem5-245b0bd9b94bfaaa188b7e945f91c0e4a9909cbe.tar.xz |
Merge vm1.(none):/home/stever/bk/newmem-head
into vm1.(none):/home/stever/bk/newmem-cache2
src/base/traceflags.py:
Hand merge.
--HG--
extra : convert_revision : 9e7539eeab4220ed7a7237457a8f336f79216924
Diffstat (limited to 'src/arch/mips/faults.cc')
-rw-r--r-- | src/arch/mips/faults.cc | 95 |
1 files changed, 87 insertions, 8 deletions
diff --git a/src/arch/mips/faults.cc b/src/arch/mips/faults.cc index c9e6aa75b..39a2fa997 100644 --- a/src/arch/mips/faults.cc +++ b/src/arch/mips/faults.cc @@ -54,10 +54,33 @@ FaultName ResetFault::_name = "reset"; FaultVect ResetFault::_vect = 0x0001; FaultStat ResetFault::_count; +FaultName CoprocessorUnusableFault::_name = "Coprocessor Unusable"; +FaultVect CoprocessorUnusableFault::_vect = 0xF001; +FaultStat CoprocessorUnusableFault::_count; + +FaultName ReservedInstructionFault::_name = "Reserved Instruction"; +FaultVect ReservedInstructionFault::_vect = 0x0F01; +FaultStat ReservedInstructionFault::_count; + +FaultName ThreadFault::_name = "thread"; +FaultVect ThreadFault::_vect = 0x00F1; +FaultStat ThreadFault::_count; + + FaultName ArithmeticFault::_name = "arith"; FaultVect ArithmeticFault::_vect = 0x0501; FaultStat ArithmeticFault::_count; +FaultName UnimplementedOpcodeFault::_name = "opdec"; +FaultVect UnimplementedOpcodeFault::_vect = 0x0481; +FaultStat UnimplementedOpcodeFault::_count; + +#if !FULL_SYSTEM +//FaultName PageTableFault::_name = "page_table_fault"; +//FaultVect PageTableFault::_vect = 0x0000; +//FaultStat PageTableFault::_count; +#endif + FaultName InterruptFault::_name = "interrupt"; FaultVect InterruptFault::_vect = 0x0101; FaultStat InterruptFault::_count; @@ -90,21 +113,77 @@ FaultName ItbAcvFault::_name = "iaccvio"; FaultVect ItbAcvFault::_vect = 0x0081; FaultStat ItbAcvFault::_count; -FaultName UnimplementedOpcodeFault::_name = "opdec"; -FaultVect UnimplementedOpcodeFault::_vect = 0x0481; -FaultStat UnimplementedOpcodeFault::_count; - FaultName FloatEnableFault::_name = "fen"; FaultVect FloatEnableFault::_vect = 0x0581; FaultStat FloatEnableFault::_count; -FaultName PalFault::_name = "pal"; -FaultVect PalFault::_vect = 0x2001; -FaultStat PalFault::_count; - FaultName IntegerOverflowFault::_name = "intover"; FaultVect IntegerOverflowFault::_vect = 0x0501; FaultStat IntegerOverflowFault::_count; +FaultName DspStateDisabledFault::_name = "intover"; +FaultVect DspStateDisabledFault::_vect = 0x001a; +FaultStat DspStateDisabledFault::_count; + + +/*void PageTableFault::invoke(ThreadContext *tc) +{ + Process *p = tc->getProcessPtr(); + + Addr page_addr = p->pTable->pageAlign(vaddr); + + warn("%i: [tid:%i]: %s encountered @ addr %x. Allocating new page for address range %x - %x.\n", + curTick, tc->getThreadNum(), name(), vaddr, page_addr, page_addr+VMPageSize); + + p->pTable->allocate(page_addr, VMPageSize); + + return; +} +*/ + /* 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) { + warn("Already allocated Over max stack size for one thread\n"); + } + warn("%i: Allocating page for range %x - %x", + curTick, p->stack_min, p->stack_min-PageBytes); + + p->pTable->allocate(p->stack_min, PageBytes); + warn("Increasing stack size by one page."); + } else { + FaultBase::invoke(tc); + }*/ + +void ResetFault::invoke(ThreadContext *tc) +{ + warn("[tid:%i]: %s encountered.\n", tc->getThreadNum(), name()); + //tc->getCpuPtr()->reset(); +} + +void CoprocessorUnusableFault::invoke(ThreadContext *tc) +{ + panic("[tid:%i]: %s encountered.\n", tc->getThreadNum(), name()); +} + +void ReservedInstructionFault::invoke(ThreadContext *tc) +{ + panic("[tid:%i]: %s encountered.\n", tc->getThreadNum(), name()); +} + +void ThreadFault::invoke(ThreadContext *tc) +{ + panic("[tid:%i]: %s encountered.\n", tc->getThreadNum(), name()); +} + +void DspStateDisabledFault::invoke(ThreadContext *tc) +{ + panic("[tid:%i]: %s encountered.\n", tc->getThreadNum(), name()); +} + } // namespace MipsISA |