diff options
author | Lang Hames <lhames@gmail.com> | 2015-08-27 22:20:05 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2015-08-27 22:20:05 +0000 |
commit | a4b3d4ec3ee1d3b8ac422a34cbd49895b2dfa425 (patch) | |
tree | ace644459bc0e47b942f81c7391efa226c940554 /llvm/unittests/ExecutionEngine/Orc/GlobalMappingLayerTest.cpp | |
parent | da89d6804ceda6ee3fbd318388958b51e750f59e (diff) | |
download | bcm5719-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.cpp | 55 |
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."; +} + +} |