diff options
| author | 2016-03-05 22:16:27 -0800 | |
|---|---|---|
| committer | 2016-03-05 22:16:27 -0800 | |
| commit | 2d40891b4526b4559f20efaaea320f004fccc063 (patch) | |
| tree | 33a2235a50da38de52ace3b28ef4ae0a6dd28d97 /src | |
| parent | Merge pull request #1455 from yuriks/ResultVal-union (diff) | |
| parent | Memory: Do correct Phys->Virt address translation for non-APP linheap (diff) | |
| download | yuzu-2d40891b4526b4559f20efaaea320f004fccc063.tar.gz yuzu-2d40891b4526b4559f20efaaea320f004fccc063.tar.xz yuzu-2d40891b4526b4559f20efaaea320f004fccc063.zip | |
Merge pull request #1463 from yuriks/non-app-region
Memory: Do correct Phys->Virt address translation for non-APP linheap
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/kernel/process.cpp | 6 | ||||
| -rw-r--r-- | src/core/hle/kernel/process.h | 1 | ||||
| -rw-r--r-- | src/core/memory.cpp | 2 |
3 files changed, 6 insertions, 3 deletions
diff --git a/src/core/hle/kernel/process.cpp b/src/core/hle/kernel/process.cpp index 16eb972fb..24b266eae 100644 --- a/src/core/hle/kernel/process.cpp +++ b/src/core/hle/kernel/process.cpp | |||
| @@ -130,9 +130,11 @@ void Process::Run(s32 main_thread_priority, u32 stack_size) { | |||
| 130 | Kernel::SetupMainThread(codeset->entrypoint, main_thread_priority); | 130 | Kernel::SetupMainThread(codeset->entrypoint, main_thread_priority); |
| 131 | } | 131 | } |
| 132 | 132 | ||
| 133 | VAddr Process::GetLinearHeapAreaAddress() const { | ||
| 134 | return kernel_version < 0x22C ? Memory::LINEAR_HEAP_VADDR : Memory::NEW_LINEAR_HEAP_VADDR; | ||
| 135 | } | ||
| 133 | VAddr Process::GetLinearHeapBase() const { | 136 | VAddr Process::GetLinearHeapBase() const { |
| 134 | return (kernel_version < 0x22C ? Memory::LINEAR_HEAP_VADDR : Memory::NEW_LINEAR_HEAP_VADDR) | 137 | return GetLinearHeapAreaAddress() + memory_region->base; |
| 135 | + memory_region->base; | ||
| 136 | } | 138 | } |
| 137 | 139 | ||
| 138 | VAddr Process::GetLinearHeapLimit() const { | 140 | VAddr Process::GetLinearHeapLimit() const { |
diff --git a/src/core/hle/kernel/process.h b/src/core/hle/kernel/process.h index 60e17f251..6d2ca96a2 100644 --- a/src/core/hle/kernel/process.h +++ b/src/core/hle/kernel/process.h | |||
| @@ -143,6 +143,7 @@ public: | |||
| 143 | /// Bitmask of the used TLS slots | 143 | /// Bitmask of the used TLS slots |
| 144 | std::bitset<300> used_tls_slots; | 144 | std::bitset<300> used_tls_slots; |
| 145 | 145 | ||
| 146 | VAddr GetLinearHeapAreaAddress() const; | ||
| 146 | VAddr GetLinearHeapBase() const; | 147 | VAddr GetLinearHeapBase() const; |
| 147 | VAddr GetLinearHeapLimit() const; | 148 | VAddr GetLinearHeapLimit() const; |
| 148 | 149 | ||
diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 4753c63a7..7de5bd15d 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp | |||
| @@ -291,7 +291,7 @@ VAddr PhysicalToVirtualAddress(const PAddr addr) { | |||
| 291 | } else if (addr >= VRAM_PADDR && addr < VRAM_PADDR_END) { | 291 | } else if (addr >= VRAM_PADDR && addr < VRAM_PADDR_END) { |
| 292 | return addr - VRAM_PADDR + VRAM_VADDR; | 292 | return addr - VRAM_PADDR + VRAM_VADDR; |
| 293 | } else if (addr >= FCRAM_PADDR && addr < FCRAM_PADDR_END) { | 293 | } else if (addr >= FCRAM_PADDR && addr < FCRAM_PADDR_END) { |
| 294 | return addr - FCRAM_PADDR + Kernel::g_current_process->GetLinearHeapBase(); | 294 | return addr - FCRAM_PADDR + Kernel::g_current_process->GetLinearHeapAreaAddress(); |
| 295 | } else if (addr >= DSP_RAM_PADDR && addr < DSP_RAM_PADDR_END) { | 295 | } else if (addr >= DSP_RAM_PADDR && addr < DSP_RAM_PADDR_END) { |
| 296 | return addr - DSP_RAM_PADDR + DSP_RAM_VADDR; | 296 | return addr - DSP_RAM_PADDR + DSP_RAM_VADDR; |
| 297 | } else if (addr >= IO_AREA_PADDR && addr < IO_AREA_PADDR_END) { | 297 | } else if (addr >= IO_AREA_PADDR && addr < IO_AREA_PADDR_END) { |