summaryrefslogtreecommitdiff
path: root/src/core/loader/elf.cpp
diff options
context:
space:
mode:
authorGravatar Emmanuel Gil Peyrot2015-01-06 21:30:40 +0000
committerGravatar Emmanuel Gil Peyrot2015-01-15 21:21:26 +0000
commitb5237e885df72f6c37532fc8af9573966e7b07e5 (patch)
treefdfd4da299cc2779f35fcc30e770b85b9e710166 /src/core/loader/elf.cpp
parentLoader: Initialize the default NCCH values in the class declaration, not in t... (diff)
downloadyuzu-b5237e885df72f6c37532fc8af9573966e7b07e5.tar.gz
yuzu-b5237e885df72f6c37532fc8af9573966e7b07e5.tar.xz
yuzu-b5237e885df72f6c37532fc8af9573966e7b07e5.zip
Loader: Keep a reference to the file and pass it to the correct AppLoader, instead of loading it multiple times.
Diffstat (limited to 'src/core/loader/elf.cpp')
-rw-r--r--src/core/loader/elf.cpp30
1 files changed, 8 insertions, 22 deletions
diff --git a/src/core/loader/elf.cpp b/src/core/loader/elf.cpp
index ee711d8b2..d1a1ef595 100644
--- a/src/core/loader/elf.cpp
+++ b/src/core/loader/elf.cpp
@@ -330,34 +330,20 @@ bool ElfReader::LoadSymbols() {
330 330
331namespace Loader { 331namespace Loader {
332 332
333/// AppLoader_ELF constructor
334AppLoader_ELF::AppLoader_ELF(const std::string& filename) {
335 this->filename = filename;
336}
337
338/// AppLoader_NCCH destructor
339AppLoader_ELF::~AppLoader_ELF() {
340}
341
342ResultStatus AppLoader_ELF::Load() { 333ResultStatus AppLoader_ELF::Load() {
343 LOG_INFO(Loader, "Loading ELF file %s...", filename.c_str());
344
345 if (is_loaded) 334 if (is_loaded)
346 return ResultStatus::ErrorAlreadyLoaded; 335 return ResultStatus::ErrorAlreadyLoaded;
347 336
348 FileUtil::IOFile file(filename, "rb"); 337 if (!file->IsOpen())
338 return ResultStatus::Error;
349 339
350 if (file.IsOpen()) { 340 u32 size = static_cast<u32>(file->GetSize());
351 u32 size = (u32)file.GetSize(); 341 std::unique_ptr<u8[]> buffer(new u8[size]);
352 std::unique_ptr<u8[]> buffer(new u8[size]); 342 file->ReadBytes(&buffer[0], size);
353 file.ReadBytes(&buffer[0], size);
354 343
355 ElfReader elf_reader(&buffer[0]); 344 ElfReader elf_reader(&buffer[0]);
356 elf_reader.LoadInto(0x00100000); 345 elf_reader.LoadInto(0x00100000);
357 Kernel::LoadExec(elf_reader.GetEntryPoint()); 346 Kernel::LoadExec(elf_reader.GetEntryPoint());
358 } else {
359 return ResultStatus::Error;
360 }
361 347
362 is_loaded = true; 348 is_loaded = true;
363 return ResultStatus::Success; 349 return ResultStatus::Success;