//===--------- JITLinkMocks.cpp - Mock APIs for JITLink unit tests --------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "JITLinkMocks.h" #include "llvm/ExecutionEngine/JITLink/MachO_x86_64.h" #include "llvm/Testing/Support/Error.h" #include "gtest/gtest.h" using namespace llvm; using namespace llvm::orc; using namespace llvm::jitlink; void lookupResolveEverythingToNull( const llvm::jitlink::JITLinkContext::LookupMap &Symbols, std::unique_ptr LC) { llvm::orc::ExecutorAddr Null; llvm::jitlink::AsyncLookupResult Result; for (auto &KV : Symbols) Result[KV.first] = {Null, llvm::JITSymbolFlags::Exported}; LC->run(std::move(Result)); } void lookupErrorOut( const llvm::jitlink::JITLinkContext::LookupMap &Symbols, std::unique_ptr LC) { LC->run(llvm::make_error("Lookup failed", llvm::inconvertibleErrorCode())); } std::unique_ptr makeMockContext( llvm::unique_function HandleFailed, llvm::unique_function SetupMemMgr, llvm::unique_function SetupContext) { auto MemMgr = std::make_unique(); SetupMemMgr(*MemMgr); auto Ctx = std::make_unique(std::move(MemMgr), std::move(HandleFailed)); SetupContext(*Ctx); return Ctx; } void defaultMemMgrSetup(MockJITLinkMemoryManager &) {} void defaultCtxSetup(MockJITLinkContext &) {} TEST(JITLinkMocks, SmokeTest) { // Check that the testing infrastructure defaults can "link" a graph // successfully. auto G = std::make_unique("foo", Triple("x86_64-apple-darwin"), 8, llvm::endianness::little, getGenericEdgeKindName); ArrayRef Content = "hello, world!"; auto &Sec = G->createSection("__data", orc::MemProt::Read | orc::MemProt::Write); orc::ExecutorAddr B1Addr(0x1000); auto &B = G->createContentBlock(Sec, Content, B1Addr, 8, 0); G->addDefinedSymbol(B, 4, "S", 4, Linkage::Strong, Scope::Default, false, false); Error Err = Error::success(); auto Ctx = makeMockContext(JoinErrorsInto(Err), defaultMemMgrSetup, defaultCtxSetup); link_MachO_x86_64(std::move(G), std::move(Ctx)); EXPECT_THAT_ERROR(std::move(Err), Succeeded()); }