diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/memory.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/core/memory.cpp b/src/core/memory.cpp index e9166dbd9..f809567b6 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp | |||
| @@ -71,15 +71,20 @@ static void MapPages(PageTable& page_table, VAddr base, u64 size, u8* memory, Pa | |||
| 71 | FlushMode::FlushAndInvalidate); | 71 | FlushMode::FlushAndInvalidate); |
| 72 | 72 | ||
| 73 | VAddr end = base + size; | 73 | VAddr end = base + size; |
| 74 | while (base != end) { | 74 | ASSERT_MSG(end <= page_table.pointers.size(), "out of range mapping at {:016X}", |
| 75 | ASSERT_MSG(base < page_table.pointers.size(), "out of range mapping at {:016X}", base); | 75 | base + page_table.pointers.size()); |
| 76 | 76 | ||
| 77 | page_table.attributes[base] = type; | 77 | std::fill(page_table.attributes.begin() + base, page_table.attributes.begin() + end, type); |
| 78 | page_table.pointers[base] = memory; | ||
| 79 | 78 | ||
| 80 | base += 1; | 79 | if (memory == nullptr) { |
| 81 | if (memory != nullptr) | 80 | std::fill(page_table.pointers.begin() + base, page_table.pointers.begin() + end, memory); |
| 81 | } else { | ||
| 82 | while (base != end) { | ||
| 83 | page_table.pointers[base] = memory; | ||
| 84 | |||
| 85 | base += 1; | ||
| 82 | memory += PAGE_SIZE; | 86 | memory += PAGE_SIZE; |
| 87 | } | ||
| 83 | } | 88 | } |
| 84 | } | 89 | } |
| 85 | 90 | ||