diff options
author | Jordan Rupprecht <rupprecht@google.com> | 2018-10-11 17:55:11 +0000 |
---|---|---|
committer | Jordan Rupprecht <rupprecht@google.com> | 2018-10-11 17:55:11 +0000 |
commit | 1845645b0d689ce4562fec7ed7e7d975f0be987e (patch) | |
tree | ee00cc0ac2803ac93219ef085f24ab9552dcfa1e /llvm/tools/llvm-nm/llvm-nm.cpp | |
parent | 480a5075ad527eb8fc73a78d9eda25b07e2884b7 (diff) | |
download | bcm5719-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.cpp | 6 |
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"; |