summaryrefslogtreecommitdiffstats
path: root/llvm/tools
diff options
context:
space:
mode:
authorShankar Easwaran <shankare@codeaurora.org>2012-11-13 18:38:42 +0000
committerShankar Easwaran <shankare@codeaurora.org>2012-11-13 18:38:42 +0000
commit15b28be9da510aaa01a8a78635faa686d7a413ad (patch)
tree0750b762ed9648479e7d0a578884ebbf53a6ece6 /llvm/tools
parentb1a3c0d428b1368c1fa4f0d03681d026d689ae34 (diff)
downloadbcm5719-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.cpp22
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;
OpenPOWER on IntegriCloud