diff options
Diffstat (limited to 'src/core/hle/kernel/process.cpp')
| -rw-r--r-- | src/core/hle/kernel/process.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/core/hle/kernel/process.cpp b/src/core/hle/kernel/process.cpp index 1f45e6cf8..124047a53 100644 --- a/src/core/hle/kernel/process.cpp +++ b/src/core/hle/kernel/process.cpp | |||
| @@ -110,6 +110,7 @@ void Process::Run(s32 main_thread_priority, u32 stack_size) { | |||
| 110 | auto vma = vm_manager.MapMemoryBlock(segment.addr, codeset->memory, | 110 | auto vma = vm_manager.MapMemoryBlock(segment.addr, codeset->memory, |
| 111 | segment.offset, segment.size, memory_state).Unwrap(); | 111 | segment.offset, segment.size, memory_state).Unwrap(); |
| 112 | vm_manager.Reprotect(vma, permissions); | 112 | vm_manager.Reprotect(vma, permissions); |
| 113 | misc_memory_used += segment.size; | ||
| 113 | }; | 114 | }; |
| 114 | 115 | ||
| 115 | // Map CodeSet segments | 116 | // Map CodeSet segments |
| @@ -121,6 +122,7 @@ void Process::Run(s32 main_thread_priority, u32 stack_size) { | |||
| 121 | vm_manager.MapMemoryBlock(Memory::HEAP_VADDR_END - stack_size, | 122 | vm_manager.MapMemoryBlock(Memory::HEAP_VADDR_END - stack_size, |
| 122 | std::make_shared<std::vector<u8>>(stack_size, 0), 0, stack_size, MemoryState::Locked | 123 | std::make_shared<std::vector<u8>>(stack_size, 0), 0, stack_size, MemoryState::Locked |
| 123 | ).Unwrap(); | 124 | ).Unwrap(); |
| 125 | misc_memory_used += stack_size; | ||
| 124 | 126 | ||
| 125 | vm_manager.LogLayout(Log::Level::Debug); | 127 | vm_manager.LogLayout(Log::Level::Debug); |
| 126 | Kernel::SetupMainThread(codeset->entrypoint, main_thread_priority); | 128 | Kernel::SetupMainThread(codeset->entrypoint, main_thread_priority); |
| @@ -162,6 +164,8 @@ ResultVal<VAddr> Process::HeapAllocate(VAddr target, u32 size, VMAPermission per | |||
| 162 | CASCADE_RESULT(auto vma, vm_manager.MapMemoryBlock(target, heap_memory, target - heap_start, size, MemoryState::Private)); | 164 | CASCADE_RESULT(auto vma, vm_manager.MapMemoryBlock(target, heap_memory, target - heap_start, size, MemoryState::Private)); |
| 163 | vm_manager.Reprotect(vma, perms); | 165 | vm_manager.Reprotect(vma, perms); |
| 164 | 166 | ||
| 167 | heap_used += size; | ||
| 168 | |||
| 165 | return MakeResult<VAddr>(heap_end - size); | 169 | return MakeResult<VAddr>(heap_end - size); |
| 166 | } | 170 | } |
| 167 | 171 | ||
| @@ -173,6 +177,8 @@ ResultCode Process::HeapFree(VAddr target, u32 size) { | |||
| 173 | ResultCode result = vm_manager.UnmapRange(target, size); | 177 | ResultCode result = vm_manager.UnmapRange(target, size); |
| 174 | if (result.IsError()) return result; | 178 | if (result.IsError()) return result; |
| 175 | 179 | ||
| 180 | heap_used -= size; | ||
| 181 | |||
| 176 | return RESULT_SUCCESS; | 182 | return RESULT_SUCCESS; |
| 177 | } | 183 | } |
| 178 | 184 | ||
| @@ -206,6 +212,8 @@ ResultVal<VAddr> Process::LinearAllocate(VAddr target, u32 size, VMAPermission p | |||
| 206 | CASCADE_RESULT(auto vma, vm_manager.MapMemoryBlock(target, linheap_memory, offset, size, MemoryState::Continuous)); | 212 | CASCADE_RESULT(auto vma, vm_manager.MapMemoryBlock(target, linheap_memory, offset, size, MemoryState::Continuous)); |
| 207 | vm_manager.Reprotect(vma, perms); | 213 | vm_manager.Reprotect(vma, perms); |
| 208 | 214 | ||
| 215 | linear_heap_used += size; | ||
| 216 | |||
| 209 | return MakeResult<VAddr>(target); | 217 | return MakeResult<VAddr>(target); |
| 210 | } | 218 | } |
| 211 | 219 | ||
| @@ -226,6 +234,8 @@ ResultCode Process::LinearFree(VAddr target, u32 size) { | |||
| 226 | ResultCode result = vm_manager.UnmapRange(target, size); | 234 | ResultCode result = vm_manager.UnmapRange(target, size); |
| 227 | if (result.IsError()) return result; | 235 | if (result.IsError()) return result; |
| 228 | 236 | ||
| 237 | linear_heap_used -= size; | ||
| 238 | |||
| 229 | if (target + size == heap_end) { | 239 | if (target + size == heap_end) { |
| 230 | // End of linear heap has been freed, so check what's the last allocated block in it and | 240 | // End of linear heap has been freed, so check what's the last allocated block in it and |
| 231 | // reduce the size. | 241 | // reduce the size. |