[llvm] df78e6b - [JITLink] Don't return errors from pointer and jump stub creators.
Lang Hames via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 1 17:37:00 PDT 2024
Author: Lang Hames
Date: 2024-11-02T11:36:53+11:00
New Revision: df78e6b872ca9486544005d45e6aff174013db13
URL: https://github.com/llvm/llvm-project/commit/df78e6b872ca9486544005d45e6aff174013db13
DIFF: https://github.com/llvm/llvm-project/commit/df78e6b872ca9486544005d45e6aff174013db13.diff
LOG: [JITLink] Don't return errors from pointer and jump stub creators.
Creation of pointers and jump stubs always succeeds for all existing JITLink
backends, and I haven't been able to think of a scenario where it would fail.
(Pointer / stub *fixup* may fail due to range errors, but that will happen
later and the APIs already account for it).
Added:
Modified:
llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
llvm/lib/ExecutionEngine/Orc/JITLinkRedirectableSymbolManager.cpp
llvm/unittests/ExecutionEngine/JITLink/StubsTests.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h b/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
index 75dcd9f597b2c8..dac1b1d8afdc05 100644
--- a/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
+++ b/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
@@ -1931,9 +1931,9 @@ Error makeAlignmentError(llvm::orc::ExecutorAddr Loc, uint64_t Value, int N,
/// alignment: PointerSize
/// alignment-offset: 0
/// address: highest allowable
-using AnonymousPointerCreator = unique_function<Expected<Symbol &>(
- LinkGraph &G, Section &PointerSection, Symbol *InitialTarget,
- uint64_t InitialAddend)>;
+using AnonymousPointerCreator =
+ unique_function<Symbol &(LinkGraph &G, Section &PointerSection,
+ Symbol *InitialTarget, uint64_t InitialAddend)>;
/// Get target-specific AnonymousPointerCreator
AnonymousPointerCreator getAnonymousPointerCreator(const Triple &TT);
@@ -1942,7 +1942,7 @@ AnonymousPointerCreator getAnonymousPointerCreator(const Triple &TT);
/// an anonymous symbol pointing to it. Return the anonymous symbol.
///
/// The stub block will be created by createPointerJumpStubBlock.
-using PointerJumpStubCreator = unique_function<Expected<Symbol &>(
+using PointerJumpStubCreator = unique_function<Symbol &(
LinkGraph &G, Section &StubSection, Symbol &PointerSymbol)>;
/// Get target-specific PointerJumpStubCreator
diff --git a/llvm/lib/ExecutionEngine/Orc/JITLinkRedirectableSymbolManager.cpp b/llvm/lib/ExecutionEngine/Orc/JITLinkRedirectableSymbolManager.cpp
index 81294cad4d7d42..eec70d917237d4 100644
--- a/llvm/lib/ExecutionEngine/Orc/JITLinkRedirectableSymbolManager.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/JITLinkRedirectableSymbolManager.cpp
@@ -118,23 +118,19 @@ Error JITLinkRedirectableSymbolManager::grow(unsigned Need) {
// FIXME: We can batch the stubs into one block and use address to access them
for (size_t I = OldSize; I < NewSize; I++) {
- auto Pointer = AnonymousPtrCreator(*G, PointerSection, nullptr, 0);
- if (auto Err = Pointer.takeError())
- return Err;
+ auto &Pointer = AnonymousPtrCreator(*G, PointerSection, nullptr, 0);
StringRef PtrSymName = StubPtrSymbolName(I);
- Pointer->setName(PtrSymName);
- Pointer->setScope(jitlink::Scope::Default);
+ Pointer.setName(PtrSymName);
+ Pointer.setScope(jitlink::Scope::Default);
LookupSymbols.add(ES.intern(PtrSymName));
NewDefsMap[ES.intern(PtrSymName)] = &StubPointers[I];
- auto Stub = PtrJumpStubCreator(*G, StubsSection, *Pointer);
- if (auto Err = Stub.takeError())
- return Err;
+ auto &Stub = PtrJumpStubCreator(*G, StubsSection, Pointer);
StringRef JumpStubSymName = JumpStubSymbolName(I);
- Stub->setName(JumpStubSymName);
- Stub->setScope(jitlink::Scope::Default);
+ Stub.setName(JumpStubSymName);
+ Stub.setScope(jitlink::Scope::Default);
LookupSymbols.add(ES.intern(JumpStubSymName));
NewDefsMap[ES.intern(JumpStubSymName)] = &JumpStubs[I];
}
diff --git a/llvm/unittests/ExecutionEngine/JITLink/StubsTests.cpp b/llvm/unittests/ExecutionEngine/JITLink/StubsTests.cpp
index 8fbede0378b9f4..6a8f89639a0743 100644
--- a/llvm/unittests/ExecutionEngine/JITLink/StubsTests.cpp
+++ b/llvm/unittests/ExecutionEngine/JITLink/StubsTests.cpp
@@ -37,23 +37,21 @@ GenerateStub(LinkGraph &G, size_t PointerSize, Edge::Kind PointerEdgeKind) {
auto AnonymousPtrCreator = getAnonymousPointerCreator(G.getTargetTriple());
EXPECT_TRUE(AnonymousPtrCreator);
- auto PointerSym = AnonymousPtrCreator(G, PointersSec, &FuncSymbol, 0);
- EXPECT_FALSE(errorToBool(PointerSym.takeError()));
- EXPECT_EQ(std::distance(PointerSym->getBlock().edges().begin(),
- PointerSym->getBlock().edges().end()),
+ auto &PointerSym = AnonymousPtrCreator(G, PointersSec, &FuncSymbol, 0);
+ EXPECT_EQ(std::distance(PointerSym.getBlock().edges().begin(),
+ PointerSym.getBlock().edges().end()),
1U);
- auto &DeltaEdge = *PointerSym->getBlock().edges().begin();
+ auto &DeltaEdge = *PointerSym.getBlock().edges().begin();
EXPECT_EQ(DeltaEdge.getKind(), PointerEdgeKind);
EXPECT_EQ(&DeltaEdge.getTarget(), &FuncSymbol);
- EXPECT_EQ(PointerSym->getBlock().getSize(), PointerSize);
- EXPECT_TRUE(all_of(PointerSym->getBlock().getContent(),
+ EXPECT_EQ(PointerSym.getBlock().getSize(), PointerSize);
+ EXPECT_TRUE(all_of(PointerSym.getBlock().getContent(),
[](char x) { return x == 0; }));
auto PtrJumpStubCreator = getPointerJumpStubCreator(G.getTargetTriple());
EXPECT_TRUE(PtrJumpStubCreator);
- auto StubSym = PtrJumpStubCreator(G, StubsSec, *PointerSym);
- EXPECT_FALSE(errorToBool(StubSym.takeError()));
- return {*PointerSym, *StubSym};
+ auto &StubSym = PtrJumpStubCreator(G, StubsSec, PointerSym);
+ return {PointerSym, StubSym};
}
TEST(StubsTest, StubsGeneration_x86_64) {
More information about the llvm-commits
mailing list