From 68f32d85c9c00a7bfc018862cd1a2e44f80ac737 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Wed, 9 Mar 2022 14:27:23 -0800 Subject: [PATCH] CodeLoader: Expose base ELF loaded offset Useful for gdb --- External/FEXCore/include/FEXCore/Core/CodeLoader.h | 2 ++ Source/Tests/ELFCodeLoader2.h | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/External/FEXCore/include/FEXCore/Core/CodeLoader.h b/External/FEXCore/include/FEXCore/Core/CodeLoader.h index 9fdddf6cc..a0f3ea016 100644 --- a/External/FEXCore/include/FEXCore/Core/CodeLoader.h +++ b/External/FEXCore/include/FEXCore/Core/CodeLoader.h @@ -48,6 +48,8 @@ public: using IRHandler = std::function; virtual void AddIR(IRHandler Handler) {} + + virtual uint64_t GetBaseOffset() const { return 0; } }; diff --git a/Source/Tests/ELFCodeLoader2.h b/Source/Tests/ELFCodeLoader2.h index d620aa7d0..87524d97b 100644 --- a/Source/Tests/ELFCodeLoader2.h +++ b/Source/Tests/ELFCodeLoader2.h @@ -366,6 +366,9 @@ class ELFCodeLoader2 final : public FEXCore::CodeLoader { if (auto elf = LoadElfFile(MainElf, &BrkBase, Mapper, Unmapper)) { LoadBase = *elf; + if (MainElf.ehdr.e_type == ET_DYN) { + BaseOffset = LoadBase; + } } else { LogMan::Msg::EFmt("Failed to load elf file"); return false; @@ -620,6 +623,10 @@ class ELFCodeLoader2 final : public FEXCore::CodeLoader { size = AuxTabSize; } + uint64_t GetBaseOffset() const override { + return BaseOffset; + } + bool Is64BitMode() { return MainElf.type == ::ELFLoader::ELFContainer::TYPE_X86_64; } @@ -643,5 +650,6 @@ class ELFCodeLoader2 final : public FEXCore::CodeLoader { uint64_t AuxTabBase, AuxTabSize; uint64_t ArgumentBackingSize{}; uint64_t EnvironmentBackingSize{}; + uint64_t BaseOffset{}; };