1*4fcf8434SAnubhab Ghosh //===-------------- MapperJITLinkMemoryManagerTest.cpp ----------------===//
2*4fcf8434SAnubhab Ghosh //
3*4fcf8434SAnubhab Ghosh // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*4fcf8434SAnubhab Ghosh // See https://llvm.org/LICENSE.txt for license information.
5*4fcf8434SAnubhab Ghosh // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*4fcf8434SAnubhab Ghosh //
7*4fcf8434SAnubhab Ghosh //===----------------------------------------------------------------------===//
8*4fcf8434SAnubhab Ghosh 
9*4fcf8434SAnubhab Ghosh #include "OrcTestCommon.h"
10*4fcf8434SAnubhab Ghosh 
11*4fcf8434SAnubhab Ghosh #include "llvm/ExecutionEngine/Orc/MapperJITLinkMemoryManager.h"
12*4fcf8434SAnubhab Ghosh 
13*4fcf8434SAnubhab Ghosh #include "llvm/Testing/Support/Error.h"
14*4fcf8434SAnubhab Ghosh 
15*4fcf8434SAnubhab Ghosh #include <vector>
16*4fcf8434SAnubhab Ghosh 
17*4fcf8434SAnubhab Ghosh using namespace llvm;
18*4fcf8434SAnubhab Ghosh using namespace llvm::jitlink;
19*4fcf8434SAnubhab Ghosh using namespace llvm::orc;
20*4fcf8434SAnubhab Ghosh using namespace llvm::orc::shared;
21*4fcf8434SAnubhab Ghosh 
22*4fcf8434SAnubhab Ghosh namespace {
23*4fcf8434SAnubhab Ghosh 
TEST(MapperJITLinkMemoryManagerTest,InProcess)24*4fcf8434SAnubhab Ghosh TEST(MapperJITLinkMemoryManagerTest, InProcess) {
25*4fcf8434SAnubhab Ghosh   auto MemMgr = cantFail(
26*4fcf8434SAnubhab Ghosh       MapperJITLinkMemoryManager::CreateWithMapper<InProcessMemoryMapper>());
27*4fcf8434SAnubhab Ghosh 
28*4fcf8434SAnubhab Ghosh   StringRef Hello = "hello";
29*4fcf8434SAnubhab Ghosh   auto SSA = jitlink::SimpleSegmentAlloc::Create(
30*4fcf8434SAnubhab Ghosh       *MemMgr, nullptr, {{jitlink::MemProt::Read, {Hello.size(), Align(1)}}});
31*4fcf8434SAnubhab Ghosh   EXPECT_THAT_EXPECTED(SSA, Succeeded());
32*4fcf8434SAnubhab Ghosh   auto SegInfo = SSA->getSegInfo(jitlink::MemProt::Read);
33*4fcf8434SAnubhab Ghosh   memcpy(SegInfo.WorkingMem.data(), Hello.data(), Hello.size());
34*4fcf8434SAnubhab Ghosh 
35*4fcf8434SAnubhab Ghosh   auto FA = SSA->finalize();
36*4fcf8434SAnubhab Ghosh   EXPECT_THAT_EXPECTED(FA, Succeeded());
37*4fcf8434SAnubhab Ghosh 
38*4fcf8434SAnubhab Ghosh   ExecutorAddr TargetAddr(SegInfo.Addr);
39*4fcf8434SAnubhab Ghosh 
40*4fcf8434SAnubhab Ghosh   const char *TargetMem = TargetAddr.toPtr<const char *>();
41*4fcf8434SAnubhab Ghosh   StringRef TargetHello(TargetMem, Hello.size());
42*4fcf8434SAnubhab Ghosh   EXPECT_EQ(Hello, TargetHello);
43*4fcf8434SAnubhab Ghosh 
44*4fcf8434SAnubhab Ghosh   auto Err2 = MemMgr->deallocate(std::move(*FA));
45*4fcf8434SAnubhab Ghosh   EXPECT_THAT_ERROR(std::move(Err2), Succeeded());
46*4fcf8434SAnubhab Ghosh }
47*4fcf8434SAnubhab Ghosh 
48*4fcf8434SAnubhab Ghosh } // namespace
49