summaryrefslogtreecommitdiff
path: root/src/core/loader
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/loader')
-rw-r--r--src/core/loader/linker.cpp12
-rw-r--r--src/core/loader/nso.cpp3
-rw-r--r--src/core/loader/nso.h3
3 files changed, 8 insertions, 10 deletions
diff --git a/src/core/loader/linker.cpp b/src/core/loader/linker.cpp
index f82c6f4b4..87cc65e91 100644
--- a/src/core/loader/linker.cpp
+++ b/src/core/loader/linker.cpp
@@ -48,9 +48,9 @@ struct Elf64_Sym {
48}; 48};
49static_assert(sizeof(Elf64_Sym) == 0x18, "Elf64_Sym has incorrect size."); 49static_assert(sizeof(Elf64_Sym) == 0x18, "Elf64_Sym has incorrect size.");
50 50
51void Linker::WriteRelocations(std::vector<u8>& program_image, 51void Linker::WriteRelocations(std::vector<u8>& program_image, const std::vector<Symbol>& symbols,
52 const std::vector<Symbol>& symbols, u64 relocation_offset, 52 u64 relocation_offset, u64 size, bool is_jump_relocation,
53 u64 size, bool is_jump_relocation, VAddr load_base) { 53 VAddr load_base) {
54 for (u64 i = 0; i < size; i += sizeof(Elf64_Rela)) { 54 for (u64 i = 0; i < size; i += sizeof(Elf64_Rela)) {
55 Elf64_Rela rela; 55 Elf64_Rela rela;
56 std::memcpy(&rela, &program_image[relocation_offset + i], sizeof(Elf64_Rela)); 56 std::memcpy(&rela, &program_image[relocation_offset + i], sizeof(Elf64_Rela));
@@ -90,8 +90,7 @@ void Linker::WriteRelocations(std::vector<u8>& program_image,
90 } 90 }
91} 91}
92 92
93void Linker::Relocate(std::vector<u8>& program_image, u32 dynamic_section_offset, 93void Linker::Relocate(std::vector<u8>& program_image, u32 dynamic_section_offset, VAddr load_base) {
94 VAddr load_base) {
95 std::map<u64, u64> dynamic; 94 std::map<u64, u64> dynamic;
96 while (dynamic_section_offset < program_image.size()) { 95 while (dynamic_section_offset < program_image.size()) {
97 Elf64_Dyn dyn; 96 Elf64_Dyn dyn;
@@ -141,8 +140,7 @@ void Linker::ResolveImports() {
141 const auto& search = exports.find(import.first); 140 const auto& search = exports.find(import.first);
142 if (search != exports.end()) { 141 if (search != exports.end()) {
143 Memory::Write64(import.second.ea, search->second + import.second.addend); 142 Memory::Write64(import.second.ea, search->second + import.second.addend);
144 } 143 } else {
145 else {
146 LOG_ERROR(Loader, "Unresolved import: %s", import.first.c_str()); 144 LOG_ERROR(Loader, "Unresolved import: %s", import.first.c_str());
147 } 145 }
148 } 146 }
diff --git a/src/core/loader/nso.cpp b/src/core/loader/nso.cpp
index 7e1953701..a7d714bc8 100644
--- a/src/core/loader/nso.cpp
+++ b/src/core/loader/nso.cpp
@@ -157,7 +157,8 @@ ResultStatus AppLoader_NSO::Load(Kernel::SharedPtr<Kernel::Process>& process) {
157 157
158 // Load NSO modules 158 // Load NSO modules
159 VAddr next_load_addr{Memory::PROCESS_IMAGE_VADDR}; 159 VAddr next_load_addr{Memory::PROCESS_IMAGE_VADDR};
160 for (const auto& module : {"rtld", "sdk", "subsdk0", "subsdk1", "subsdk2", "subsdk3", "subsdk4"}) { 160 for (const auto& module :
161 {"rtld", "sdk", "subsdk0", "subsdk1", "subsdk2", "subsdk3", "subsdk4"}) {
161 const std::string path = filepath.substr(0, filepath.find_last_of("/\\")) + "/" + module; 162 const std::string path = filepath.substr(0, filepath.find_last_of("/\\")) + "/" + module;
162 const VAddr load_addr = next_load_addr; 163 const VAddr load_addr = next_load_addr;
163 next_load_addr = LoadNso(path, load_addr); 164 next_load_addr = LoadNso(path, load_addr);
diff --git a/src/core/loader/nso.h b/src/core/loader/nso.h
index 28df00384..03424e70d 100644
--- a/src/core/loader/nso.h
+++ b/src/core/loader/nso.h
@@ -18,8 +18,7 @@ namespace Loader {
18class AppLoader_NSO final : public AppLoader, Linker { 18class AppLoader_NSO final : public AppLoader, Linker {
19public: 19public:
20 AppLoader_NSO(FileUtil::IOFile&& file, std::string filepath) 20 AppLoader_NSO(FileUtil::IOFile&& file, std::string filepath)
21 : AppLoader(std::move(file)), filepath(std::move(filepath)) { 21 : AppLoader(std::move(file)), filepath(std::move(filepath)) {}
22 }
23 22
24 /** 23 /**
25 * Returns the type of the file 24 * Returns the type of the file