[llvm] 4eaff6c - [JITLink] Use target triple for LinkGraph pointer size and endianness.
Lang Hames via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 13 23:11:35 PST 2025
Author: Lang Hames
Date: 2025-01-14T18:11:19+11:00
New Revision: 4eaff6c58ae2f130ac8d63cf2c87bbb483114876
URL: https://github.com/llvm/llvm-project/commit/4eaff6c58ae2f130ac8d63cf2c87bbb483114876
DIFF: https://github.com/llvm/llvm-project/commit/4eaff6c58ae2f130ac8d63cf2c87bbb483114876.diff
LOG: [JITLink] Use target triple for LinkGraph pointer size and endianness.
Removes LinkGraph's PointerSize and Endianness members and uses the triple to
find these values instead.
Also removes some redundant Triple copies.
Added:
Modified:
llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
llvm/include/llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h
llvm/lib/ExecutionEngine/JITLink/COFFLinkGraphBuilder.cpp
llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h
llvm/lib/ExecutionEngine/JITLink/JITLink.cpp
llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp
llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp
llvm/lib/ExecutionEngine/Orc/COFFPlatform.cpp
llvm/lib/ExecutionEngine/Orc/DebugObjectManagerPlugin.cpp
llvm/lib/ExecutionEngine/Orc/ELFNixPlatform.cpp
llvm/lib/ExecutionEngine/Orc/EPCIndirectionUtils.cpp
llvm/lib/ExecutionEngine/Orc/ExecutionUtils.cpp
llvm/lib/ExecutionEngine/Orc/JITLinkRedirectableSymbolManager.cpp
llvm/lib/ExecutionEngine/Orc/JITLinkReentryTrampolines.cpp
llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp
llvm/lib/ExecutionEngine/Orc/SectCreate.cpp
llvm/unittests/ExecutionEngine/JITLink/AArch32ErrorTests.cpp
llvm/unittests/ExecutionEngine/JITLink/JITLinkTestUtils.cpp
llvm/unittests/ExecutionEngine/JITLink/LinkGraphTests.cpp
llvm/unittests/ExecutionEngine/JITLink/MachOLinkGraphTests.cpp
llvm/unittests/ExecutionEngine/JITLink/MemoryManagerErrorTests.cpp
llvm/unittests/ExecutionEngine/JITLink/StubsTests.cpp
llvm/unittests/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManagerTest.cpp
llvm/unittests/ExecutionEngine/Orc/MapperJITLinkMemoryManagerTest.cpp
llvm/unittests/ExecutionEngine/Orc/ObjectLinkingLayerTest.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h b/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
index 4ff8d92d8de93a..2af91196701413 100644
--- a/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
+++ b/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
@@ -1007,26 +1007,12 @@ class LinkGraph {
using GetEdgeKindNameFunction = const char *(*)(Edge::Kind);
LinkGraph(std::string Name, std::shared_ptr<orc::SymbolStringPool> SSP,
- const Triple &TT, SubtargetFeatures Features, unsigned PointerSize,
- llvm::endianness Endianness,
+ Triple TT, SubtargetFeatures Features,
GetEdgeKindNameFunction GetEdgeKindName)
- : Name(std::move(Name)), SSP(std::move(SSP)), TT(TT),
- Features(std::move(Features)), PointerSize(PointerSize),
- Endianness(Endianness), GetEdgeKindName(std::move(GetEdgeKindName)) {}
-
- LinkGraph(std::string Name, std::shared_ptr<orc::SymbolStringPool> SSP,
- const Triple &TT, unsigned PointerSize, llvm::endianness Endianness,
- GetEdgeKindNameFunction GetEdgeKindName)
- : LinkGraph(std::move(Name), std::move(SSP), TT, SubtargetFeatures(),
- PointerSize, Endianness, GetEdgeKindName) {}
-
- LinkGraph(std::string Name, std::shared_ptr<orc::SymbolStringPool> SSP,
- const Triple &TT, GetEdgeKindNameFunction GetEdgeKindName)
- : LinkGraph(std::move(Name), std::move(SSP), TT, SubtargetFeatures(),
- Triple::getArchPointerBitWidth(TT.getArch()) / 8,
- TT.isLittleEndian() ? endianness::little : endianness::big,
- GetEdgeKindName) {
- assert(!(Triple::getArchPointerBitWidth(TT.getArch()) % 8) &&
+ : Name(std::move(Name)), SSP(std::move(SSP)), TT(std::move(TT)),
+ Features(std::move(Features)),
+ GetEdgeKindName(std::move(GetEdgeKindName)) {
+ assert(!(Triple::getArchPointerBitWidth(this->TT.getArch()) % 8) &&
"Arch bitwidth is not a multiple of 8");
}
@@ -1047,10 +1033,12 @@ class LinkGraph {
const SubtargetFeatures &getFeatures() const { return Features; }
/// Returns the pointer size for use in this graph.
- unsigned getPointerSize() const { return PointerSize; }
+ unsigned getPointerSize() const { return TT.getArchPointerBitWidth() / 8; }
/// Returns the endianness of content in this graph.
- llvm::endianness getEndianness() const { return Endianness; }
+ llvm::endianness getEndianness() const {
+ return TT.isLittleEndian() ? endianness::little : endianness::big;
+ }
const char *getEdgeKindName(Edge::Kind K) const { return GetEdgeKindName(K); }
@@ -1640,8 +1628,6 @@ class LinkGraph {
std::shared_ptr<orc::SymbolStringPool> SSP;
Triple TT;
SubtargetFeatures Features;
- unsigned PointerSize;
- llvm::endianness Endianness;
GetEdgeKindNameFunction GetEdgeKindName = nullptr;
DenseMap<StringRef, std::unique_ptr<Section>> Sections;
// FIXME(jared): these should become dense maps
@@ -2039,8 +2025,7 @@ createLinkGraphFromObject(MemoryBufferRef ObjectBuffer,
/// Create a \c LinkGraph defining the given absolute symbols.
std::unique_ptr<LinkGraph>
-absoluteSymbolsLinkGraph(const Triple &TT,
- std::shared_ptr<orc::SymbolStringPool> SSP,
+absoluteSymbolsLinkGraph(Triple TT, std::shared_ptr<orc::SymbolStringPool> SSP,
orc::SymbolMap Symbols);
/// Link the given graph.
diff --git a/llvm/include/llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h b/llvm/include/llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h
index 1f8bab24c48275..c88469ba8a2c31 100644
--- a/llvm/include/llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h
+++ b/llvm/include/llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h
@@ -25,6 +25,7 @@
#include "llvm/Support/MSVCErrorWorkarounds.h"
#include "llvm/Support/Memory.h"
#include "llvm/Support/RecyclingAllocator.h"
+#include "llvm/TargetParser/Triple.h"
#include <cassert>
#include <cstdint>
@@ -322,14 +323,14 @@ class SimpleSegmentAlloc {
JITLinkMemoryManager::InFlightAlloc::OnFinalizedFunction;
static void Create(JITLinkMemoryManager &MemMgr,
- std::shared_ptr<orc::SymbolStringPool> SSP,
+ std::shared_ptr<orc::SymbolStringPool> SSP, Triple TT,
const JITLinkDylib *JD, SegmentMap Segments,
OnCreatedFunction OnCreated);
static Expected<SimpleSegmentAlloc>
Create(JITLinkMemoryManager &MemMgr,
- std::shared_ptr<orc::SymbolStringPool> SSP, const JITLinkDylib *JD,
- SegmentMap Segments);
+ std::shared_ptr<orc::SymbolStringPool> SSP, Triple TT,
+ const JITLinkDylib *JD, SegmentMap Segments);
SimpleSegmentAlloc(SimpleSegmentAlloc &&);
SimpleSegmentAlloc &operator=(SimpleSegmentAlloc &&);
diff --git a/llvm/lib/ExecutionEngine/JITLink/COFFLinkGraphBuilder.cpp b/llvm/lib/ExecutionEngine/JITLink/COFFLinkGraphBuilder.cpp
index 5d43f7b03bc2a5..d3315aad126cbc 100644
--- a/llvm/lib/ExecutionEngine/JITLink/COFFLinkGraphBuilder.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/COFFLinkGraphBuilder.cpp
@@ -32,9 +32,8 @@ COFFLinkGraphBuilder::COFFLinkGraphBuilder(
LinkGraph::GetEdgeKindNameFunction GetEdgeKindName)
: Obj(Obj),
G(std::make_unique<LinkGraph>(Obj.getFileName().str(), std::move(SSP),
- createTripleWithCOFFFormat(TT),
- std::move(Features), getPointerSize(Obj),
- getEndianness(Obj),
+ createTripleWithCOFFFormat(std::move(TT)),
+ std::move(Features),
std::move(GetEdgeKindName))) {
LLVM_DEBUG({
dbgs() << "Created COFFLinkGraphBuilder for \"" << Obj.getFileName()
@@ -44,17 +43,6 @@ COFFLinkGraphBuilder::COFFLinkGraphBuilder(
COFFLinkGraphBuilder::~COFFLinkGraphBuilder() = default;
-unsigned
-COFFLinkGraphBuilder::getPointerSize(const object::COFFObjectFile &Obj) {
- return Obj.getBytesInAddress();
-}
-
-llvm::endianness
-COFFLinkGraphBuilder::getEndianness(const object::COFFObjectFile &Obj) {
- return Obj.isLittleEndian() ? llvm::endianness::little
- : llvm::endianness::big;
-}
-
uint64_t COFFLinkGraphBuilder::getSectionSize(const object::COFFObjectFile &Obj,
const object::coff_section *Sec) {
// Consider the
diff erence between executable form and object form.
diff --git a/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h b/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h
index fbe40fe5f75716..8dd176cd07f92e 100644
--- a/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h
+++ b/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h
@@ -194,9 +194,8 @@ ELFLinkGraphBuilder<ELFT>::ELFLinkGraphBuilder(
SubtargetFeatures Features, StringRef FileName,
LinkGraph::GetEdgeKindNameFunction GetEdgeKindName)
: ELFLinkGraphBuilderBase(std::make_unique<LinkGraph>(
- FileName.str(), std::move(SSP), Triple(std::move(TT)),
- std::move(Features), ELFT::Is64Bits ? 8 : 4,
- llvm::endianness(ELFT::Endianness), std::move(GetEdgeKindName))),
+ FileName.str(), std::move(SSP), std::move(TT), std::move(Features),
+ std::move(GetEdgeKindName))),
Obj(Obj) {
LLVM_DEBUG(
{ dbgs() << "Created ELFLinkGraphBuilder for \"" << FileName << "\""; });
diff --git a/llvm/lib/ExecutionEngine/JITLink/JITLink.cpp b/llvm/lib/ExecutionEngine/JITLink/JITLink.cpp
index 5edfbdb05f7b34..6b77330bb764b3 100644
--- a/llvm/lib/ExecutionEngine/JITLink/JITLink.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/JITLink.cpp
@@ -507,32 +507,13 @@ createLinkGraphFromObject(MemoryBufferRef ObjectBuffer,
}
std::unique_ptr<LinkGraph>
-absoluteSymbolsLinkGraph(const Triple &TT,
- std::shared_ptr<orc::SymbolStringPool> SSP,
+absoluteSymbolsLinkGraph(Triple TT, std::shared_ptr<orc::SymbolStringPool> SSP,
orc::SymbolMap Symbols) {
- unsigned PointerSize;
- endianness Endianness =
- TT.isLittleEndian() ? endianness::little : endianness::big;
- switch (TT.getArch()) {
- case Triple::aarch64:
- case llvm::Triple::riscv64:
- case Triple::x86_64:
- PointerSize = 8;
- break;
- case llvm::Triple::arm:
- case llvm::Triple::riscv32:
- case llvm::Triple::x86:
- PointerSize = 4;
- break;
- default:
- llvm::report_fatal_error("unhandled target architecture");
- }
-
static std::atomic<uint64_t> Counter = {0};
auto Index = Counter.fetch_add(1, std::memory_order_relaxed);
auto G = std::make_unique<LinkGraph>(
- "<Absolute Symbols " + std::to_string(Index) + ">", std::move(SSP), TT,
- PointerSize, Endianness, /*GetEdgeKindName=*/nullptr);
+ "<Absolute Symbols " + std::to_string(Index) + ">", std::move(SSP),
+ std::move(TT), SubtargetFeatures(), getGenericEdgeKindName);
for (auto &[Name, Def] : Symbols) {
auto &Sym =
G->addAbsoluteSymbol(*Name, Def.getAddress(), /*Size=*/0,
diff --git a/llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp b/llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp
index 2e3323af98e94f..6c7e27e429849f 100644
--- a/llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp
@@ -145,7 +145,8 @@ orc::shared::AllocActions &BasicLayout::graphAllocActions() {
void SimpleSegmentAlloc::Create(JITLinkMemoryManager &MemMgr,
std::shared_ptr<orc::SymbolStringPool> SSP,
- const JITLinkDylib *JD, SegmentMap Segments,
+ Triple TT, const JITLinkDylib *JD,
+ SegmentMap Segments,
OnCreatedFunction OnCreated) {
static_assert(orc::AllocGroup::NumGroups == 32,
@@ -156,8 +157,9 @@ void SimpleSegmentAlloc::Create(JITLinkMemoryManager &MemMgr,
"__---.finalize", "__R--.finalize", "__-W-.finalize", "__RW-.finalize",
"__--X.finalize", "__R-X.finalize", "__-WX.finalize", "__RWX.finalize"};
- auto G = std::make_unique<LinkGraph>("", std::move(SSP), Triple(), 0,
- llvm::endianness::native, nullptr);
+ auto G =
+ std::make_unique<LinkGraph>("", std::move(SSP), std::move(TT),
+ SubtargetFeatures(), getGenericEdgeKindName);
orc::AllocGroupSmallMap<Block *> ContentBlocks;
orc::ExecutorAddr NextAddr(0x100000);
@@ -201,13 +203,12 @@ void SimpleSegmentAlloc::Create(JITLinkMemoryManager &MemMgr,
});
}
-Expected<SimpleSegmentAlloc>
-SimpleSegmentAlloc::Create(JITLinkMemoryManager &MemMgr,
- std::shared_ptr<orc::SymbolStringPool> SSP,
- const JITLinkDylib *JD, SegmentMap Segments) {
+Expected<SimpleSegmentAlloc> SimpleSegmentAlloc::Create(
+ JITLinkMemoryManager &MemMgr, std::shared_ptr<orc::SymbolStringPool> SSP,
+ Triple TT, const JITLinkDylib *JD, SegmentMap Segments) {
std::promise<MSVCPExpected<SimpleSegmentAlloc>> AllocP;
auto AllocF = AllocP.get_future();
- Create(MemMgr, std::move(SSP), JD, std::move(Segments),
+ Create(MemMgr, std::move(SSP), std::move(TT), JD, std::move(Segments),
[&](Expected<SimpleSegmentAlloc> Result) {
AllocP.set_value(std::move(Result));
});
diff --git a/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp b/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp
index 0e7ecf6cc1383a..3e757f780b550e 100644
--- a/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp
@@ -53,10 +53,10 @@ MachOLinkGraphBuilder::MachOLinkGraphBuilder(
std::shared_ptr<orc::SymbolStringPool> SSP, Triple TT,
SubtargetFeatures Features,
LinkGraph::GetEdgeKindNameFunction GetEdgeKindName)
- : Obj(Obj), G(std::make_unique<LinkGraph>(
- std::string(Obj.getFileName()), std::move(SSP),
- std::move(TT), std::move(Features), getPointerSize(Obj),
- getEndianness(Obj), std::move(GetEdgeKindName))) {
+ : Obj(Obj),
+ G(std::make_unique<LinkGraph>(
+ std::string(Obj.getFileName()), std::move(SSP), std::move(TT),
+ std::move(Features), std::move(GetEdgeKindName))) {
auto &MachHeader = Obj.getHeader64();
SubsectionsViaSymbols = MachHeader.flags & MachO::MH_SUBSECTIONS_VIA_SYMBOLS;
}
@@ -104,17 +104,6 @@ bool MachOLinkGraphBuilder::isZeroFillSection(const NormalizedSection &NSec) {
}
}
-unsigned
-MachOLinkGraphBuilder::getPointerSize(const object::MachOObjectFile &Obj) {
- return Obj.is64Bit() ? 8 : 4;
-}
-
-llvm::endianness
-MachOLinkGraphBuilder::getEndianness(const object::MachOObjectFile &Obj) {
- return Obj.isLittleEndian() ? llvm::endianness::little
- : llvm::endianness::big;
-}
-
Section &MachOLinkGraphBuilder::getCommonSection() {
if (!CommonSection)
CommonSection = &G->createSection(CommonSectionName,
diff --git a/llvm/lib/ExecutionEngine/Orc/COFFPlatform.cpp b/llvm/lib/ExecutionEngine/Orc/COFFPlatform.cpp
index a435997478151a..17f4c3c7411418 100644
--- a/llvm/lib/ExecutionEngine/Orc/COFFPlatform.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/COFFPlatform.cpp
@@ -54,22 +54,10 @@ class COFFHeaderMaterializationUnit : public MaterializationUnit {
StringRef getName() const override { return "COFFHeaderMU"; }
void materialize(std::unique_ptr<MaterializationResponsibility> R) override {
- unsigned PointerSize;
- llvm::endianness Endianness;
- const auto &TT = CP.getExecutionSession().getTargetTriple();
-
- switch (TT.getArch()) {
- case Triple::x86_64:
- PointerSize = 8;
- Endianness = llvm::endianness::little;
- break;
- default:
- llvm_unreachable("Unrecognized architecture");
- }
-
auto G = std::make_unique<jitlink::LinkGraph>(
- "<COFFHeaderMU>", CP.getExecutionSession().getSymbolStringPool(), TT,
- PointerSize, Endianness, jitlink::getGenericEdgeKindName);
+ "<COFFHeaderMU>", CP.getExecutionSession().getSymbolStringPool(),
+ CP.getExecutionSession().getTargetTriple(), SubtargetFeatures(),
+ jitlink::getGenericEdgeKindName);
auto &HeaderSection = G->createSection("__header", MemProt::Read);
auto &HeaderBlock = createHeaderBlock(*G, HeaderSection);
diff --git a/llvm/lib/ExecutionEngine/Orc/DebugObjectManagerPlugin.cpp b/llvm/lib/ExecutionEngine/Orc/DebugObjectManagerPlugin.cpp
index 180905346d5610..80b7452a0b2266 100644
--- a/llvm/lib/ExecutionEngine/Orc/DebugObjectManagerPlugin.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/DebugObjectManagerPlugin.cpp
@@ -331,9 +331,9 @@ Expected<SimpleSegmentAlloc> ELFDebugObject::finalizeWorkingMemory() {
size_t Size = Buffer->getBufferSize();
// Allocate working memory for debug object in read-only segment.
- auto Alloc =
- SimpleSegmentAlloc::Create(MemMgr, ES.getSymbolStringPool(), JD,
- {{MemProt::Read, {Size, Align(PageSize)}}});
+ auto Alloc = SimpleSegmentAlloc::Create(
+ MemMgr, ES.getSymbolStringPool(), ES.getTargetTriple(), JD,
+ {{MemProt::Read, {Size, Align(PageSize)}}});
if (!Alloc)
return Alloc;
diff --git a/llvm/lib/ExecutionEngine/Orc/ELFNixPlatform.cpp b/llvm/lib/ExecutionEngine/Orc/ELFNixPlatform.cpp
index 5f017d9979c3c3..8aa517a27d9972 100644
--- a/llvm/lib/ExecutionEngine/Orc/ELFNixPlatform.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/ELFNixPlatform.cpp
@@ -40,34 +40,10 @@ getArgDataBufferType(const ArgTs &...Args) {
std::unique_ptr<jitlink::LinkGraph> createPlatformGraph(ELFNixPlatform &MOP,
std::string Name) {
- unsigned PointerSize;
- llvm::endianness Endianness;
- const auto &TT = MOP.getExecutionSession().getTargetTriple();
-
- switch (TT.getArch()) {
- case Triple::x86_64:
- PointerSize = 8;
- Endianness = llvm::endianness::little;
- break;
- case Triple::aarch64:
- PointerSize = 8;
- Endianness = llvm::endianness::little;
- break;
- case Triple::ppc64:
- PointerSize = 8;
- Endianness = llvm::endianness::big;
- break;
- case Triple::ppc64le:
- PointerSize = 8;
- Endianness = llvm::endianness::little;
- break;
- default:
- llvm_unreachable("Unrecognized architecture");
- }
-
+ auto &ES = MOP.getExecutionSession();
return std::make_unique<jitlink::LinkGraph>(
- std::move(Name), MOP.getExecutionSession().getSymbolStringPool(), TT,
- PointerSize, Endianness, jitlink::getGenericEdgeKindName);
+ std::move(Name), ES.getSymbolStringPool(), ES.getTargetTriple(),
+ SubtargetFeatures(), jitlink::getGenericEdgeKindName);
}
// Creates a Bootstrap-Complete LinkGraph to run deferred actions.
@@ -156,30 +132,22 @@ class DSOHandleMaterializationUnit : public MaterializationUnit {
StringRef getName() const override { return "DSOHandleMU"; }
void materialize(std::unique_ptr<MaterializationResponsibility> R) override {
- unsigned PointerSize;
- llvm::endianness Endianness;
+
+ auto &ES = ENP.getExecutionSession();
+
jitlink::Edge::Kind EdgeKind;
- const auto &TT = ENP.getExecutionSession().getTargetTriple();
- switch (TT.getArch()) {
+ switch (ES.getTargetTriple().getArch()) {
case Triple::x86_64:
- PointerSize = 8;
- Endianness = llvm::endianness::little;
EdgeKind = jitlink::x86_64::Pointer64;
break;
case Triple::aarch64:
- PointerSize = 8;
- Endianness = llvm::endianness::little;
EdgeKind = jitlink::aarch64::Pointer64;
break;
case Triple::ppc64:
- PointerSize = 8;
- Endianness = llvm::endianness::big;
EdgeKind = jitlink::ppc64::Pointer64;
break;
case Triple::ppc64le:
- PointerSize = 8;
- Endianness = llvm::endianness::little;
EdgeKind = jitlink::ppc64::Pointer64;
break;
default:
@@ -188,13 +156,13 @@ class DSOHandleMaterializationUnit : public MaterializationUnit {
// void *__dso_handle = &__dso_handle;
auto G = std::make_unique<jitlink::LinkGraph>(
- "<DSOHandleMU>", ENP.getExecutionSession().getSymbolStringPool(), TT,
- PointerSize, Endianness, jitlink::getGenericEdgeKindName);
+ "<DSOHandleMU>", ES.getSymbolStringPool(), ES.getTargetTriple(),
+ SubtargetFeatures(), jitlink::getGenericEdgeKindName);
auto &DSOHandleSection =
G->createSection(".data.__dso_handle", MemProt::Read);
auto &DSOHandleBlock = G->createContentBlock(
- DSOHandleSection, getDSOHandleContent(PointerSize), orc::ExecutorAddr(),
- 8, 0);
+ DSOHandleSection, getDSOHandleContent(G->getPointerSize()),
+ orc::ExecutorAddr(), 8, 0);
auto &DSOHandleSymbol = G->addDefinedSymbol(
DSOHandleBlock, 0, *R->getInitializerSymbol(), DSOHandleBlock.getSize(),
jitlink::Linkage::Strong, jitlink::Scope::Default, false, true);
diff --git a/llvm/lib/ExecutionEngine/Orc/EPCIndirectionUtils.cpp b/llvm/lib/ExecutionEngine/Orc/EPCIndirectionUtils.cpp
index a44da22cb35122..8e4937d4056207 100644
--- a/llvm/lib/ExecutionEngine/Orc/EPCIndirectionUtils.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/EPCIndirectionUtils.cpp
@@ -110,8 +110,8 @@ Error EPCTrampolinePool::grow() {
auto &EPC = EPCIU.getExecutorProcessControl();
auto PageSize = EPC.getPageSize();
auto Alloc = SimpleSegmentAlloc::Create(
- EPC.getMemMgr(), EPC.getSymbolStringPool(), nullptr,
- {{MemProt::Read | MemProt::Exec, {PageSize, Align(PageSize)}}});
+ EPC.getMemMgr(), EPC.getSymbolStringPool(), EPC.getTargetTriple(),
+ nullptr, {{MemProt::Read | MemProt::Exec, {PageSize, Align(PageSize)}}});
if (!Alloc)
return Alloc.takeError();
@@ -294,10 +294,11 @@ EPCIndirectionUtils::writeResolverBlock(ExecutorAddr ReentryFnAddr,
assert(ABI && "ABI can not be null");
auto ResolverSize = ABI->getResolverCodeSize();
- auto Alloc = SimpleSegmentAlloc::Create(
- EPC.getMemMgr(), EPC.getSymbolStringPool(), nullptr,
- {{MemProt::Read | MemProt::Exec,
- {ResolverSize, Align(EPC.getPageSize())}}});
+ auto Alloc =
+ SimpleSegmentAlloc::Create(EPC.getMemMgr(), EPC.getSymbolStringPool(),
+ EPC.getTargetTriple(), nullptr,
+ {{MemProt::Read | MemProt::Exec,
+ {ResolverSize, Align(EPC.getPageSize())}}});
if (!Alloc)
return Alloc.takeError();
@@ -363,7 +364,8 @@ EPCIndirectionUtils::getIndirectStubs(unsigned NumStubs) {
auto PtrProt = MemProt::Read | MemProt::Write;
auto Alloc = SimpleSegmentAlloc::Create(
- EPC.getMemMgr(), EPC.getSymbolStringPool(), nullptr,
+ EPC.getMemMgr(), EPC.getSymbolStringPool(), EPC.getTargetTriple(),
+ nullptr,
{{StubProt, {static_cast<size_t>(StubBytes), Align(PageSize)}},
{PtrProt, {static_cast<size_t>(PtrBytes), Align(PageSize)}}});
diff --git a/llvm/lib/ExecutionEngine/Orc/ExecutionUtils.cpp b/llvm/lib/ExecutionEngine/Orc/ExecutionUtils.cpp
index 58cd05cd88ba1c..89a7a4e86f1bfe 100644
--- a/llvm/lib/ExecutionEngine/Orc/ExecutionUtils.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/ExecutionUtils.cpp
@@ -525,49 +525,17 @@ Error DLLImportDefinitionGenerator::tryToGenerate(
return L.add(JD, std::move(*G));
}
-Expected<unsigned>
-DLLImportDefinitionGenerator::getTargetPointerSize(const Triple &TT) {
- switch (TT.getArch()) {
- case Triple::x86_64:
- return 8;
- default:
- return make_error<StringError>(
- "architecture unsupported by DLLImportDefinitionGenerator",
- inconvertibleErrorCode());
- }
-}
-
-Expected<llvm::endianness>
-DLLImportDefinitionGenerator::getEndianness(const Triple &TT) {
- switch (TT.getArch()) {
- case Triple::x86_64:
- return llvm::endianness::little;
- default:
- return make_error<StringError>(
- "architecture unsupported by DLLImportDefinitionGenerator",
- inconvertibleErrorCode());
- }
-}
-
Expected<std::unique_ptr<jitlink::LinkGraph>>
DLLImportDefinitionGenerator::createStubsGraph(const SymbolMap &Resolved) {
- Triple TT = ES.getTargetTriple();
- auto PointerSize = getTargetPointerSize(TT);
- if (!PointerSize)
- return PointerSize.takeError();
- auto Endianness = getEndianness(TT);
- if (!Endianness)
- return Endianness.takeError();
-
auto G = std::make_unique<jitlink::LinkGraph>(
- "<DLLIMPORT_STUBS>", ES.getSymbolStringPool(), TT, *PointerSize,
- *Endianness, jitlink::getGenericEdgeKindName);
+ "<DLLIMPORT_STUBS>", ES.getSymbolStringPool(), ES.getTargetTriple(),
+ SubtargetFeatures(), jitlink::getGenericEdgeKindName);
jitlink::Section &Sec =
G->createSection(getSectionName(), MemProt::Read | MemProt::Exec);
for (auto &KV : Resolved) {
jitlink::Symbol &Target = G->addAbsoluteSymbol(
- *KV.first, KV.second.getAddress(), *PointerSize,
+ *KV.first, KV.second.getAddress(), G->getPointerSize(),
jitlink::Linkage::Strong, jitlink::Scope::Local, false);
// Create __imp_ symbol
diff --git a/llvm/lib/ExecutionEngine/Orc/JITLinkRedirectableSymbolManager.cpp b/llvm/lib/ExecutionEngine/Orc/JITLinkRedirectableSymbolManager.cpp
index 8dd479a64f1b5e..06c545d62d76ab 100644
--- a/llvm/lib/ExecutionEngine/Orc/JITLinkRedirectableSymbolManager.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/JITLinkRedirectableSymbolManager.cpp
@@ -24,12 +24,9 @@ void JITLinkRedirectableSymbolManager::emitRedirectableSymbols(
std::unique_ptr<MaterializationResponsibility> R, SymbolMap InitialDests) {
auto &ES = ObjLinkingLayer.getExecutionSession();
- Triple TT = ES.getTargetTriple();
-
auto G = std::make_unique<jitlink::LinkGraph>(
("<indirect stubs graph #" + Twine(++StubGraphIdx) + ">").str(),
- ES.getSymbolStringPool(), TT, TT.isArch64Bit() ? 8 : 4,
- TT.isLittleEndian() ? endianness::little : endianness::big,
+ ES.getSymbolStringPool(), ES.getTargetTriple(), SubtargetFeatures(),
jitlink::getGenericEdgeKindName);
auto &PointerSection =
G->createSection(StubPtrSectionName, MemProt::Write | MemProt::Read);
diff --git a/llvm/lib/ExecutionEngine/Orc/JITLinkReentryTrampolines.cpp b/llvm/lib/ExecutionEngine/Orc/JITLinkReentryTrampolines.cpp
index d9f859654d41e9..d305342e6fed82 100644
--- a/llvm/lib/ExecutionEngine/Orc/JITLinkReentryTrampolines.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/JITLinkReentryTrampolines.cpp
@@ -123,16 +123,13 @@ void JITLinkReentryTrampolines::emit(ResourceTrackerSP RT,
JITDylibSP JD(&RT->getJITDylib());
auto &ES = ObjLinkingLayer.getExecutionSession();
- Triple TT = ES.getTargetTriple();
auto ReentryGraphSym =
ES.intern(("__orc_reentry_graph_#" + Twine(++ReentryGraphIdx)).str());
auto G = std::make_unique<jitlink::LinkGraph>(
- (*ReentryGraphSym).str(), ES.getSymbolStringPool(), TT,
- TT.isArch64Bit() ? 8 : 4,
- TT.isLittleEndian() ? endianness::little : endianness::big,
- jitlink::getGenericEdgeKindName);
+ (*ReentryGraphSym).str(), ES.getSymbolStringPool(), ES.getTargetTriple(),
+ SubtargetFeatures(), jitlink::getGenericEdgeKindName);
auto &ReentryFnSym = G->addExternalSymbol(ReentryFnName, 0, false);
diff --git a/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp b/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp
index 0013eddb1f2c9e..e0d40cf2de5aa5 100644
--- a/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp
@@ -94,23 +94,10 @@ using SPSRegisterSymbolsArgs =
std::unique_ptr<jitlink::LinkGraph> createPlatformGraph(MachOPlatform &MOP,
std::string Name) {
- unsigned PointerSize;
- llvm::endianness Endianness;
- const auto &TT = MOP.getExecutionSession().getTargetTriple();
-
- switch (TT.getArch()) {
- case Triple::aarch64:
- case Triple::x86_64:
- PointerSize = 8;
- Endianness = llvm::endianness::little;
- break;
- default:
- llvm_unreachable("Unrecognized architecture");
- }
-
+ auto &ES = MOP.getExecutionSession();
return std::make_unique<jitlink::LinkGraph>(
- std::move(Name), MOP.getExecutionSession().getSymbolStringPool(), TT,
- PointerSize, Endianness, jitlink::getGenericEdgeKindName);
+ std::move(Name), ES.getSymbolStringPool(), ES.getTargetTriple(),
+ SubtargetFeatures(), jitlink::getGenericEdgeKindName);
}
// Creates a Bootstrap-Complete LinkGraph to run deferred actions.
diff --git a/llvm/lib/ExecutionEngine/Orc/SectCreate.cpp b/llvm/lib/ExecutionEngine/Orc/SectCreate.cpp
index 4ed05ef3573f85..c50654cf47a2f1 100644
--- a/llvm/lib/ExecutionEngine/Orc/SectCreate.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/SectCreate.cpp
@@ -20,7 +20,7 @@ void SectCreateMaterializationUnit::materialize(
"orc_sectcreate_" + SectName,
ObjLinkingLayer.getExecutionSession().getSymbolStringPool(),
ObjLinkingLayer.getExecutionSession().getTargetTriple(),
- getGenericEdgeKindName);
+ SubtargetFeatures(), getGenericEdgeKindName);
auto &Sect = G->createSection(SectName, MP);
auto Content = G->allocateContent(
diff --git a/llvm/unittests/ExecutionEngine/JITLink/AArch32ErrorTests.cpp b/llvm/unittests/ExecutionEngine/JITLink/AArch32ErrorTests.cpp
index b646f88b6fbcff..6e9957f53a3577 100644
--- a/llvm/unittests/ExecutionEngine/JITLink/AArch32ErrorTests.cpp
+++ b/llvm/unittests/ExecutionEngine/JITLink/AArch32ErrorTests.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "llvm/ExecutionEngine/Orc/SymbolStringPool.h"
+#include "llvm/TargetParser/Triple.h"
#include "llvm/Testing/Support/Error.h"
#include "gtest/gtest.h"
#include <llvm/ExecutionEngine/JITLink/aarch32.h>
@@ -17,10 +18,9 @@ using namespace llvm::jitlink::aarch32;
using namespace llvm::support;
using namespace llvm::support::endian;
-constexpr unsigned PointerSize = 4;
auto G = std::make_unique<LinkGraph>(
"foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("armv7-linux-gnueabi"), PointerSize, endianness::little,
+ Triple("armv7-linux-gnueabi"), SubtargetFeatures(),
aarch32::getEdgeKindName);
auto &Sec =
G->createSection("__data", orc::MemProt::Read | orc::MemProt::Write);
@@ -49,7 +49,7 @@ class AArch32Errors : public testing::Test {
void SetUp() override {
G = std::make_unique<LinkGraph>(
"foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("armv7-linux-gnueabi"), PointerSize, endianness::little,
+ Triple("armv7-linux-gnueabi"), SubtargetFeatures(),
aarch32::getEdgeKindName);
S = &G->createSection("__data", orc::MemProt::Read | orc::MemProt::Write);
}
@@ -78,7 +78,7 @@ class AArch32Errors : public testing::Test {
Symbol &createSymbolWithDistance(Block &Origin, uint64_t Dist) {
uint64_t TargetAddr = Origin.getAddress().getValue() + Dist;
return G->addAnonymousSymbol(createBlock(Zeros, TargetAddr), 0 /*Offset*/,
- PointerSize, false, false);
+ G->getPointerSize(), false, false);
};
template <endianness Endian> void write(uint8_t *Mem, HalfWords Data) {
@@ -149,8 +149,8 @@ TEST_F(AArch32Errors, applyFixupDataGeneric) {
Block &TargetBlock = createBlock(Zeros, 0x2000);
constexpr uint64_t OffsetInTarget = 0;
- Symbol &TargetSymbol = G->addAnonymousSymbol(TargetBlock, OffsetInTarget,
- PointerSize, false, false);
+ Symbol &TargetSymbol = G->addAnonymousSymbol(
+ TargetBlock, OffsetInTarget, G->getPointerSize(), false, false);
constexpr uint64_t OffsetInOrigin = 0;
Edge::Kind Invalid = Edge::GenericEdgeKind::Invalid;
diff --git a/llvm/unittests/ExecutionEngine/JITLink/JITLinkTestUtils.cpp b/llvm/unittests/ExecutionEngine/JITLink/JITLinkTestUtils.cpp
index 24e540b97c0cfe..2d0801fb6ac678 100644
--- a/llvm/unittests/ExecutionEngine/JITLink/JITLinkTestUtils.cpp
+++ b/llvm/unittests/ExecutionEngine/JITLink/JITLinkTestUtils.cpp
@@ -94,7 +94,7 @@ TEST(JITLinkMocks, SmokeTest) {
// successfully.
auto G = std::make_unique<LinkGraph>(
"foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
ArrayRef<char> Content = "hello, world!";
diff --git a/llvm/unittests/ExecutionEngine/JITLink/LinkGraphTests.cpp b/llvm/unittests/ExecutionEngine/JITLink/LinkGraphTests.cpp
index 3b96019766c848..11a379c7e5024e 100644
--- a/llvm/unittests/ExecutionEngine/JITLink/LinkGraphTests.cpp
+++ b/llvm/unittests/ExecutionEngine/JITLink/LinkGraphTests.cpp
@@ -22,7 +22,7 @@ using namespace llvm::jitlink;
TEST(LinkGraphTest, Construction) {
// Check that LinkGraph construction works as expected.
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
EXPECT_EQ(G.getName(), "foo");
EXPECT_EQ(G.getTargetTriple().str(), "x86_64-apple-darwin");
@@ -37,7 +37,7 @@ TEST(LinkGraphTest, Construction) {
TEST(LinkGraphTest, AddressAccess) {
// Check that we can get addresses for blocks, symbols, and edges.
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
auto &Sec1 =
@@ -57,7 +57,7 @@ TEST(LinkGraphTest, AddressAccess) {
TEST(LinkGraphTest, SectionEmpty) {
// Check that Section::empty behaves as expected.
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
auto &Sec1 =
G.createSection("__data.1", orc::MemProt::Read | orc::MemProt::Write);
@@ -76,7 +76,7 @@ TEST(LinkGraphTest, SectionEmpty) {
TEST(LinkGraphTest, BlockAndSymbolIteration) {
// Check that we can iterate over blocks within Sections and across sections.
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
auto &Sec1 =
G.createSection("__data.1", orc::MemProt::Read | orc::MemProt::Write);
@@ -130,7 +130,7 @@ TEST(LinkGraphTest, BlockAndSymbolIteration) {
TEST(LinkGraphTest, ContentAccessAndUpdate) {
// Check that we can make a defined symbol external.
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
auto &Sec =
G.createSection("__data", orc::MemProt::Read | orc::MemProt::Write);
@@ -220,7 +220,7 @@ TEST(LinkGraphTest, ContentAccessAndUpdate) {
TEST(LinkGraphTest, MakeExternal) {
// Check that we can make defined and absolute symbols external.
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
auto &Sec =
G.createSection("__data", orc::MemProt::Read | orc::MemProt::Write);
@@ -291,7 +291,7 @@ TEST(LinkGraphTest, MakeExternal) {
TEST(LinkGraphTest, MakeAbsolute) {
// Check that we can make defined and external symbols absolute.
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
auto &Sec =
G.createSection("__data", orc::MemProt::Read | orc::MemProt::Write);
@@ -361,7 +361,7 @@ TEST(LinkGraphTest, MakeAbsolute) {
TEST(LinkGraphTest, MakeDefined) {
// Check that we can make an external symbol defined.
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
auto &Sec =
G.createSection("__data", orc::MemProt::Read | orc::MemProt::Write);
@@ -410,7 +410,7 @@ TEST(LinkGraphTest, MakeDefined) {
TEST(LinkGraphTest, TransferDefinedSymbol) {
// Check that we can transfer a defined symbol from one block to another.
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
auto &Sec =
G.createSection("__data", orc::MemProt::Read | orc::MemProt::Write);
@@ -446,7 +446,7 @@ TEST(LinkGraphTest, TransferDefinedSymbolAcrossSections) {
// Check that we can transfer a defined symbol from an existing block in one
// section to another.
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
auto &Sec1 =
G.createSection("__data.1", orc::MemProt::Read | orc::MemProt::Write);
@@ -481,7 +481,7 @@ TEST(LinkGraphTest, TransferBlock) {
// Check that we can transfer a block (and all associated symbols) from one
// section to another.
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
auto &Sec1 =
G.createSection("__data.1", orc::MemProt::Read | orc::MemProt::Write);
@@ -530,7 +530,7 @@ TEST(LinkGraphTest, MergeSections) {
// Check that we can transfer a block (and all associated symbols) from one
// section to another.
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
auto &Sec1 =
G.createSection("__data.1", orc::MemProt::Read | orc::MemProt::Write);
@@ -617,7 +617,7 @@ TEST(LinkGraphTest, MergeSections) {
TEST(LinkGraphTest, SplitBlock) {
// Check that the LinkGraph::splitBlock test works as expected.
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
auto &Sec =
G.createSection("__data", orc::MemProt::Read | orc::MemProt::Write);
@@ -730,7 +730,7 @@ TEST(LinkGraphTest, SplitBlock) {
TEST(LinkGraphTest, GraphAllocationMethods) {
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
// Test allocation of sized, uninitialized buffer.
@@ -752,7 +752,7 @@ TEST(LinkGraphTest, GraphAllocationMethods) {
TEST(LinkGraphTest, IsCStringBlockTest) {
// Check that the LinkGraph::splitBlock test works as expected.
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
auto &Sec =
G.createSection("__data", orc::MemProt::Read | orc::MemProt::Write);
@@ -777,7 +777,7 @@ TEST(LinkGraphTest, IsCStringBlockTest) {
TEST(LinkGraphTest, BasicLayoutHonorsNoAlloc) {
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
// Create a regular section and block.
diff --git a/llvm/unittests/ExecutionEngine/JITLink/MachOLinkGraphTests.cpp b/llvm/unittests/ExecutionEngine/JITLink/MachOLinkGraphTests.cpp
index b68310aaf3990c..213849c076cfe2 100644
--- a/llvm/unittests/ExecutionEngine/JITLink/MachOLinkGraphTests.cpp
+++ b/llvm/unittests/ExecutionEngine/JITLink/MachOLinkGraphTests.cpp
@@ -22,7 +22,7 @@ using namespace llvm::jitlink;
TEST(MachOLinkGraphTest, GetStandardSections) {
// Check that LinkGraph construction works as expected.
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("arm64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("arm64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
auto &Data = getMachODefaultRWDataSection(G);
diff --git a/llvm/unittests/ExecutionEngine/JITLink/MemoryManagerErrorTests.cpp b/llvm/unittests/ExecutionEngine/JITLink/MemoryManagerErrorTests.cpp
index d1284ffb2ecf2a..48a38aefe4e6de 100644
--- a/llvm/unittests/ExecutionEngine/JITLink/MemoryManagerErrorTests.cpp
+++ b/llvm/unittests/ExecutionEngine/JITLink/MemoryManagerErrorTests.cpp
@@ -20,7 +20,7 @@ TEST(MemoryManagerErrorTest, ErrorOnFirstAllocate) {
// Check that we can get addresses for blocks, symbols, and edges.
auto G = std::make_unique<LinkGraph>(
"foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
ArrayRef<char> Content = "hello, world!";
diff --git a/llvm/unittests/ExecutionEngine/JITLink/StubsTests.cpp b/llvm/unittests/ExecutionEngine/JITLink/StubsTests.cpp
index 8efbb54f59e848..8a53d0a560ba3a 100644
--- a/llvm/unittests/ExecutionEngine/JITLink/StubsTests.cpp
+++ b/llvm/unittests/ExecutionEngine/JITLink/StubsTests.cpp
@@ -58,7 +58,7 @@ TEST(StubsTest, StubsGeneration_x86_64) {
const char PointerJumpStubContent[6] = {
static_cast<char>(0xFFu), 0x25, 0x00, 0x00, 0x00, 0x00};
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("x86_64-apple-darwin"), 8, llvm::endianness::little,
+ Triple("x86_64-apple-darwin"), SubtargetFeatures(),
getGenericEdgeKindName);
auto [PointerSym, StubSym] = GenerateStub(G, 8U, x86_64::Pointer64);
@@ -79,7 +79,7 @@ TEST(StubsTest, StubsGeneration_aarch64) {
0x00, 0x02, 0x1f, (char)0xd6u // BR x16
};
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("aarch64-linux-gnu"), 8, llvm::endianness::little,
+ Triple("aarch64-linux-gnu"), SubtargetFeatures(),
getGenericEdgeKindName);
auto [PointerSym, StubSym] = GenerateStub(G, 8U, aarch64::Pointer64);
@@ -100,7 +100,7 @@ TEST(StubsTest, StubsGeneration_i386) {
const char PointerJumpStubContent[6] = {
static_cast<char>(0xFFu), 0x25, 0x00, 0x00, 0x00, 0x00};
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("i386-unknown-linux-gnu"), 8, llvm::endianness::little,
+ Triple("i386-unknown-linux-gnu"), SubtargetFeatures(),
getGenericEdgeKindName);
auto [PointerSym, StubSym] = GenerateStub(G, 4U, i386::Pointer32);
@@ -130,7 +130,7 @@ TEST(StubsTest, StubsGeneration_loongarch32) {
0x4c // jr $t8
};
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("loongarch32"), 4, llvm::endianness::little,
+ Triple("loongarch32"), SubtargetFeatures(),
getGenericEdgeKindName);
auto [PointerSym, StubSym] = GenerateStub(G, 4U, loongarch::Pointer32);
@@ -162,8 +162,9 @@ TEST(StubsTest, StubsGeneration_loongarch64) {
0x00,
0x4c // jr $t8
};
+
LinkGraph G("foo", std::make_shared<orc::SymbolStringPool>(),
- Triple("loongarch64"), 8, llvm::endianness::little,
+ Triple("loongarch64"), SubtargetFeatures(),
getGenericEdgeKindName);
auto [PointerSym, StubSym] = GenerateStub(G, 8U, loongarch::Pointer64);
diff --git a/llvm/unittests/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManagerTest.cpp b/llvm/unittests/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManagerTest.cpp
index 1b96b988068f22..93707bc52a5a94 100644
--- a/llvm/unittests/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManagerTest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManagerTest.cpp
@@ -116,7 +116,8 @@ TEST(EPCGenericJITLinkMemoryManagerTest, AllocFinalizeFree) {
auto MemMgr = std::make_unique<EPCGenericJITLinkMemoryManager>(*SelfEPC, SAs);
StringRef Hello = "hello";
auto SSA = jitlink::SimpleSegmentAlloc::Create(
- *MemMgr, std::make_shared<orc::SymbolStringPool>(), nullptr,
+ *MemMgr, std::make_shared<orc::SymbolStringPool>(),
+ Triple("x86_64-apple-darwin"), nullptr,
{{MemProt::Read, {Hello.size(), Align(1)}}});
EXPECT_THAT_EXPECTED(SSA, Succeeded());
auto SegInfo = SSA->getSegInfo(MemProt::Read);
diff --git a/llvm/unittests/ExecutionEngine/Orc/MapperJITLinkMemoryManagerTest.cpp b/llvm/unittests/ExecutionEngine/Orc/MapperJITLinkMemoryManagerTest.cpp
index 61dd1a4234d543..d6ce80821641c6 100644
--- a/llvm/unittests/ExecutionEngine/Orc/MapperJITLinkMemoryManagerTest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/MapperJITLinkMemoryManagerTest.cpp
@@ -76,7 +76,8 @@ TEST(MapperJITLinkMemoryManagerTest, InProcess) {
StringRef Hello = "hello";
auto SSA1 = jitlink::SimpleSegmentAlloc::Create(
- *MemMgr, std::make_shared<orc::SymbolStringPool>(), nullptr,
+ *MemMgr, std::make_shared<orc::SymbolStringPool>(),
+ Triple("x86_64-apple-darwin"), nullptr,
{{MemProt::Read, {Hello.size(), Align(1)}}});
EXPECT_THAT_EXPECTED(SSA1, Succeeded());
@@ -93,7 +94,8 @@ TEST(MapperJITLinkMemoryManagerTest, InProcess) {
EXPECT_EQ(Counter->InitCount, 1);
auto SSA2 = jitlink::SimpleSegmentAlloc::Create(
- *MemMgr, std::make_shared<orc::SymbolStringPool>(), nullptr,
+ *MemMgr, std::make_shared<orc::SymbolStringPool>(),
+ Triple("x86_64-apple-darwin"), nullptr,
{{MemProt::Read, {Hello.size(), Align(1)}}});
EXPECT_THAT_EXPECTED(SSA2, Succeeded());
@@ -140,7 +142,8 @@ TEST(MapperJITLinkMemoryManagerTest, Coalescing) {
auto SSP = std::make_shared<orc::SymbolStringPool>();
auto SSA1 = jitlink::SimpleSegmentAlloc::Create(
- *MemMgr, SSP, nullptr, {{MemProt::Read, {1024, Align(1)}}});
+ *MemMgr, SSP, Triple("x86_64-apple-darwin"), nullptr,
+ {{MemProt::Read, {1024, Align(1)}}});
EXPECT_THAT_EXPECTED(SSA1, Succeeded());
auto SegInfo1 = SSA1->getSegInfo(MemProt::Read);
ExecutorAddr TargetAddr1(SegInfo1.Addr);
@@ -148,7 +151,8 @@ TEST(MapperJITLinkMemoryManagerTest, Coalescing) {
EXPECT_THAT_EXPECTED(FA1, Succeeded());
auto SSA2 = jitlink::SimpleSegmentAlloc::Create(
- *MemMgr, SSP, nullptr, {{MemProt::Read, {1024, Align(1)}}});
+ *MemMgr, SSP, Triple("x86_64-apple-darwin"), nullptr,
+ {{MemProt::Read, {1024, Align(1)}}});
EXPECT_THAT_EXPECTED(SSA2, Succeeded());
auto FA2 = SSA2->finalize();
EXPECT_THAT_EXPECTED(FA2, Succeeded());
@@ -160,7 +164,8 @@ TEST(MapperJITLinkMemoryManagerTest, Coalescing) {
EXPECT_THAT_ERROR(std::move(Err3), Succeeded());
auto SSA3 = jitlink::SimpleSegmentAlloc::Create(
- *MemMgr, SSP, nullptr, {{MemProt::Read, {2048, Align(1)}}});
+ *MemMgr, SSP, Triple("x86_64-apple-darwin"), nullptr,
+ {{MemProt::Read, {2048, Align(1)}}});
EXPECT_THAT_EXPECTED(SSA3, Succeeded());
auto SegInfo3 = SSA3->getSegInfo(MemProt::Read);
diff --git a/llvm/unittests/ExecutionEngine/Orc/ObjectLinkingLayerTest.cpp b/llvm/unittests/ExecutionEngine/Orc/ObjectLinkingLayerTest.cpp
index 31a48e86539fdf..415ad0ee80577f 100644
--- a/llvm/unittests/ExecutionEngine/Orc/ObjectLinkingLayerTest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/ObjectLinkingLayerTest.cpp
@@ -46,8 +46,8 @@ class ObjectLinkingLayerTest : public testing::Test {
TEST_F(ObjectLinkingLayerTest, AddLinkGraph) {
auto G = std::make_unique<LinkGraph>(
- "foo", ES.getSymbolStringPool(), Triple("x86_64-apple-darwin"), 8,
- llvm::endianness::little, x86_64::getEdgeKindName);
+ "foo", ES.getSymbolStringPool(), Triple("x86_64-apple-darwin"),
+ SubtargetFeatures(), x86_64::getEdgeKindName);
auto &Sec1 = G->createSection("__data", MemProt::Read | MemProt::Write);
auto &B1 = G->createContentBlock(Sec1, BlockContent,
@@ -73,8 +73,8 @@ TEST_F(ObjectLinkingLayerTest, ResourceTracker) {
std::vector<ResourceTrackerSP> Trackers;
for (unsigned I = 0; I < 64; I++) {
auto G = std::make_unique<LinkGraph>(
- "foo", ES.getSymbolStringPool(), Triple("x86_64-apple-darwin"), 8,
- llvm::endianness::little, x86_64::getEdgeKindName);
+ "foo", ES.getSymbolStringPool(), Triple("x86_64-apple-darwin"),
+ SubtargetFeatures(), x86_64::getEdgeKindName);
auto &Sec1 = G->createSection("__data", MemProt::Read | MemProt::Write);
auto &B1 = G->createContentBlock(Sec1, BlockContent,
@@ -140,8 +140,8 @@ TEST_F(ObjectLinkingLayerTest, ClaimLateDefinedWeakSymbols) {
ObjLinkingLayer.addPlugin(std::make_unique<TestPlugin>());
auto G = std::make_unique<LinkGraph>(
- "foo", ES.getSymbolStringPool(), Triple("x86_64-apple-darwin"), 8,
- llvm::endianness::little, getGenericEdgeKindName);
+ "foo", ES.getSymbolStringPool(), Triple("x86_64-apple-darwin"),
+ SubtargetFeatures(), getGenericEdgeKindName);
auto &DataSec = G->createSection("__data", MemProt::Read | MemProt::Write);
auto &DataBlock = G->createContentBlock(DataSec, BlockContent,
@@ -193,8 +193,8 @@ TEST_F(ObjectLinkingLayerTest, HandleErrorDuringPostAllocationPass) {
ObjLinkingLayer.addPlugin(std::make_unique<TestPlugin>());
auto G = std::make_unique<LinkGraph>(
- "foo", ES.getSymbolStringPool(), Triple("x86_64-apple-darwin"), 8,
- llvm::endianness::little, getGenericEdgeKindName);
+ "foo", ES.getSymbolStringPool(), Triple("x86_64-apple-darwin"),
+ SubtargetFeatures(), getGenericEdgeKindName);
auto &DataSec = G->createSection("__data", MemProt::Read | MemProt::Write);
auto &DataBlock = G->createContentBlock(DataSec, BlockContent,
@@ -247,8 +247,8 @@ TEST_F(ObjectLinkingLayerTest, AddAndRemovePlugins) {
{
auto G1 = std::make_unique<LinkGraph>(
- "G1", ES.getSymbolStringPool(), Triple("x86_64-apple-darwin"), 8,
- llvm::endianness::little, x86_64::getEdgeKindName);
+ "G1", ES.getSymbolStringPool(), Triple("x86_64-apple-darwin"),
+ SubtargetFeatures(), x86_64::getEdgeKindName);
auto &DataSec = G1->createSection("__data", MemProt::Read | MemProt::Write);
auto &DataBlock = G1->createContentBlock(DataSec, BlockContent,
@@ -265,8 +265,8 @@ TEST_F(ObjectLinkingLayerTest, AddAndRemovePlugins) {
{
auto G2 = std::make_unique<LinkGraph>(
- "G2", ES.getSymbolStringPool(), Triple("x86_64-apple-darwin"), 8,
- llvm::endianness::little, x86_64::getEdgeKindName);
+ "G2", ES.getSymbolStringPool(), Triple("x86_64-apple-darwin"),
+ SubtargetFeatures(), x86_64::getEdgeKindName);
auto &DataSec = G2->createSection("__data", MemProt::Read | MemProt::Write);
auto &DataBlock = G2->createContentBlock(DataSec, BlockContent,
@@ -324,8 +324,9 @@ TEST(ObjectLinkingLayerSearchGeneratorTest, AbsoluteSymbolsObjectLayer) {
auto G = EPCDynamicLibrarySearchGenerator::GetForTargetProcess(
ES, {}, [&](JITDylib &JD, SymbolMap Syms) {
- auto G = absoluteSymbolsLinkGraph(
- ES.getTargetTriple(), ES.getSymbolStringPool(), std::move(Syms));
+ auto G =
+ absoluteSymbolsLinkGraph(Triple("x86_64-apple-darwin"),
+ ES.getSymbolStringPool(), std::move(Syms));
return ObjLinkingLayer.add(JD, std::move(G));
});
ASSERT_THAT_EXPECTED(G, Succeeded());
More information about the llvm-commits
mailing list