From ab04333ebd9adeffd1619144b70453571f77950a Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Wed, 13 Dec 2023 14:28:04 +0200 Subject: [PATCH] linker : iterator for running non shared libs --- src/core/linker.cpp | 7 +++++-- src/core/loader/elf.cpp | 2 ++ src/core/loader/elf.h | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/core/linker.cpp b/src/core/linker.cpp index 77094b70c..96de3b303 100644 --- a/src/core/linker.cpp +++ b/src/core/linker.cpp @@ -659,8 +659,11 @@ void Linker::Execute() { p.argc = 1; p.argv[0] = "eboot.bin"; //hmm should be ok? - const auto& module = m_modules.at(0); - run_main_entry(module.elf.GetElfEntry() + module.base_virtual_addr, &p, ProgramExitFunc); + for (auto& m : m_modules) { + if (!m.elf.IsSharedLib()) { + run_main_entry(m.elf.GetElfEntry() + m.base_virtual_addr, &p, ProgramExitFunc); + } + } } } // namespace Core diff --git a/src/core/loader/elf.cpp b/src/core/loader/elf.cpp index 729d6b93d..790650571 100644 --- a/src/core/loader/elf.cpp +++ b/src/core/loader/elf.cpp @@ -434,4 +434,6 @@ void Elf::LoadSegment(u64 virtual_addr, u64 file_offset, u64 size) { BREAKPOINT(); // Hmm we didn't return something... } +bool Elf::IsSharedLib() { return m_elf_header.e_type == ET_SCE_DYNAMIC; } + } // namespace Core::Loader diff --git a/src/core/loader/elf.h b/src/core/loader/elf.h index 349d8029d..d90494be1 100644 --- a/src/core/loader/elf.h +++ b/src/core/loader/elf.h @@ -490,6 +490,7 @@ class Elf { std::string ElfPheaderFlagsStr(u32 flags); void LoadSegment(u64 virtual_addr, u64 file_offset, u64 size); + bool IsSharedLib(); private: void Reset();