diff options
| author | Michael J. Spencer <bigcheesegs@gmail.com> | 2013-01-31 22:56:13 +0000 |
|---|---|---|
| committer | Michael J. Spencer <bigcheesegs@gmail.com> | 2013-01-31 22:56:13 +0000 |
| commit | 280dadbbaf398b8172db71de15c753a2c803db8a (patch) | |
| tree | fdcb18912207b06576939c2fd3faeb2f209d8f8e /lld/lib/Core/Resolver.cpp | |
| parent | e1137a2058ec3ea105323bbd9b99b5dc034c93d6 (diff) | |
| download | bcm5719-llvm-280dadbbaf398b8172db71de15c753a2c803db8a.tar.gz bcm5719-llvm-280dadbbaf398b8172db71de15c753a2c803db8a.zip | |
[Core] Only complain about undefined symbols if they are marked as canBeNullNever.
llvm-svn: 174107
Diffstat (limited to 'lld/lib/Core/Resolver.cpp')
| -rw-r--r-- | lld/lib/Core/Resolver.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/lld/lib/Core/Resolver.cpp b/lld/lib/Core/Resolver.cpp index b80a2214173..d0dd41fb5b4 100644 --- a/lld/lib/Core/Resolver.cpp +++ b/lld/lib/Core/Resolver.cpp @@ -191,7 +191,7 @@ void Resolver::resolveUndefines() { unsigned int undefineGenCount = 0xFFFFFFFF; while (undefineGenCount != _symbolTable.size()) { undefineGenCount = _symbolTable.size(); - std::vector<const Atom *> undefines; + std::vector<const UndefinedAtom *> undefines; _symbolTable.undefines(undefines); for ( const Atom *undefAtom : undefines ) { StringRef undefName = undefAtom->name(); @@ -301,7 +301,7 @@ void Resolver::checkUndefines(bool final) { return; // build vector of remaining undefined symbols - std::vector<const Atom *> undefinedAtoms; + std::vector<const UndefinedAtom *> undefinedAtoms; _symbolTable.undefines(undefinedAtoms); if (_targetInfo.getLinkerOptions()._deadStrip) { // When dead code stripping, we don't care if dead atoms are undefined. @@ -315,11 +315,15 @@ void Resolver::checkUndefines(bool final) { (!_targetInfo.getLinkerOptions()._noInhibitExec || _targetInfo.getLinkerOptions()._outputKind == OutputKind::Relocatable)) { // FIXME: need diagonstics interface for writing error messages - llvm::errs() << "Undefined symbols:\n"; - for ( const Atom *undefAtom : undefinedAtoms ) { - llvm::errs() << " " << undefAtom->name() << "\n"; + bool isError = false; + for (const UndefinedAtom *undefAtom : undefinedAtoms) { + if (undefAtom->canBeNull() == UndefinedAtom::canBeNullNever) { + llvm::errs() << "Undefined Symbol: " << undefAtom->name() << "\n"; + isError = true; + } } - llvm::report_fatal_error("symbol(s) not found"); + if (isError) + llvm::report_fatal_error("symbol(s) not found"); } } |

