summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-nm/llvm-nm.cpp
diff options
context:
space:
mode:
authorJordan Rupprecht <rupprecht@google.com>2018-10-11 17:55:11 +0000
committerJordan Rupprecht <rupprecht@google.com>2018-10-11 17:55:11 +0000
commit1845645b0d689ce4562fec7ed7e7d975f0be987e (patch)
treeee00cc0ac2803ac93219ef085f24ab9552dcfa1e /llvm/tools/llvm-nm/llvm-nm.cpp
parent480a5075ad527eb8fc73a78d9eda25b07e2884b7 (diff)
downloadbcm5719-llvm-1845645b0d689ce4562fec7ed7e7d975f0be987e.tar.gz
bcm5719-llvm-1845645b0d689ce4562fec7ed7e7d975f0be987e.zip
[llvm-nm] Fix crash when running with --print-armap on corrupt archives.
error() in llvm-nm intentionally does not return so that the callee can move on to future files/slices. When printing the archive map, this is not currently handled (the caller assumes that error() returns), so processing continues despite there being an error. Also, change one return to a break, so that symbols can be printed even if the archive map is corrupt. llvm-svn: 344268
Diffstat (limited to 'llvm/tools/llvm-nm/llvm-nm.cpp')
-rw-r--r--llvm/tools/llvm-nm/llvm-nm.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp
index 22fdd4ca85e..7e257d8ce89 100644
--- a/llvm/tools/llvm-nm/llvm-nm.cpp
+++ b/llvm/tools/llvm-nm/llvm-nm.cpp
@@ -1755,12 +1755,14 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
outs() << "Archive map\n";
for (; I != E; ++I) {
Expected<Archive::Child> C = I->getMember();
- if (!C)
+ if (!C) {
error(C.takeError(), Filename);
+ break;
+ }
Expected<StringRef> FileNameOrErr = C->getName();
if (!FileNameOrErr) {
error(FileNameOrErr.takeError(), Filename);
- return;
+ break;
}
StringRef SymName = I->getName();
outs() << SymName << " in " << FileNameOrErr.get() << "\n";
OpenPOWER on IntegriCloud