From e2ef4419a827c08d3d2786229f5f654de46ea551 Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Wed, 1 Oct 2014 04:11:13 +0000 Subject: [PATCH] [MCJIT] Turn the getSymbolAddress free function created in r218626 into a static member of RTDyldMemoryManager (and rename to getSymbolAddressInProcess). The functionality this provides is very specific to RTDyldMemoryManager, so it makes sense to keep it in that class to avoid accidental re-use. No functional change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218741 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ExecutionEngine/RTDyldMemoryManager.h | 8 +++++--- lib/ExecutionEngine/RTDyldMemoryManager.cpp | 3 ++- unittests/ExecutionEngine/ExecutionEngineTest.cpp | 9 ++++++--- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/include/llvm/ExecutionEngine/RTDyldMemoryManager.h b/include/llvm/ExecutionEngine/RTDyldMemoryManager.h index bbc8684706d..b941efcad01 100644 --- a/include/llvm/ExecutionEngine/RTDyldMemoryManager.h +++ b/include/llvm/ExecutionEngine/RTDyldMemoryManager.h @@ -24,8 +24,6 @@ namespace llvm { class ExecutionEngine; class ObjectImage; -uint64_t getSymbolAddress(const std::string &Name); - // RuntimeDyld clients often want to handle the memory management of // what gets placed where. For JIT clients, this is the subset of // JITMemoryManager required for dynamic loading of binaries. @@ -78,10 +76,14 @@ public: virtual void deregisterEHFrames(uint8_t *Addr, uint64_t LoadAddr, size_t Size); + /// This method returns the address of the specified function or variable in + /// the current process. + static uint64_t getSymbolAddressInProcess(const std::string &Name); + /// This method returns the address of the specified function or variable. /// It is used to resolve symbols during module linking. virtual uint64_t getSymbolAddress(const std::string &Name) { - return llvm::getSymbolAddress(Name); + return getSymbolAddressInProcess(Name); } /// This method returns the address of the specified function. As such it is diff --git a/lib/ExecutionEngine/RTDyldMemoryManager.cpp b/lib/ExecutionEngine/RTDyldMemoryManager.cpp index 2bade6b6a65..51b2d0faab8 100644 --- a/lib/ExecutionEngine/RTDyldMemoryManager.cpp +++ b/lib/ExecutionEngine/RTDyldMemoryManager.cpp @@ -210,7 +210,8 @@ ARM_MATH_IMPORTS(ARM_MATH_DECL) #undef ARM_MATH_DECL #endif -uint64_t getSymbolAddress(const std::string &Name) { +uint64_t +RTDyldMemoryManager::getSymbolAddressInProcess(const std::string &Name) { // This implementation assumes that the host program is the target. // Clients generating code for a remote target should implement their own // memory manager. diff --git a/unittests/ExecutionEngine/ExecutionEngineTest.cpp b/unittests/ExecutionEngine/ExecutionEngineTest.cpp index ad341c8820f..19917a41350 100644 --- a/unittests/ExecutionEngine/ExecutionEngineTest.cpp +++ b/unittests/ExecutionEngine/ExecutionEngineTest.cpp @@ -140,7 +140,8 @@ TEST_F(ExecutionEngineTest, LookupWithMangledName) { // Demonstrate that getSymbolAddress accepts mangled names and always strips // the leading underscore. - EXPECT_EQ(reinterpret_cast(&x), getSymbolAddress("_x")); + EXPECT_EQ(reinterpret_cast(&x), + RTDyldMemoryManager::getSymbolAddressInProcess("_x")); } TEST_F(ExecutionEngineTest, LookupWithMangledAndDemangledSymbol) { @@ -151,7 +152,8 @@ TEST_F(ExecutionEngineTest, LookupWithMangledAndDemangledSymbol) { // Lookup the demangled name first, even if there's a demangled symbol that // matches the input already. - EXPECT_EQ(reinterpret_cast(&x), getSymbolAddress("_x")); + EXPECT_EQ(reinterpret_cast(&x), + RTDyldMemoryManager::getSymbolAddressInProcess("_x")); } TEST_F(ExecutionEngineTest, LookupwithDemangledName) { @@ -159,7 +161,8 @@ TEST_F(ExecutionEngineTest, LookupwithDemangledName) { llvm::sys::DynamicLibrary::AddSymbol("_x", &_x); // But do fallback to looking up a demangled name if there's no ambiguity - EXPECT_EQ(reinterpret_cast(&_x), getSymbolAddress("_x")); + EXPECT_EQ(reinterpret_cast(&_x), + RTDyldMemoryManager::getSymbolAddressInProcess("_x")); } } -- 2.34.1