summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp
diff options
context:
space:
mode:
authorFrederich Munch <colsebas@hotmail.com>2017-07-12 21:22:45 +0000
committerFrederich Munch <colsebas@hotmail.com>2017-07-12 21:22:45 +0000
commit5fdd2cbae8d046707bb0cb1bb47d039a67f17a4a (patch)
tree3bdc8145017c935c018defcc03e28b09a8b81301 /llvm/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp
parent5680b0ca9f840307b832eaa15db5e76ddeaa02ab (diff)
downloadbcm5719-llvm-5fdd2cbae8d046707bb0cb1bb47d039a67f17a4a.tar.gz
bcm5719-llvm-5fdd2cbae8d046707bb0cb1bb47d039a67f17a4a.zip
Allow clients to specify search order of DynamicLibraries.
Summary: Different JITs and other clients of LLVM may have different needs in how symbol resolution should occur. Reviewers: v.g.vassilev, lhames, karies Reviewed By: v.g.vassilev Subscribers: pcanal, llvm-commits Differential Revision: https://reviews.llvm.org/D33529 llvm-svn: 307849
Diffstat (limited to 'llvm/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp')
-rw-r--r--llvm/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/llvm/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp b/llvm/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp
index c54e1b7eed2..370e1c5ed5e 100644
--- a/llvm/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp
+++ b/llvm/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp
@@ -77,6 +77,7 @@ TEST(DynamicLibrary, Overload) {
EXPECT_TRUE(DL.isValid());
EXPECT_TRUE(Err.empty());
+ // Test overloading local symbols does not occur by default
GS = FuncPtr<GetString>(DynamicLibrary::SearchForAddressOfSymbol("TestA"));
EXPECT_TRUE(GS != nullptr && GS == &TestA);
EXPECT_EQ(StdString(GS()), "ProcessCall");
@@ -85,6 +86,12 @@ TEST(DynamicLibrary, Overload) {
EXPECT_TRUE(GS != nullptr && GS == &TestA);
EXPECT_EQ(StdString(GS()), "ProcessCall");
+ // Test overloading by forcing library priority when searching for a symbol
+ DynamicLibrary::SearchOrder = DynamicLibrary::SO_LoadedFirst;
+ GS = FuncPtr<GetString>(DynamicLibrary::SearchForAddressOfSymbol("TestA"));
+ EXPECT_TRUE(GS != nullptr && GS != &TestA);
+ EXPECT_EQ(StdString(GS()), "LibCall");
+
DynamicLibrary::AddSymbol("TestA", PtrFunc(&OverloadTestA));
GS = FuncPtr<GetString>(DL.getAddressOfSymbol("TestA"));
EXPECT_TRUE(GS != nullptr && GS != &OverloadTestA);
@@ -95,6 +102,9 @@ TEST(DynamicLibrary, Overload) {
}
EXPECT_TRUE(FuncPtr<GetString>(DynamicLibrary::SearchForAddressOfSymbol(
"TestA")) == nullptr);
+
+ // Check serach ordering is reset to default after call to llvm_shutdown
+ EXPECT_TRUE(DynamicLibrary::SearchOrder == DynamicLibrary::SO_Linker);
}
TEST(DynamicLibrary, Shutdown) {
OpenPOWER on IntegriCloud