diff options
author | Shankar Easwaran <shankare@codeaurora.org> | 2012-11-13 18:38:42 +0000 |
---|---|---|
committer | Shankar Easwaran <shankare@codeaurora.org> | 2012-11-13 18:38:42 +0000 |
commit | 15b28be9da510aaa01a8a78635faa686d7a413ad (patch) | |
tree | 0750b762ed9648479e7d0a578884ebbf53a6ece6 /llvm/tools | |
parent | b1a3c0d428b1368c1fa4f0d03681d026d689ae34 (diff) | |
download | bcm5719-llvm-15b28be9da510aaa01a8a78635faa686d7a413ad.tar.gz bcm5719-llvm-15b28be9da510aaa01a8a78635faa686d7a413ad.zip |
Adding changes to support GNU style archive library reading
llvm-svn: 167853
Diffstat (limited to 'llvm/tools')
-rw-r--r-- | llvm/tools/llvm-nm/llvm-nm.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp index 0543e83f9cb..153de952935 100644 --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/tools/llvm-nm/llvm-nm.cpp @@ -113,6 +113,10 @@ namespace { cl::opt<bool> WithoutAliases("without-aliases", cl::Hidden, cl::desc("Exclude aliases from output")); + cl::opt<bool> ArchiveMap("print-armap", + cl::desc("Print the archive map")); + cl::alias ArchiveMaps("s", cl::desc("Alias for --print-armap"), + cl::aliasopt(ArchiveMap)); bool PrintAddress = true; bool MultipleFiles = false; @@ -346,6 +350,24 @@ static void DumpSymbolNamesFromFile(std::string &Filename) { return; if (object::Archive *a = dyn_cast<object::Archive>(arch.get())) { + if (ArchiveMap) { + outs() << "Archive map" << "\n"; + for (object::Archive::symbol_iterator i = a->begin_symbols(), + e = a->end_symbols(); i != e; ++i) { + object::Archive::child_iterator c; + StringRef symname; + StringRef filename; + if (error(i->getMember(c))) + return; + if (error(i->getName(symname))) + return; + if (error(c->getName(filename))) + return; + outs() << symname << " in " << filename << "\n"; + } + outs() << "\n"; + } + for (object::Archive::child_iterator i = a->begin_children(), e = a->end_children(); i != e; ++i) { OwningPtr<Binary> child; |