[LLD][ELF] Fix performance of MarkLive::scanEhFrameSection
authorAndrew Ng <andrew.ng@sony.com>
Mon, 7 Sep 2020 16:36:14 +0000 (17:36 +0100)
committerAndrew Ng <andrew.ng@sony.com>
Tue, 8 Sep 2020 18:32:34 +0000 (19:32 +0100)
commit863aa0a37bd1a57b0720eda6d646f9abd51bf6c2
treec25abb7ddeb8488a2e7419cdec0b7202a6086182
parentce49b7d9ca01f4abbba1e5a00339d539b0ea563e
[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
e6c24299d237 (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
lld/ELF/MarkLive.cpp