[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