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).
48 lines
1.7 KiB
C++
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());
|
|
}
|