summaryrefslogtreecommitdiff
path: root/src/arch/mips
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2007-08-26 20:33:57 -0700
committerGabe Black <gblack@eecs.umich.edu>2007-08-26 20:33:57 -0700
commit9b49a78cfdc0bd6f8afdb0d066ea39778095d7ac (patch)
treeb4a977c8d7379ac552d245847825a73b61bf8c5b /src/arch/mips
parent80d51650c8bce1503e5ce3877f3bfe21d3e57d45 (diff)
downloadgem5-9b49a78cfdc0bd6f8afdb0d066ea39778095d7ac.tar.xz
Address translation: Make the page table more flexible.
The page table now stores actual page table entries. It is still a templated class here, but this will be corrected in the near future. --HG-- extra : convert_revision : 804dcc6320414c2b3ab76a74a15295bd24e1d13d
Diffstat (limited to 'src/arch/mips')
-rw-r--r--src/arch/mips/faults.cc40
-rw-r--r--src/arch/mips/faults.hh29
-rw-r--r--src/arch/mips/types.hh5
3 files changed, 4 insertions, 70 deletions
diff --git a/src/arch/mips/faults.cc b/src/arch/mips/faults.cc
index 39a2fa997..3d83a21aa 100644
--- a/src/arch/mips/faults.cc
+++ b/src/arch/mips/faults.cc
@@ -75,12 +75,6 @@ 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;
@@ -125,40 +119,6 @@ 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());
diff --git a/src/arch/mips/faults.hh b/src/arch/mips/faults.hh
index 2e5aa81d6..441e7c27f 100644
--- a/src/arch/mips/faults.hh
+++ b/src/arch/mips/faults.hh
@@ -92,40 +92,11 @@ class UnimplementedOpcodeFault : public MipsFault
FaultStat & countStat() {return _count;}
};
-#if !FULL_SYSTEM
-//class PageTableFault : public MipsFault
-//{
-//private:
-// Addr vaddr;
-// static FaultName _name;
-// static FaultVect _vect;
-// static FaultStat _count;
-//public:
-// PageTableFault(Addr va)
-// : vaddr(va) {}
-// FaultName name() {return _name;}
-// FaultVect vect() {return _vect;}
-// FaultStat & countStat() {return _count;}
-// void invoke(ThreadContext * tc);
-//};
-
-static inline Fault genPageTableFault(Addr va)
-{
- return new PageTableFault(va);
-}
-#endif
-
-
static inline Fault genMachineCheckFault()
{
return new MachineCheckFault;
}
-static inline Fault genAlignmentFault()
-{
- return new AlignmentFault;
-}
-
class ResetFault : public MipsFault
{
private:
diff --git a/src/arch/mips/types.hh b/src/arch/mips/types.hh
index fc45ea253..6e14a9b55 100644
--- a/src/arch/mips/types.hh
+++ b/src/arch/mips/types.hh
@@ -31,6 +31,7 @@
#ifndef __ARCH_MIPS_TYPES_HH__
#define __ARCH_MIPS_TYPES_HH__
+#include "mem/types.hh"
#include "sim/host.hh"
namespace MipsISA
@@ -93,7 +94,9 @@ namespace MipsISA
RND_DOWN,
RND_UP,
RND_NEAREST
- };
+ };
+
+ typedef ::PageTable<> PageTable;
} // namespace MipsISA