diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2009-11-08 22:49:57 -0800 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2009-11-08 22:49:57 -0800 |
commit | 44e912c6bd8828a6a3774c1fa54a1f4689383243 (patch) | |
tree | 65bfad0d1939aa42314c2be60400f14f2c75c4d8 /src | |
parent | 53086dfefe2796497724daaa7d5d1d3d85a8a636 (diff) | |
download | gem5-44e912c6bd8828a6a3774c1fa54a1f4689383243.tar.xz |
X86: Explain what really didn't work with unmapped addresses in SE mode.
Diffstat (limited to 'src')
-rw-r--r-- | src/arch/x86/tlb.cc | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/arch/x86/tlb.cc b/src/arch/x86/tlb.cc index 5280b9ba8..0d69d05c9 100644 --- a/src/arch/x86/tlb.cc +++ b/src/arch/x86/tlb.cc @@ -632,12 +632,22 @@ TLB::translate(RequestPtr req, ThreadContext *tc, Translation *translation, Process *p = tc->getProcessPtr(); TlbEntry newEntry; bool success = p->pTable->lookup(vaddr, newEntry); - if(!success && mode != Execute) { + if (!success && mode != Execute) { p->checkAndAllocNextPage(vaddr); success = p->pTable->lookup(vaddr, newEntry); } - if(!success) { - panic("Tried to execute unmapped address %#x.\n", vaddr); + if (!success) { + const char *modeStr = ""; + if (mode == Execute) + modeStr = "execute"; + else if (mode == Read) + modeStr = "read"; + else if (mode == Write) + modeStr = "write"; + else + modeStr = "?"; + panic("Tried to %s unmapped address %#x.\n", + modeStr, vaddr); } else { Addr alignedVaddr = p->pTable->pageAlign(vaddr); DPRINTF(TLB, "Mapping %#x to %#x\n", alignedVaddr, |