ObjectFileELF: Test whether reloc_header is non-null instead of asserting.
It is possible for the GetSectionHeaderByIndex lookup to fail because the previous FindSectionContainingFileAddress lookup found a segment instead of a section. This is possible if the binary does not have a PLT (which means that lld will in some circumstances set DT_JMPREL to 0, which is typically an address that is part of the ELF headers and not in a section) and may also be possible if the section headers have been stripped. To handle this possibility, replace the assert with an if. Differential Revision: https://reviews.llvm.org/D93438
This commit is contained in:
@@ -2770,14 +2770,14 @@ Symtab *ObjectFileELF::GetSymtab() {
|
||||
user_id_t reloc_id = reloc_section->GetID();
|
||||
const ELFSectionHeaderInfo *reloc_header =
|
||||
GetSectionHeaderByIndex(reloc_id);
|
||||
assert(reloc_header);
|
||||
if (reloc_header) {
|
||||
if (m_symtab_up == nullptr)
|
||||
m_symtab_up =
|
||||
std::make_unique<Symtab>(reloc_section->GetObjectFile());
|
||||
|
||||
if (m_symtab_up == nullptr)
|
||||
m_symtab_up =
|
||||
std::make_unique<Symtab>(reloc_section->GetObjectFile());
|
||||
|
||||
ParseTrampolineSymbols(m_symtab_up.get(), symbol_id, reloc_header,
|
||||
reloc_id);
|
||||
ParseTrampolineSymbols(m_symtab_up.get(), symbol_id, reloc_header,
|
||||
reloc_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user