Skip to content

Commit df78e6b

Browse files
committed
[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).
1 parent c820994 commit df78e6b

File tree

3 files changed

+18
-24
lines changed

3 files changed

+18
-24
lines changed

llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1931,9 +1931,9 @@ Error makeAlignmentError(llvm::orc::ExecutorAddr Loc, uint64_t Value, int N,
19311931
/// alignment: PointerSize
19321932
/// alignment-offset: 0
19331933
/// address: highest allowable
1934-
using AnonymousPointerCreator = unique_function<Expected<Symbol &>(
1935-
LinkGraph &G, Section &PointerSection, Symbol *InitialTarget,
1936-
uint64_t InitialAddend)>;
1934+
using AnonymousPointerCreator =
1935+
unique_function<Symbol &(LinkGraph &G, Section &PointerSection,
1936+
Symbol *InitialTarget, uint64_t InitialAddend)>;
19371937

19381938
/// Get target-specific AnonymousPointerCreator
19391939
AnonymousPointerCreator getAnonymousPointerCreator(const Triple &TT);
@@ -1942,7 +1942,7 @@ AnonymousPointerCreator getAnonymousPointerCreator(const Triple &TT);
19421942
/// an anonymous symbol pointing to it. Return the anonymous symbol.
19431943
///
19441944
/// The stub block will be created by createPointerJumpStubBlock.
1945-
using PointerJumpStubCreator = unique_function<Expected<Symbol &>(
1945+
using PointerJumpStubCreator = unique_function<Symbol &(
19461946
LinkGraph &G, Section &StubSection, Symbol &PointerSymbol)>;
19471947

19481948
/// Get target-specific PointerJumpStubCreator

llvm/lib/ExecutionEngine/Orc/JITLinkRedirectableSymbolManager.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -118,23 +118,19 @@ Error JITLinkRedirectableSymbolManager::grow(unsigned Need) {
118118

119119
// FIXME: We can batch the stubs into one block and use address to access them
120120
for (size_t I = OldSize; I < NewSize; I++) {
121-
auto Pointer = AnonymousPtrCreator(*G, PointerSection, nullptr, 0);
122-
if (auto Err = Pointer.takeError())
123-
return Err;
121+
auto &Pointer = AnonymousPtrCreator(*G, PointerSection, nullptr, 0);
124122

125123
StringRef PtrSymName = StubPtrSymbolName(I);
126-
Pointer->setName(PtrSymName);
127-
Pointer->setScope(jitlink::Scope::Default);
124+
Pointer.setName(PtrSymName);
125+
Pointer.setScope(jitlink::Scope::Default);
128126
LookupSymbols.add(ES.intern(PtrSymName));
129127
NewDefsMap[ES.intern(PtrSymName)] = &StubPointers[I];
130128

131-
auto Stub = PtrJumpStubCreator(*G, StubsSection, *Pointer);
132-
if (auto Err = Stub.takeError())
133-
return Err;
129+
auto &Stub = PtrJumpStubCreator(*G, StubsSection, Pointer);
134130

135131
StringRef JumpStubSymName = JumpStubSymbolName(I);
136-
Stub->setName(JumpStubSymName);
137-
Stub->setScope(jitlink::Scope::Default);
132+
Stub.setName(JumpStubSymName);
133+
Stub.setScope(jitlink::Scope::Default);
138134
LookupSymbols.add(ES.intern(JumpStubSymName));
139135
NewDefsMap[ES.intern(JumpStubSymName)] = &JumpStubs[I];
140136
}

llvm/unittests/ExecutionEngine/JITLink/StubsTests.cpp

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,23 +37,21 @@ GenerateStub(LinkGraph &G, size_t PointerSize, Edge::Kind PointerEdgeKind) {
3737
auto AnonymousPtrCreator = getAnonymousPointerCreator(G.getTargetTriple());
3838
EXPECT_TRUE(AnonymousPtrCreator);
3939

40-
auto PointerSym = AnonymousPtrCreator(G, PointersSec, &FuncSymbol, 0);
41-
EXPECT_FALSE(errorToBool(PointerSym.takeError()));
42-
EXPECT_EQ(std::distance(PointerSym->getBlock().edges().begin(),
43-
PointerSym->getBlock().edges().end()),
40+
auto &PointerSym = AnonymousPtrCreator(G, PointersSec, &FuncSymbol, 0);
41+
EXPECT_EQ(std::distance(PointerSym.getBlock().edges().begin(),
42+
PointerSym.getBlock().edges().end()),
4443
1U);
45-
auto &DeltaEdge = *PointerSym->getBlock().edges().begin();
44+
auto &DeltaEdge = *PointerSym.getBlock().edges().begin();
4645
EXPECT_EQ(DeltaEdge.getKind(), PointerEdgeKind);
4746
EXPECT_EQ(&DeltaEdge.getTarget(), &FuncSymbol);
48-
EXPECT_EQ(PointerSym->getBlock().getSize(), PointerSize);
49-
EXPECT_TRUE(all_of(PointerSym->getBlock().getContent(),
47+
EXPECT_EQ(PointerSym.getBlock().getSize(), PointerSize);
48+
EXPECT_TRUE(all_of(PointerSym.getBlock().getContent(),
5049
[](char x) { return x == 0; }));
5150

5251
auto PtrJumpStubCreator = getPointerJumpStubCreator(G.getTargetTriple());
5352
EXPECT_TRUE(PtrJumpStubCreator);
54-
auto StubSym = PtrJumpStubCreator(G, StubsSec, *PointerSym);
55-
EXPECT_FALSE(errorToBool(StubSym.takeError()));
56-
return {*PointerSym, *StubSym};
53+
auto &StubSym = PtrJumpStubCreator(G, StubsSec, PointerSym);
54+
return {PointerSym, StubSym};
5755
}
5856

5957
TEST(StubsTest, StubsGeneration_x86_64) {

0 commit comments

Comments
 (0)