summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Yuri Kunde Schlesner2016-03-05 22:16:27 -0800
committerGravatar Yuri Kunde Schlesner2016-03-05 22:16:27 -0800
commit2d40891b4526b4559f20efaaea320f004fccc063 (patch)
tree33a2235a50da38de52ace3b28ef4ae0a6dd28d97 /src
parentMerge pull request #1455 from yuriks/ResultVal-union (diff)
parentMemory: Do correct Phys->Virt address translation for non-APP linheap (diff)
downloadyuzu-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.cpp6
-rw-r--r--src/core/hle/kernel/process.h1
-rw-r--r--src/core/memory.cpp2
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
133VAddr Process::GetLinearHeapAreaAddress() const {
134 return kernel_version < 0x22C ? Memory::LINEAR_HEAP_VADDR : Memory::NEW_LINEAR_HEAP_VADDR;
135}
133VAddr Process::GetLinearHeapBase() const { 136VAddr 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
138VAddr Process::GetLinearHeapLimit() const { 140VAddr 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) {