Files
clang-p2996/llvm/unittests/ExecutionEngine/JITLink/MemoryManagerErrorTests.cpp
Lang Hames 6128ff6630 [JITLink][MachO] Add convenience functions for default text/data sections.
The getMachODefaultTextSection and getMachODefaultRWDataSection functions
return the "__TEXT,__text" and "__DATA,__data" sections respectively, creating
empty sections if the default sections are not already present in the graph.
These functions can be used by utilities that want to add code or data to these
standard sections (e.g. these functions can be used to supply the section
argument to the createAnonymousPointerJumpStub and
createPointerJumpStubBlock functions in the various targets).
2024-10-28 18:05:40 -07:00

48 lines
1.7 KiB
C++

//===---- MemoryManagerErrorTests.cpp - Test memory manager error paths ---===//
//
// 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 "JITLinkTestUtils.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;
TEST(MemoryManagerErrorTest, ErrorOnFirstAllocate) {
// Check that we can get addresses for blocks, symbols, and edges.
auto G = std::make_unique<LinkGraph>("foo", Triple("x86_64-apple-darwin"), 8,
llvm::endianness::little,
getGenericEdgeKindName);
ArrayRef<char> 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),
[](MockJITLinkMemoryManager &MemMgr) {
MemMgr.Allocate = [](const JITLinkDylib *JD, LinkGraph &G) {
return make_error<StringError>("Failed to allocate",
inconvertibleErrorCode());
};
},
defaultCtxSetup);
link_MachO_x86_64(std::move(G), std::move(Ctx));
EXPECT_THAT_ERROR(std::move(Err), Failed());
}