summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2018-06-12 20:43:18 +0000
committerLang Hames <lhames@gmail.com>2018-06-12 20:43:18 +0000
commit2aae25819e8a83fa739ac602dd0ef3199deb63a7 (patch)
treebd1943d21793a4a21878046b323ac94e9932d260 /llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
parent253584fdaf7dcda75fc56478895f0d4fad1e8534 (diff)
downloadbcm5719-llvm-2aae25819e8a83fa739ac602dd0ef3199deb63a7.tar.gz
bcm5719-llvm-2aae25819e8a83fa739ac602dd0ef3199deb63a7.zip
[ORC] Add a fallback definition generator for VSOs.
If a VSO has a fallback definition generator attached it will be called during lookup (and lookupFlags) for any unresolved symbols. The definition generator can add new definitions to the VSO for any unresolved symbol. This allows VSOs to generate new definitions on demand. The immediate use case for this code is supporting VSOs that can import definitions found via dlsym on demand. llvm-svn: 334538
Diffstat (limited to 'llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp')
-rw-r--r--llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp b/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
index bc7a3622a06..01f81d9a80f 100644
--- a/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
@@ -508,6 +508,33 @@ TEST(CoreAPIsTest, DefineMaterializingSymbol) {
EXPECT_TRUE(BarResolved) << "Bar should have been resolved";
}
+TEST(CoreAPIsTest, FallbackDefinitionGeneratorTest) {
+ constexpr JITTargetAddress FakeFooAddr = 0xdeadbeef;
+ constexpr JITTargetAddress FakeBarAddr = 0xcafef00d;
+
+ ExecutionSession ES;
+ auto Foo = ES.getSymbolStringPool().intern("foo");
+ auto Bar = ES.getSymbolStringPool().intern("bar");
+
+ auto FooSym = JITEvaluatedSymbol(FakeFooAddr, JITSymbolFlags::Exported);
+ auto BarSym = JITEvaluatedSymbol(FakeBarAddr, JITSymbolFlags::Exported);
+
+ auto &V = ES.createVSO("V");
+
+ cantFail(V.define(absoluteSymbols({{Foo, FooSym}})));
+
+ V.setFallbackDefinitionGenerator([&](VSO &W, const SymbolNameSet &Names) {
+ cantFail(W.define(absoluteSymbols({{Bar, BarSym}})));
+ return SymbolNameSet({Bar});
+ });
+
+ auto Result = cantFail(lookup({&V}, {Foo, Bar}));
+
+ EXPECT_EQ(Result.count(Bar), 1U) << "Expected to find fallback def for 'bar'";
+ EXPECT_EQ(Result[Bar].getAddress(), FakeBarAddr)
+ << "Expected address of fallback def for 'bar' to be " << FakeBarAddr;
+}
+
TEST(CoreAPIsTest, FailResolution) {
ExecutionSession ES;
auto Foo = ES.getSymbolStringPool().intern("foo");
OpenPOWER on IntegriCloud