summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ExecutionEngine/Orc/GlobalMappingLayerTest.cpp
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2015-08-27 22:20:05 +0000
committerLang Hames <lhames@gmail.com>2015-08-27 22:20:05 +0000
commita4b3d4ec3ee1d3b8ac422a34cbd49895b2dfa425 (patch)
treeace644459bc0e47b942f81c7391efa226c940554 /llvm/unittests/ExecutionEngine/Orc/GlobalMappingLayerTest.cpp
parentda89d6804ceda6ee3fbd318388958b51e750f59e (diff)
downloadbcm5719-llvm-a4b3d4ec3ee1d3b8ac422a34cbd49895b2dfa425.tar.gz
bcm5719-llvm-a4b3d4ec3ee1d3b8ac422a34cbd49895b2dfa425.zip
Add a global mapping layer for Orc. Adapted from a patch by Andy Somogyi.
Thanks Andy! llvm-svn: 246226
Diffstat (limited to 'llvm/unittests/ExecutionEngine/Orc/GlobalMappingLayerTest.cpp')
-rw-r--r--llvm/unittests/ExecutionEngine/Orc/GlobalMappingLayerTest.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/llvm/unittests/ExecutionEngine/Orc/GlobalMappingLayerTest.cpp b/llvm/unittests/ExecutionEngine/Orc/GlobalMappingLayerTest.cpp
new file mode 100644
index 00000000000..054fc16cabd
--- /dev/null
+++ b/llvm/unittests/ExecutionEngine/Orc/GlobalMappingLayerTest.cpp
@@ -0,0 +1,55 @@
+//===--- GlobalMappingLayerTest.cpp - Unit test the global mapping layer --===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/ExecutionEngine/Orc/GlobalMappingLayer.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+using namespace llvm::orc;
+
+namespace {
+
+struct MockBaseLayer {
+
+ typedef int ModuleSetHandleT;
+
+ JITSymbol findSymbol(const std::string &Name, bool ExportedSymbolsOnly) {
+ if (Name == "bar")
+ return llvm::orc::JITSymbol(0x4567, JITSymbolFlags::Exported);
+ return nullptr;
+ }
+
+};
+
+TEST(GlobalMappingLayerTest, Empty) {
+ MockBaseLayer M;
+ GlobalMappingLayer<MockBaseLayer> L(M);
+
+ // Test fall-through for missing symbol.
+ auto FooSym = L.findSymbol("foo", true);
+ EXPECT_FALSE(FooSym) << "Found unexpected symbol.";
+
+ // Test fall-through for symbol in base layer.
+ auto BarSym = L.findSymbol("bar", true);
+ EXPECT_EQ(BarSym.getAddress(), static_cast<TargetAddress>(0x4567))
+ << "Symbol lookup fall-through failed.";
+
+ // Test setup of a global mapping.
+ L.setGlobalMapping("foo", 0x0123);
+ auto FooSym2 = L.findSymbol("foo", true);
+ EXPECT_EQ(FooSym2.getAddress(), static_cast<TargetAddress>(0x0123))
+ << "Symbol mapping setup failed.";
+
+ // Test removal of a global mapping.
+ L.eraseGlobalMapping("foo");
+ auto FooSym3 = L.findSymbol("foo", true);
+ EXPECT_FALSE(FooSym3) << "Symbol mapping removal failed.";
+}
+
+}
OpenPOWER on IntegriCloud