summaryrefslogtreecommitdiff
path: root/src/core/loader/elf.cpp
diff options
context:
space:
mode:
authorGravatar Lioncash2018-09-29 15:57:40 -0400
committerGravatar Lioncash2018-09-29 16:00:03 -0400
commita63e6f9dfd75f89841817a0185d606da52c7a4a6 (patch)
tree5ebf817e2c5ce6736d89e938769be3f73fbb30f4 /src/core/loader/elf.cpp
parentMerge pull request #1388 from FearlessTobi/port-4258 (diff)
downloadyuzu-a63e6f9dfd75f89841817a0185d606da52c7a4a6.tar.gz
yuzu-a63e6f9dfd75f89841817a0185d606da52c7a4a6.tar.xz
yuzu-a63e6f9dfd75f89841817a0185d606da52c7a4a6.zip
loader: Make the Load() function take a process as a regular reference, not a SharedPtr
A process should never require being reference counted in this situation. If the handle to a process is freed before this function is called, it's definitely a bug with our lifetime management, so we can put the requirement in place for the API that the process must be a valid instance.
Diffstat (limited to 'src/core/loader/elf.cpp')
-rw-r--r--src/core/loader/elf.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/core/loader/elf.cpp b/src/core/loader/elf.cpp
index ff1221574..5712a2a11 100644
--- a/src/core/loader/elf.cpp
+++ b/src/core/loader/elf.cpp
@@ -387,7 +387,7 @@ FileType AppLoader_ELF::IdentifyType(const FileSys::VirtualFile& file) {
387 return FileType::Error; 387 return FileType::Error;
388} 388}
389 389
390ResultStatus AppLoader_ELF::Load(Kernel::SharedPtr<Kernel::Process>& process) { 390ResultStatus AppLoader_ELF::Load(Kernel::Process& process) {
391 if (is_loaded) 391 if (is_loaded)
392 return ResultStatus::ErrorAlreadyLoaded; 392 return ResultStatus::ErrorAlreadyLoaded;
393 393
@@ -395,13 +395,13 @@ ResultStatus AppLoader_ELF::Load(Kernel::SharedPtr<Kernel::Process>& process) {
395 if (buffer.size() != file->GetSize()) 395 if (buffer.size() != file->GetSize())
396 return ResultStatus::ErrorIncorrectELFFileSize; 396 return ResultStatus::ErrorIncorrectELFFileSize;
397 397
398 const VAddr base_address = process->vm_manager.GetCodeRegionBaseAddress(); 398 const VAddr base_address = process.vm_manager.GetCodeRegionBaseAddress();
399 ElfReader elf_reader(&buffer[0]); 399 ElfReader elf_reader(&buffer[0]);
400 SharedPtr<CodeSet> codeset = elf_reader.LoadInto(base_address); 400 SharedPtr<CodeSet> codeset = elf_reader.LoadInto(base_address);
401 codeset->name = file->GetName(); 401 codeset->name = file->GetName();
402 402
403 process->LoadModule(codeset, codeset->entrypoint); 403 process.LoadModule(codeset, codeset->entrypoint);
404 process->Run(codeset->entrypoint, 48, Memory::DEFAULT_STACK_SIZE); 404 process.Run(codeset->entrypoint, 48, Memory::DEFAULT_STACK_SIZE);
405 405
406 is_loaded = true; 406 is_loaded = true;
407 return ResultStatus::Success; 407 return ResultStatus::Success;