diff options
| author | MerryMage <MerryMage@users.noreply.github.com> | 2018-02-21 20:03:56 +0000 |
|---|---|---|
| committer | MerryMage <MerryMage@users.noreply.github.com> | 2018-02-21 21:39:07 +0000 |
| commit | 38a3a63ffd513d9e9474e0b676f0d1e524305f3d (patch) | |
| tree | fdea8bdbb0e1137b994dc70984d39cd0436c122d /src/core/memory.cpp | |
| parent | 3dc5a6ea3091bd6d3db992032d65cc3c0d764f5a (diff) | |
memory: LOG_ERROR when falling off end of page table
Diffstat (limited to 'src/core/memory.cpp')
| -rw-r--r-- | src/core/memory.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/core/memory.cpp b/src/core/memory.cpp index cc1ed16b68..ce62666d78 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -118,6 +118,11 @@ boost::optional<T> ReadSpecial(VAddr addr); template <typename T> T Read(const VAddr vaddr) { + if ((vaddr >> PAGE_BITS) >= PAGE_TABLE_NUM_ENTRIES) { + LOG_ERROR(HW_Memory, "Read%lu after page table @ 0x%016" PRIX64, sizeof(T) * 8, vaddr); + return 0; + } + const PageType type = current_page_table->attributes[vaddr >> PAGE_BITS]; switch (type) { case PageType::Unmapped: @@ -146,6 +151,12 @@ bool WriteSpecial(VAddr addr, const T data); template <typename T> void Write(const VAddr vaddr, const T data) { + if ((vaddr >> PAGE_BITS) >= PAGE_TABLE_NUM_ENTRIES) { + LOG_ERROR(HW_Memory, "Write%lu after page table 0x%08X @ 0x%016" PRIX64, sizeof(data) * 8, + (u32)data, vaddr); + return; + } + const PageType type = current_page_table->attributes[vaddr >> PAGE_BITS]; switch (type) { case PageType::Unmapped: |
