diff options
author | Tim Northover <tnorthover@apple.com> | 2014-11-04 21:57:32 +0000 |
---|---|---|
committer | Tim Northover <tnorthover@apple.com> | 2014-11-04 21:57:32 +0000 |
commit | f98b1c99603d7da0e7d3700e446fe864506294f8 (patch) | |
tree | 75a37eed9a137efe1ebad5e070ba7fb4ac7c1380 /lld/lib/Core/Resolver.cpp | |
parent | a16974a5c06463d0191760388a790421b155164d (diff) | |
download | bcm5719-llvm-f98b1c99603d7da0e7d3700e446fe864506294f8.tar.gz bcm5719-llvm-f98b1c99603d7da0e7d3700e446fe864506294f8.zip |
[mach-o] remove __compact_unwind atoms once __unwind_info has been generated
The job of the CompactUnwind pass is to turn __compact_unwind data (and
__eh_frame) into the compressed final form in __unwind_info. After it's done,
the original atoms are no longer relevant and should be deleted (they cause
problems during actual execution, quite apart from the fact that they're not
needed).
llvm-svn: 221301
Diffstat (limited to 'lld/lib/Core/Resolver.cpp')
-rw-r--r-- | lld/lib/Core/Resolver.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/lld/lib/Core/Resolver.cpp b/lld/lib/Core/Resolver.cpp index 16578661602..e4a1b53cc33 100644 --- a/lld/lib/Core/Resolver.cpp +++ b/lld/lib/Core/Resolver.cpp @@ -445,6 +445,13 @@ MutableFile::DefinedAtomRange Resolver::MergedFile::definedAtoms() { _definedAtoms._atoms.begin(), _definedAtoms._atoms.end()); } +void Resolver::MergedFile::removeDefinedAtomsIf( + std::function<bool(const DefinedAtom *)> pred) { + auto &atoms = _definedAtoms._atoms; + auto newEnd = std::remove_if(atoms.begin(), atoms.end(), pred); + atoms.erase(newEnd, atoms.end()); +} + void Resolver::MergedFile::addAtoms(std::vector<const Atom *> &all) { ScopedTask task(getDefaultDomain(), "addAtoms"); DEBUG_WITH_TYPE("resolver", llvm::dbgs() << "Resolver final atom list:\n"); |