diff options
| author | 2018-11-18 19:23:38 -0800 | |
|---|---|---|
| committer | 2018-11-18 19:23:38 -0800 | |
| commit | e34d47e6e36f5c99211d0382eded6dbb78ed805e (patch) | |
| tree | 262bc94da150ef3b2995d72671ac075c2053ef4f /src/core/hle/kernel | |
| parent | Merge pull request #1718 from ogniK5377/lets-go-softlock (diff) | |
| parent | ldr_ro: Add error check for memory allocation failure (diff) | |
| download | yuzu-e34d47e6e36f5c99211d0382eded6dbb78ed805e.tar.gz yuzu-e34d47e6e36f5c99211d0382eded6dbb78ed805e.tar.xz yuzu-e34d47e6e36f5c99211d0382eded6dbb78ed805e.zip | |
Merge pull request #1620 from DarkLordZach/ldr-ro
ldr_ro: Complete LDR:RO implementation
Diffstat (limited to 'src/core/hle/kernel')
| -rw-r--r-- | src/core/hle/kernel/process.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/kernel/process.h | 3 | ||||
| -rw-r--r-- | src/core/hle/kernel/vm_manager.cpp | 6 | ||||
| -rw-r--r-- | src/core/hle/kernel/vm_manager.h | 3 |
4 files changed, 9 insertions, 7 deletions
diff --git a/src/core/hle/kernel/process.cpp b/src/core/hle/kernel/process.cpp index f06b6bb55..a257c3726 100644 --- a/src/core/hle/kernel/process.cpp +++ b/src/core/hle/kernel/process.cpp | |||
| @@ -252,8 +252,8 @@ ResultCode Process::HeapFree(VAddr target, u32 size) { | |||
| 252 | return vm_manager.HeapFree(target, size); | 252 | return vm_manager.HeapFree(target, size); |
| 253 | } | 253 | } |
| 254 | 254 | ||
| 255 | ResultCode Process::MirrorMemory(VAddr dst_addr, VAddr src_addr, u64 size) { | 255 | ResultCode Process::MirrorMemory(VAddr dst_addr, VAddr src_addr, u64 size, MemoryState state) { |
| 256 | return vm_manager.MirrorMemory(dst_addr, src_addr, size); | 256 | return vm_manager.MirrorMemory(dst_addr, src_addr, size, state); |
| 257 | } | 257 | } |
| 258 | 258 | ||
| 259 | ResultCode Process::UnmapMemory(VAddr dst_addr, VAddr /*src_addr*/, u64 size) { | 259 | ResultCode Process::UnmapMemory(VAddr dst_addr, VAddr /*src_addr*/, u64 size) { |
diff --git a/src/core/hle/kernel/process.h b/src/core/hle/kernel/process.h index cf48787ce..230e395ff 100644 --- a/src/core/hle/kernel/process.h +++ b/src/core/hle/kernel/process.h | |||
| @@ -259,7 +259,8 @@ public: | |||
| 259 | ResultVal<VAddr> HeapAllocate(VAddr target, u64 size, VMAPermission perms); | 259 | ResultVal<VAddr> HeapAllocate(VAddr target, u64 size, VMAPermission perms); |
| 260 | ResultCode HeapFree(VAddr target, u32 size); | 260 | ResultCode HeapFree(VAddr target, u32 size); |
| 261 | 261 | ||
| 262 | ResultCode MirrorMemory(VAddr dst_addr, VAddr src_addr, u64 size); | 262 | ResultCode MirrorMemory(VAddr dst_addr, VAddr src_addr, u64 size, |
| 263 | MemoryState state = MemoryState::Mapped); | ||
| 263 | 264 | ||
| 264 | ResultCode UnmapMemory(VAddr dst_addr, VAddr src_addr, u64 size); | 265 | ResultCode UnmapMemory(VAddr dst_addr, VAddr src_addr, u64 size); |
| 265 | 266 | ||
diff --git a/src/core/hle/kernel/vm_manager.cpp b/src/core/hle/kernel/vm_manager.cpp index ec7fd6150..100f8f6bf 100644 --- a/src/core/hle/kernel/vm_manager.cpp +++ b/src/core/hle/kernel/vm_manager.cpp | |||
| @@ -298,7 +298,7 @@ ResultCode VMManager::HeapFree(VAddr target, u64 size) { | |||
| 298 | return RESULT_SUCCESS; | 298 | return RESULT_SUCCESS; |
| 299 | } | 299 | } |
| 300 | 300 | ||
| 301 | ResultCode VMManager::MirrorMemory(VAddr dst_addr, VAddr src_addr, u64 size) { | 301 | ResultCode VMManager::MirrorMemory(VAddr dst_addr, VAddr src_addr, u64 size, MemoryState state) { |
| 302 | const auto vma = FindVMA(src_addr); | 302 | const auto vma = FindVMA(src_addr); |
| 303 | 303 | ||
| 304 | ASSERT_MSG(vma != vma_map.end(), "Invalid memory address"); | 304 | ASSERT_MSG(vma != vma_map.end(), "Invalid memory address"); |
| @@ -312,8 +312,8 @@ ResultCode VMManager::MirrorMemory(VAddr dst_addr, VAddr src_addr, u64 size) { | |||
| 312 | const std::shared_ptr<std::vector<u8>>& backing_block = vma->second.backing_block; | 312 | const std::shared_ptr<std::vector<u8>>& backing_block = vma->second.backing_block; |
| 313 | const std::size_t backing_block_offset = vma->second.offset + vma_offset; | 313 | const std::size_t backing_block_offset = vma->second.offset + vma_offset; |
| 314 | 314 | ||
| 315 | CASCADE_RESULT(auto new_vma, MapMemoryBlock(dst_addr, backing_block, backing_block_offset, size, | 315 | CASCADE_RESULT(auto new_vma, |
| 316 | MemoryState::Mapped)); | 316 | MapMemoryBlock(dst_addr, backing_block, backing_block_offset, size, state)); |
| 317 | // Protect mirror with permissions from old region | 317 | // Protect mirror with permissions from old region |
| 318 | Reprotect(new_vma, vma->second.permissions); | 318 | Reprotect(new_vma, vma->second.permissions); |
| 319 | // Remove permissions from old region | 319 | // Remove permissions from old region |
diff --git a/src/core/hle/kernel/vm_manager.h b/src/core/hle/kernel/vm_manager.h index 248cc46dc..d522404fe 100644 --- a/src/core/hle/kernel/vm_manager.h +++ b/src/core/hle/kernel/vm_manager.h | |||
| @@ -189,7 +189,8 @@ public: | |||
| 189 | ResultVal<VAddr> HeapAllocate(VAddr target, u64 size, VMAPermission perms); | 189 | ResultVal<VAddr> HeapAllocate(VAddr target, u64 size, VMAPermission perms); |
| 190 | ResultCode HeapFree(VAddr target, u64 size); | 190 | ResultCode HeapFree(VAddr target, u64 size); |
| 191 | 191 | ||
| 192 | ResultCode MirrorMemory(VAddr dst_addr, VAddr src_addr, u64 size); | 192 | ResultCode MirrorMemory(VAddr dst_addr, VAddr src_addr, u64 size, |
| 193 | MemoryState state = MemoryState::Mapped); | ||
| 193 | 194 | ||
| 194 | /** | 195 | /** |
| 195 | * Scans all VMAs and updates the page table range of any that use the given vector as backing | 196 | * Scans all VMAs and updates the page table range of any that use the given vector as backing |