1*9880d681SAndroid Build Coastguard Worker //===--- GlobalMappingLayerTest.cpp - Unit test the global mapping layer --===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker #include "llvm/ExecutionEngine/Orc/GlobalMappingLayer.h"
11*9880d681SAndroid Build Coastguard Worker #include "gtest/gtest.h"
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker using namespace llvm;
14*9880d681SAndroid Build Coastguard Worker using namespace llvm::orc;
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker namespace {
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker struct MockBaseLayer {
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker typedef int ModuleSetHandleT;
21*9880d681SAndroid Build Coastguard Worker
findSymbol__anonb55ad42a0111::MockBaseLayer22*9880d681SAndroid Build Coastguard Worker JITSymbol findSymbol(const std::string &Name, bool ExportedSymbolsOnly) {
23*9880d681SAndroid Build Coastguard Worker if (Name == "bar")
24*9880d681SAndroid Build Coastguard Worker return llvm::orc::JITSymbol(0x4567, JITSymbolFlags::Exported);
25*9880d681SAndroid Build Coastguard Worker return nullptr;
26*9880d681SAndroid Build Coastguard Worker }
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Worker };
29*9880d681SAndroid Build Coastguard Worker
TEST(GlobalMappingLayerTest,Empty)30*9880d681SAndroid Build Coastguard Worker TEST(GlobalMappingLayerTest, Empty) {
31*9880d681SAndroid Build Coastguard Worker MockBaseLayer M;
32*9880d681SAndroid Build Coastguard Worker GlobalMappingLayer<MockBaseLayer> L(M);
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Worker // Test fall-through for missing symbol.
35*9880d681SAndroid Build Coastguard Worker auto FooSym = L.findSymbol("foo", true);
36*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(FooSym) << "Found unexpected symbol.";
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker // Test fall-through for symbol in base layer.
39*9880d681SAndroid Build Coastguard Worker auto BarSym = L.findSymbol("bar", true);
40*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(BarSym.getAddress(), static_cast<TargetAddress>(0x4567))
41*9880d681SAndroid Build Coastguard Worker << "Symbol lookup fall-through failed.";
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Worker // Test setup of a global mapping.
44*9880d681SAndroid Build Coastguard Worker L.setGlobalMapping("foo", 0x0123);
45*9880d681SAndroid Build Coastguard Worker auto FooSym2 = L.findSymbol("foo", true);
46*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(FooSym2.getAddress(), static_cast<TargetAddress>(0x0123))
47*9880d681SAndroid Build Coastguard Worker << "Symbol mapping setup failed.";
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Worker // Test removal of a global mapping.
50*9880d681SAndroid Build Coastguard Worker L.eraseGlobalMapping("foo");
51*9880d681SAndroid Build Coastguard Worker auto FooSym3 = L.findSymbol("foo", true);
52*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(FooSym3) << "Symbol mapping removal failed.";
53*9880d681SAndroid Build Coastguard Worker }
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Worker }
56