[llvm] r211405 - Fix some double printing of filenames for archives in llvm-nm when

Kevin Enderby enderby at apple.com
Fri Jun 20 14:29:28 PDT 2014


Author: enderby
Date: Fri Jun 20 16:29:27 2014
New Revision: 211405

URL: http://llvm.org/viewvc/llvm-project?rev=211405&view=rev
Log:
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.

Modified:
    llvm/trunk/test/Object/archive-symtab.test
    llvm/trunk/tools/llvm-nm/llvm-nm.cpp

Modified: llvm/trunk/test/Object/archive-symtab.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/archive-symtab.test?rev=211405&r1=211404&r2=211405&view=diff
==============================================================================
--- llvm/trunk/test/Object/archive-symtab.test (original)
+++ llvm/trunk/test/Object/archive-symtab.test Fri Jun 20 16:29:27 2014
@@ -12,7 +12,8 @@ CHECK: trivial-object-test.elf-x86-64:
 CHECK-NEXT:                  U SomeOtherFunction
 CHECK-NEXT: 0000000000000000 T main
 CHECK-NEXT:                  U puts
-CHECK-NEXT: trivial-object-test2.elf-x86-64:
+
+CHECK: trivial-object-test2.elf-x86-64:
 CHECK-NEXT: 0000000000000000 t bar
 CHECK-NEXT: 0000000000000006 T foo
 CHECK-NEXT: 0000000000000016 T main
@@ -40,7 +41,8 @@ CORRUPT: trivial-object-test.elf-x86-64:
 CORRUPT-NEXT:                  U SomeOtherFunction
 CORRUPT-NEXT: 0000000000000000 T main
 CORRUPT-NEXT:                  U puts
-CORRUPT-NEXT: trivial-object-test2.elf-x86-64:
+
+CORRUPT: trivial-object-test2.elf-x86-64:
 CORRUPT-NEXT: 0000000000000000 t bar
 CORRUPT-NEXT: 0000000000000006 T foo
 CORRUPT-NEXT: 0000000000000016 T main

Modified: llvm/trunk/tools/llvm-nm/llvm-nm.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-nm/llvm-nm.cpp?rev=211405&r1=211404&r2=211405&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-nm/llvm-nm.cpp (original)
+++ llvm/trunk/tools/llvm-nm/llvm-nm.cpp Fri Jun 20 16:29:27 2014
@@ -370,7 +370,7 @@ static void darwinPrintSymbol(MachOObjec
   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(Symbo
       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 *
   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(Sy
   }
 
   CurrentFilename = Obj->getFileName();
-  sortAndPrintSymbolList(Obj);
+  sortAndPrintSymbolList(Obj, printName);
 }
 
 static void dumpSymbolNamesFromFile(std::string &Filename) {
@@ -757,12 +757,13 @@ static void dumpSymbolNamesFromFile(std:
       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:
       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:
           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:
             } else
               outs() << ":" << O->getFileName();
             outs() << ":\n";
-            dumpSymbolNamesFromObject(O);
+            dumpSymbolNamesFromObject(O, false);
           }
         }
       }
@@ -805,7 +808,7 @@ static void dumpSymbolNamesFromFile(std:
     return;
   }
   if (SymbolicFile *O = dyn_cast<SymbolicFile>(Bin.get())) {
-    dumpSymbolNamesFromObject(O);
+    dumpSymbolNamesFromObject(O, true);
     return;
   }
   error("unrecognizable file type", Filename);





More information about the llvm-commits mailing list