forked from OSchip/llvm-project
[LLD][ELF] Fix performance of MarkLive::scanEhFrameSection
MarkLive::scanEhFrameSection is used to retain personality/LSDA
functions when --gc-sections is enabled.
Improve its performance by only iterating over the .eh_frame relocations
that need to be resolved for an EhSectionPiece. This optimization makes
the same assumption as elsewhere in LLD that the .eh_frame relocations
are sorted by r_offset.
This appears to be a performance regression introduced in commit
e6c24299d2
(https://reviews.llvm.org/D59800).
This change has been seen to reduce link time by up to ~50%.
Differential Revision: https://reviews.llvm.org/D87245
This commit is contained in:
parent
ce49b7d9ca
commit
863aa0a37b
|
@ -152,9 +152,9 @@ void MarkLive<ELFT>::scanEhFrameSection(EhInputSection &eh,
|
|||
// a LSDA. We only need to keep the LSDA alive, so ignore anything that
|
||||
// points to executable sections.
|
||||
uint64_t pieceEnd = piece.inputOff + piece.size;
|
||||
for (size_t j = firstRelI, end2 = rels.size(); j < end2; ++j)
|
||||
if (rels[j].r_offset < pieceEnd)
|
||||
resolveReloc(eh, rels[j], true);
|
||||
for (size_t j = firstRelI, end2 = rels.size();
|
||||
j < end2 && rels[j].r_offset < pieceEnd; ++j)
|
||||
resolveReloc(eh, rels[j], true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue