@@ -308,7 +308,9 @@ RuntimeDyldImpl::loadObjectImpl(const object::ObjectFile &Obj) {
308
308
<< " SID: " << SectionID
309
309
<< " Offset: " << format (" %p" , (uintptr_t )Addr)
310
310
<< " flags: " << *FlagsOrErr << " \n " );
311
- GlobalSymbolTable[Name] = SymbolTableEntry (SectionID, Addr, *JITSymFlags);
311
+ if (!Name.empty ()) // Skip absolute symbol relocations.
312
+ GlobalSymbolTable[Name] =
313
+ SymbolTableEntry (SectionID, Addr, *JITSymFlags);
312
314
} else if (SymType == object::SymbolRef::ST_Function ||
313
315
SymType == object::SymbolRef::ST_Data ||
314
316
SymType == object::SymbolRef::ST_Unknown ||
@@ -340,8 +342,9 @@ RuntimeDyldImpl::loadObjectImpl(const object::ObjectFile &Obj) {
340
342
<< " SID: " << SectionID
341
343
<< " Offset: " << format (" %p" , (uintptr_t )SectOffset)
342
344
<< " flags: " << *FlagsOrErr << " \n " );
343
- GlobalSymbolTable[Name] =
344
- SymbolTableEntry (SectionID, SectOffset, *JITSymFlags);
345
+ if (!Name.empty ()) // Skip absolute symbol relocations
346
+ GlobalSymbolTable[Name] =
347
+ SymbolTableEntry (SectionID, SectOffset, *JITSymFlags);
345
348
}
346
349
}
347
350
@@ -769,8 +772,9 @@ Error RuntimeDyldImpl::emitCommonSymbols(const ObjectFile &Obj,
769
772
770
773
LLVM_DEBUG (dbgs () << " Allocating common symbol " << Name << " address "
771
774
<< format (" %p" , Addr) << " \n " );
772
- GlobalSymbolTable[Name] =
773
- SymbolTableEntry (SectionID, Offset, std::move (*JITSymFlags));
775
+ if (!Name.empty ()) // Skip absolute symbol relocations.
776
+ GlobalSymbolTable[Name] =
777
+ SymbolTableEntry (SectionID, Offset, std::move (*JITSymFlags));
774
778
Offset += Size;
775
779
Addr += Size;
776
780
}
@@ -930,6 +934,8 @@ void RuntimeDyldImpl::addRelocationForSymbol(const RelocationEntry &RE,
930
934
if (Loc == GlobalSymbolTable.end ()) {
931
935
ExternalSymbolRelocations[SymbolName].push_back (RE);
932
936
} else {
937
+ assert (!SymbolName.empty () &&
938
+ " Empty symbol should not be in GlobalSymbolTable" );
933
939
// Copy the RE since we want to modify its addend.
934
940
RelocationEntry RECopy = RE;
935
941
const auto &SymInfo = Loc->second ;
@@ -1234,7 +1240,8 @@ void RuntimeDyldImpl::finalizeAsync(
1234
1240
1235
1241
for (auto &RelocKV : SharedThis->ExternalSymbolRelocations ) {
1236
1242
StringRef Name = RelocKV.first ();
1237
- assert (!Name.empty () && " Symbol has no name?" );
1243
+ if (Name.empty ()) // Skip absolute symbol relocations.
1244
+ continue ;
1238
1245
assert (!SharedThis->GlobalSymbolTable .count (Name) &&
1239
1246
" Name already processed. RuntimeDyld instances can not be re-used "
1240
1247
" when finalizing with finalizeAsync." );
0 commit comments