summaryrefslogtreecommitdiff
path: root/tools/llvm-nm
diff options
context:
space:
mode:
Diffstat (limited to 'tools/llvm-nm')
-rw-r--r--tools/llvm-nm/llvm-nm.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/tools/llvm-nm/llvm-nm.cpp b/tools/llvm-nm/llvm-nm.cpp
index 0a1491b846..57e9d55c86 100644
--- a/tools/llvm-nm/llvm-nm.cpp
+++ b/tools/llvm-nm/llvm-nm.cpp
@@ -595,10 +595,24 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
E = UB->end_objects();
I != E; ++I) {
std::unique_ptr<ObjectFile> Obj;
+ std::unique_ptr<Archive> A;
if (!I->getAsObjectFile(Obj)) {
outs() << Obj->getFileName() << ":\n";
dumpSymbolNamesFromObject(Obj.get());
}
+ else if (!I->getAsArchive(A)) {
+ for (Archive::child_iterator AI = A->child_begin(), AE = A->child_end();
+ AI != AE; ++AI) {
+ std::unique_ptr<Binary> Child;
+ if (AI->getAsBinary(Child, &Context))
+ continue;
+ if (SymbolicFile *O = dyn_cast<SymbolicFile>(Child.get())) {
+ outs() << A->getFileName() << ":";
+ outs() << O->getFileName() << ":\n";
+ dumpSymbolNamesFromObject(O);
+ }
+ }
+ }
}
return;
}