diff options
author | John Ingalls <43973001+ingallsj@users.noreply.github.com> | 2021-12-05 23:23:31 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-05 23:23:31 -0800 |
commit | 7209834847b5ffcb6c5fe13e880b5779d1ede4f1 (patch) | |
tree | 0dfcf735f92977e40699f92fc8d02d911642738d /riscv | |
parent | c4fdc8fe95e497ab6e107117a7de47ec40e7de7d (diff) | |
download | spike-7209834847b5ffcb6c5fe13e880b5779d1ede4f1.zip spike-7209834847b5ffcb6c5fe13e880b5779d1ede4f1.tar.gz spike-7209834847b5ffcb6c5fe13e880b5779d1ede4f1.tar.bz2 |
page fault when PTE_N bit set and not EXT_SVNAPOT (#875)
Diffstat (limited to 'riscv')
-rw-r--r-- | riscv/mmu.cc | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/riscv/mmu.cc b/riscv/mmu.cc index e33b814..275383d 100644 --- a/riscv/mmu.cc +++ b/riscv/mmu.cc @@ -291,6 +291,8 @@ reg_t mmu_t::s2xlate(reg_t gva, reg_t gpa, access_type type, access_type trap_ty if (pte & PTE_RSVD) { break; + } else if (!proc->extension_enabled(EXT_SVNAPOT) && (pte & PTE_N)) { + break; } else if (!proc->extension_enabled(EXT_SVPBMT) && (pte & PTE_PBMT)) { break; } else if (PTE_TABLE(pte)) { // next level of page table @@ -379,6 +381,8 @@ reg_t mmu_t::walk(reg_t addr, access_type type, reg_t mode, bool virt, bool hlvx if (pte & PTE_RSVD) { break; + } else if (!proc->extension_enabled(EXT_SVNAPOT) && (pte & PTE_N)) { + break; } else if (!proc->extension_enabled(EXT_SVPBMT) && (pte & PTE_PBMT)) { break; } else if (PTE_TABLE(pte)) { // next level of page table |