diff options
| author | 2018-10-12 22:52:12 -0400 | |
|---|---|---|
| committer | 2018-10-12 22:52:12 -0400 | |
| commit | c2aa4293ec647a3712299c5b53f3ca592aaf9c0e (patch) | |
| tree | 08a703b6913733042091e16c7c90cc34d991f537 /src/core/hle/kernel/process.cpp | |
| parent | Merge pull request #1484 from FernandoS27/calculate-size (diff) | |
| parent | kernel/process: Make CodeSet a regular non-inherited object (diff) | |
| download | yuzu-c2aa4293ec647a3712299c5b53f3ca592aaf9c0e.tar.gz yuzu-c2aa4293ec647a3712299c5b53f3ca592aaf9c0e.tar.xz yuzu-c2aa4293ec647a3712299c5b53f3ca592aaf9c0e.zip | |
Merge pull request #1483 from lioncash/codeset
kernel/process: Make CodeSet a regular non-inherited object
Diffstat (limited to 'src/core/hle/kernel/process.cpp')
| -rw-r--r-- | src/core/hle/kernel/process.cpp | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/src/core/hle/kernel/process.cpp b/src/core/hle/kernel/process.cpp index fb0027a71..c80b2c507 100644 --- a/src/core/hle/kernel/process.cpp +++ b/src/core/hle/kernel/process.cpp | |||
| @@ -20,13 +20,7 @@ | |||
| 20 | 20 | ||
| 21 | namespace Kernel { | 21 | namespace Kernel { |
| 22 | 22 | ||
| 23 | SharedPtr<CodeSet> CodeSet::Create(KernelCore& kernel, std::string name) { | 23 | CodeSet::CodeSet() = default; |
| 24 | SharedPtr<CodeSet> codeset(new CodeSet(kernel)); | ||
| 25 | codeset->name = std::move(name); | ||
| 26 | return codeset; | ||
| 27 | } | ||
| 28 | |||
| 29 | CodeSet::CodeSet(KernelCore& kernel) : Object{kernel} {} | ||
| 30 | CodeSet::~CodeSet() = default; | 24 | CodeSet::~CodeSet() = default; |
| 31 | 25 | ||
| 32 | SharedPtr<Process> Process::Create(KernelCore& kernel, std::string&& name) { | 26 | SharedPtr<Process> Process::Create(KernelCore& kernel, std::string&& name) { |
| @@ -224,20 +218,20 @@ void Process::FreeTLSSlot(VAddr tls_address) { | |||
| 224 | tls_slots[tls_page].reset(tls_slot); | 218 | tls_slots[tls_page].reset(tls_slot); |
| 225 | } | 219 | } |
| 226 | 220 | ||
| 227 | void Process::LoadModule(SharedPtr<CodeSet> module_, VAddr base_addr) { | 221 | void Process::LoadModule(CodeSet module_, VAddr base_addr) { |
| 228 | const auto MapSegment = [&](CodeSet::Segment& segment, VMAPermission permissions, | 222 | const auto MapSegment = [&](CodeSet::Segment& segment, VMAPermission permissions, |
| 229 | MemoryState memory_state) { | 223 | MemoryState memory_state) { |
| 230 | auto vma = vm_manager | 224 | const auto vma = vm_manager |
| 231 | .MapMemoryBlock(segment.addr + base_addr, module_->memory, segment.offset, | 225 | .MapMemoryBlock(segment.addr + base_addr, module_.memory, |
| 232 | segment.size, memory_state) | 226 | segment.offset, segment.size, memory_state) |
| 233 | .Unwrap(); | 227 | .Unwrap(); |
| 234 | vm_manager.Reprotect(vma, permissions); | 228 | vm_manager.Reprotect(vma, permissions); |
| 235 | }; | 229 | }; |
| 236 | 230 | ||
| 237 | // Map CodeSet segments | 231 | // Map CodeSet segments |
| 238 | MapSegment(module_->CodeSegment(), VMAPermission::ReadExecute, MemoryState::CodeStatic); | 232 | MapSegment(module_.CodeSegment(), VMAPermission::ReadExecute, MemoryState::CodeStatic); |
| 239 | MapSegment(module_->RODataSegment(), VMAPermission::Read, MemoryState::CodeMutable); | 233 | MapSegment(module_.RODataSegment(), VMAPermission::Read, MemoryState::CodeMutable); |
| 240 | MapSegment(module_->DataSegment(), VMAPermission::ReadWrite, MemoryState::CodeMutable); | 234 | MapSegment(module_.DataSegment(), VMAPermission::ReadWrite, MemoryState::CodeMutable); |
| 241 | } | 235 | } |
| 242 | 236 | ||
| 243 | ResultVal<VAddr> Process::HeapAllocate(VAddr target, u64 size, VMAPermission perms) { | 237 | ResultVal<VAddr> Process::HeapAllocate(VAddr target, u64 size, VMAPermission perms) { |