diff options
| author | Rui Ueyama <ruiu@google.com> | 2013-10-16 05:03:39 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2013-10-16 05:03:39 +0000 |
| commit | 284783177156b9dbd798d4b8f12257e5768ef678 (patch) | |
| tree | fdb966386d36fc564213864ca8135f2e6f248320 /lld/lib/Core/Resolver.cpp | |
| parent | 70b66f0df2a1322dabb807c0e5d57f447e1731ff (diff) | |
| download | bcm5719-llvm-284783177156b9dbd798d4b8f12257e5768ef678.tar.gz bcm5719-llvm-284783177156b9dbd798d4b8f12257e5768ef678.zip | |
Propagate deadStripOptimize()'s failure to the caller.
We want to make the program to exit with non-zero exit code if there's an error
during dead stripping.
llvm-svn: 192771
Diffstat (limited to 'lld/lib/Core/Resolver.cpp')
| -rw-r--r-- | lld/lib/Core/Resolver.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/lld/lib/Core/Resolver.cpp b/lld/lib/Core/Resolver.cpp index 8b211cb9a5e..7fdb6f5aa79 100644 --- a/lld/lib/Core/Resolver.cpp +++ b/lld/lib/Core/Resolver.cpp @@ -363,11 +363,11 @@ void Resolver::markLive(const Atom &atom) { // remove all atoms not actually used -void Resolver::deadStripOptimize() { +bool Resolver::deadStripOptimize() { ScopedTask task(getDefaultDomain(), "deadStripOptimize"); // only do this optimization with -dead_strip if (!_context.deadStrip()) - return; + return true; // clear liveness on all atoms _liveAtoms.clear(); @@ -386,10 +386,10 @@ void Resolver::deadStripOptimize() { // Or, use list of names that are dead stip roots. for (const StringRef &name : _context.deadStripRoots()) { const Atom *symAtom = _symbolTable.findByName(name); - if (symAtom->definition() == Atom::definitionUndefined) { + if (!symAtom || symAtom->definition() == Atom::definitionUndefined) { llvm::errs() << "Dead strip root '" << symAtom->name() << "' is not defined\n"; - return; + return false; } _deadStripRoots.insert(symAtom); } @@ -402,6 +402,7 @@ void Resolver::deadStripOptimize() { // now remove all non-live atoms from _atoms _atoms.erase(std::remove_if(_atoms.begin(), _atoms.end(), NotLive(_liveAtoms)), _atoms.end()); + return true; } @@ -473,7 +474,8 @@ bool Resolver::resolve() { if (!this->resolveUndefines()) return false; this->updateReferences(); - this->deadStripOptimize(); + if (!this->deadStripOptimize()) + return false; if (this->checkUndefines(false)) { if (!_context.allowRemainingUndefines()) return false; |

