summaryrefslogtreecommitdiff
path: root/tools/llvm-nm
diff options
context:
space:
mode:
authorKevin Enderby <enderby@apple.com>2014-06-20 21:29:27 +0000
committerKevin Enderby <enderby@apple.com>2014-06-20 21:29:27 +0000
commitefc447827d22c67dbd6aaff6f4160e710583c606 (patch)
tree225a5afcc92c958fe560fcc08fc3ca0d72b89fc8 /tools/llvm-nm
parent85fdfe8efcb582f4d6d564a85c5c6a37a97f9787 (diff)
downloadllvm-efc447827d22c67dbd6aaff6f4160e710583c606.tar.gz
llvm-efc447827d22c67dbd6aaff6f4160e710583c606.tar.bz2
llvm-efc447827d22c67dbd6aaff6f4160e710583c606.tar.xz
Fix some double printing of filenames for archives in llvm-nm when
the tool is given multiple files. Also fix the same issue with Mach-O universal files. And fix the newline spacing to separate the output in these cases. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211405 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-nm')
-rw-r--r--tools/llvm-nm/llvm-nm.cpp23
1 files changed, 13 insertions, 10 deletions
diff --git a/tools/llvm-nm/llvm-nm.cpp b/tools/llvm-nm/llvm-nm.cpp
index cccddb0736..5221d4d18d 100644
--- a/tools/llvm-nm/llvm-nm.cpp
+++ b/tools/llvm-nm/llvm-nm.cpp
@@ -370,7 +370,7 @@ static void darwinPrintSymbol(MachOObjectFile *MachO, SymbolListT::iterator I,
outs() << "\n";
}
-static void sortAndPrintSymbolList(SymbolicFile *Obj) {
+static void sortAndPrintSymbolList(SymbolicFile *Obj, bool printName) {
if (!NoSort) {
if (NumericSort)
std::sort(SymbolList.begin(), SymbolList.end(), compareSymbolAddress);
@@ -380,9 +380,9 @@ static void sortAndPrintSymbolList(SymbolicFile *Obj) {
std::sort(SymbolList.begin(), SymbolList.end(), compareSymbolName);
}
- if (OutputFormat == posix && MultipleFiles) {
+ if (OutputFormat == posix && MultipleFiles && printName) {
outs() << '\n' << CurrentFilename << ":\n";
- } else if (OutputFormat == bsd && MultipleFiles) {
+ } else if (OutputFormat == bsd && MultipleFiles && printName) {
outs() << "\n" << CurrentFilename << ":\n";
} else if (OutputFormat == sysv) {
outs() << "\n\nSymbols from " << CurrentFilename << ":\n\n"
@@ -664,7 +664,7 @@ static char getNMTypeChar(SymbolicFile *Obj, basic_symbol_iterator I) {
return Ret;
}
-static void dumpSymbolNamesFromObject(SymbolicFile *Obj) {
+static void dumpSymbolNamesFromObject(SymbolicFile *Obj, bool printName) {
basic_symbol_iterator IBegin = Obj->symbol_begin();
basic_symbol_iterator IEnd = Obj->symbol_end();
if (DynamicSyms) {
@@ -717,7 +717,7 @@ static void dumpSymbolNamesFromObject(SymbolicFile *Obj) {
}
CurrentFilename = Obj->getFileName();
- sortAndPrintSymbolList(Obj);
+ sortAndPrintSymbolList(Obj, printName);
}
static void dumpSymbolNamesFromFile(std::string &Filename) {
@@ -757,12 +757,13 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
if (ChildOrErr.getError())
continue;
if (SymbolicFile *O = dyn_cast<SymbolicFile>(&*ChildOrErr.get())) {
+ outs() << "\n";
if (isa<MachOObjectFile>(O)) {
outs() << Filename << "(" << O->getFileName() << ")";
} else
outs() << O->getFileName();
outs() << ":\n";
- dumpSymbolNamesFromObject(O);
+ dumpSymbolNamesFromObject(O, false);
}
}
return;
@@ -775,11 +776,13 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
std::unique_ptr<ObjectFile> Obj;
std::unique_ptr<Archive> A;
if (!I->getAsObjectFile(Obj)) {
+ if (moreThanOneArch)
+ outs() << "\n";
outs() << Obj->getFileName();
if (isa<MachOObjectFile>(Obj.get()) && moreThanOneArch)
outs() << " (for architecture " << I->getArchTypeName() << ")";
outs() << ":\n";
- dumpSymbolNamesFromObject(Obj.get());
+ dumpSymbolNamesFromObject(Obj.get(), false);
}
else if (!I->getAsArchive(A)) {
for (Archive::child_iterator AI = A->child_begin(), AE = A->child_end();
@@ -789,7 +792,7 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
if (ChildOrErr.getError())
continue;
if (SymbolicFile *O = dyn_cast<SymbolicFile>(&*ChildOrErr.get())) {
- outs() << A->getFileName();
+ outs() << "\n" << A->getFileName();
if (isa<MachOObjectFile>(O)) {
outs() << "(" << O->getFileName() << ")";
if (moreThanOneArch)
@@ -797,7 +800,7 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
} else
outs() << ":" << O->getFileName();
outs() << ":\n";
- dumpSymbolNamesFromObject(O);
+ dumpSymbolNamesFromObject(O, false);
}
}
}
@@ -805,7 +808,7 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
return;
}
if (SymbolicFile *O = dyn_cast<SymbolicFile>(Bin.get())) {
- dumpSymbolNamesFromObject(O);
+ dumpSymbolNamesFromObject(O, true);
return;
}
error("unrecognizable file type", Filename);