From d0d494a1518477cd902d91fc2b3606c578cf0eaa Mon Sep 17 00:00:00 2001 From: Tim Schumacher Date: Fri, 28 Oct 2022 16:48:48 +0200 Subject: [PATCH] LibELF: Drop the separate file name member from DynamicLoader --- Userland/Libraries/LibELF/DynamicLinker.cpp | 8 ++++---- Userland/Libraries/LibELF/DynamicLoader.cpp | 17 ++++++++--------- Userland/Libraries/LibELF/DynamicLoader.h | 7 +++---- Userland/Utilities/readelf.cpp | 2 +- 4 files changed, 16 insertions(+), 18 deletions(-) diff --git a/Userland/Libraries/LibELF/DynamicLinker.cpp b/Userland/Libraries/LibELF/DynamicLinker.cpp index 9e83a388f0..13caea778a 100644 --- a/Userland/Libraries/LibELF/DynamicLinker.cpp +++ b/Userland/Libraries/LibELF/DynamicLinker.cpp @@ -89,7 +89,7 @@ static String get_library_name(String path) static Result, DlErrorMessage> map_library(String const& filename, int fd, String const& filepath) { - auto result = ELF::DynamicLoader::try_create(fd, filename, filepath); + auto result = ELF::DynamicLoader::try_create(fd, filepath); if (result.is_error()) { return result; } @@ -373,7 +373,7 @@ static Result link_main_library(String const& name, int fl for (auto& loader : loaders) { bool success = loader.link(flags); if (!success) { - return DlErrorMessage { String::formatted("Failed to link library {}", loader.filename()) }; + return DlErrorMessage { String::formatted("Failed to link library {}", loader.filepath()) }; } } @@ -382,7 +382,7 @@ static Result link_main_library(String const& name, int fl VERIFY(!result.is_error()); auto& object = result.value(); - if (loader.filename() == "libsystem.so"sv) { + if (loader.filepath().ends_with("/libsystem.so"sv)) { VERIFY(!loader.text_segments().is_empty()); for (auto const& segment : loader.text_segments()) { if (syscall(SC_msyscall, segment.address().get())) { @@ -391,7 +391,7 @@ static Result link_main_library(String const& name, int fl } } - if (loader.filename() == "libc.so"sv) { + if (loader.filepath().ends_with("/libc.so"sv)) { initialize_libc(*object); } } diff --git a/Userland/Libraries/LibELF/DynamicLoader.cpp b/Userland/Libraries/LibELF/DynamicLoader.cpp index e2babf86ae..15c5b1bc69 100644 --- a/Userland/Libraries/LibELF/DynamicLoader.cpp +++ b/Userland/Libraries/LibELF/DynamicLoader.cpp @@ -37,7 +37,7 @@ static void* mmap_with_name(void* addr, size_t length, int prot, int flags, int namespace ELF { -Result, DlErrorMessage> DynamicLoader::try_create(int fd, String filename, String filepath) +Result, DlErrorMessage> DynamicLoader::try_create(int fd, String filepath) { VERIFY(filepath.starts_with('/')); @@ -49,7 +49,7 @@ Result, DlErrorMessage> DynamicLoader::try_create(i VERIFY(stat.st_size >= 0); auto size = static_cast(stat.st_size); if (size < sizeof(ElfW(Ehdr))) - return DlErrorMessage { String::formatted("File {} has invalid ELF header", filename) }; + return DlErrorMessage { String::formatted("File {} has invalid ELF header", filepath) }; String file_mmap_name = String::formatted("ELF_DYN: {}", filepath); auto* data = mmap_with_name(nullptr, size, PROT_READ, MAP_SHARED, fd, 0, file_mmap_name.characters()); @@ -57,15 +57,14 @@ Result, DlErrorMessage> DynamicLoader::try_create(i return DlErrorMessage { "DynamicLoader::try_create mmap" }; } - auto loader = adopt_ref(*new DynamicLoader(fd, move(filename), data, size, filepath)); + auto loader = adopt_ref(*new DynamicLoader(fd, move(filepath), data, size)); if (!loader->is_valid()) return DlErrorMessage { "ELF image validation failed" }; return loader; } -DynamicLoader::DynamicLoader(int fd, String filename, void* data, size_t size, String filepath) - : m_filename(move(filename)) - , m_filepath(move(filepath)) +DynamicLoader::DynamicLoader(int fd, String filepath, void* data, size_t size) + : m_filepath(move(filepath)) , m_file_size(size) , m_image_fd(fd) , m_file_data(data) @@ -75,7 +74,7 @@ DynamicLoader::DynamicLoader(int fd, String filename, void* data, size_t size, S if (m_valid) find_tls_size_and_alignment(); else - dbgln("Image validation failed for file {}", m_filename); + dbgln("Image validation failed for file {}", m_filepath); } DynamicLoader::~DynamicLoader() @@ -204,7 +203,7 @@ void DynamicLoader::do_main_relocations() auto do_single_relocation = [&](const ELF::DynamicObject::Relocation& relocation) { switch (do_relocation(relocation, ShouldInitializeWeak::No)) { case RelocationResult::Failed: - dbgln("Loader.so: {} unresolved symbol '{}'", m_filename, relocation.symbol().name()); + dbgln("Loader.so: {} unresolved symbol '{}'", m_filepath, relocation.symbol().name()); VERIFY_NOT_REACHED(); case RelocationResult::ResolveLater: m_unresolved_relocations.append(relocation); @@ -264,7 +263,7 @@ void DynamicLoader::do_lazy_relocations() { for (auto const& relocation : m_unresolved_relocations) { if (auto res = do_relocation(relocation, ShouldInitializeWeak::Yes); res != RelocationResult::Success) { - dbgln("Loader.so: {} unresolved symbol '{}'", m_filename, relocation.symbol().name()); + dbgln("Loader.so: {} unresolved symbol '{}'", m_filepath, relocation.symbol().name()); VERIFY_NOT_REACHED(); } } diff --git a/Userland/Libraries/LibELF/DynamicLoader.h b/Userland/Libraries/LibELF/DynamicLoader.h index 5e1a1704c3..70640b2101 100644 --- a/Userland/Libraries/LibELF/DynamicLoader.h +++ b/Userland/Libraries/LibELF/DynamicLoader.h @@ -42,10 +42,10 @@ enum class ShouldInitializeWeak { class DynamicLoader : public RefCounted { public: - static Result, DlErrorMessage> try_create(int fd, String filename, String filepath); + static Result, DlErrorMessage> try_create(int fd, String filepath); ~DynamicLoader(); - String const& filename() const { return m_filename; } + String const& filepath() const { return m_filepath; } bool is_valid() const { return m_valid; } @@ -87,7 +87,7 @@ public: bool is_fully_initialized() const { return m_fully_initialized; } private: - DynamicLoader(int fd, String filename, void* file_data, size_t file_size, String filepath); + DynamicLoader(int fd, String filepath, void* file_data, size_t file_size); class ProgramHeaderRegion { public: @@ -137,7 +137,6 @@ private: void do_relr_relocations(); void find_tls_size_and_alignment(); - String m_filename; String m_filepath; size_t m_file_size { 0 }; int m_image_fd { -1 }; diff --git a/Userland/Utilities/readelf.cpp b/Userland/Utilities/readelf.cpp index b5a0556bba..ca28547873 100644 --- a/Userland/Utilities/readelf.cpp +++ b/Userland/Utilities/readelf.cpp @@ -339,7 +339,7 @@ ErrorOr serenity_main(Main::Arguments arguments) } int fd = TRY(Core::System::open(path, O_RDONLY)); - auto result = ELF::DynamicLoader::try_create(fd, path, path); + auto result = ELF::DynamicLoader::try_create(fd, path); if (result.is_error()) { outln("{}", result.error().text); return 1;