Introduce the TargetInstrInfo::KILL machine instruction and get rid of the
[oota-llvm.git] / tools / llvm-nm / llvm-nm.cpp
index a71ad2b26a4d9ac1800734f4baae0e51ea32a403..2baf5323f4cb03815f582be05485d8a299828528 100644 (file)
@@ -30,7 +30,6 @@
 #include <cctype>
 #include <cerrno>
 #include <cstring>
-#include <iostream>
 using namespace llvm;
 
 namespace {
@@ -89,7 +88,8 @@ static char TypeCharForSymbol(GlobalValue &GV) {
 
 static void DumpSymbolNameForGlobalValue(GlobalValue &GV) {
   // Private linkage and available_externally linkage don't exist in symtab.
-  if (GV.hasPrivateLinkage() || GV.hasAvailableExternallyLinkage()) return;
+  if (GV.hasPrivateLinkage() || GV.hasLinkerPrivateLinkage() ||
+      GV.hasAvailableExternallyLinkage()) return;
   
   const std::string SymbolAddrStr = "        "; // Not used yet...
   char TypeChar = TypeCharForSymbol(GV);
@@ -100,31 +100,31 @@ static void DumpSymbolNameForGlobalValue(GlobalValue &GV) {
   if (GV.hasLocalLinkage () && ExternalOnly)
     return;
   if (OutputFormat == posix) {
-    std::cout << GV.getName () << " " << TypeCharForSymbol(GV) << " "
-              << SymbolAddrStr << "\n";
+    outs() << GV.getName () << " " << TypeCharForSymbol(GV) << " "
+           << SymbolAddrStr << "\n";
   } else if (OutputFormat == bsd) {
-    std::cout << SymbolAddrStr << " " << TypeCharForSymbol(GV) << " "
-              << GV.getName () << "\n";
+    outs() << SymbolAddrStr << " " << TypeCharForSymbol(GV) << " "
+           << GV.getName () << "\n";
   } else if (OutputFormat == sysv) {
     std::string PaddedName (GV.getName ());
     while (PaddedName.length () < 20)
       PaddedName += " ";
-    std::cout << PaddedName << "|" << SymbolAddrStr << "|   "
-              << TypeCharForSymbol(GV)
-              << "  |                  |      |     |\n";
+    outs() << PaddedName << "|" << SymbolAddrStr << "|   "
+           << TypeCharForSymbol(GV)
+           << "  |                  |      |     |\n";
   }
 }
 
 static void DumpSymbolNamesFromModule(Module *M) {
   const std::string &Filename = M->getModuleIdentifier ();
   if (OutputFormat == posix && MultipleFiles) {
-    std::cout << Filename << ":\n";
+    outs() << Filename << ":\n";
   } else if (OutputFormat == bsd && MultipleFiles) {
-    std::cout << "\n" << Filename << ":\n";
+    outs() << "\n" << Filename << ":\n";
   } else if (OutputFormat == sysv) {
-    std::cout << "\n\nSymbols from " << Filename << ":\n\n"
-              << "Name                  Value   Class        Type"
-              << "         Size   Line  Section\n";
+    outs() << "\n\nSymbols from " << Filename << ":\n\n"
+           << "Name                  Value   Class        Type"
+           << "         Size   Line  Section\n";
   }
   std::for_each (M->begin(), M->end(), DumpSymbolNameForGlobalValue);
   std::for_each (M->global_begin(), M->global_end(),
@@ -145,12 +145,11 @@ static void DumpSymbolNamesFromFile(std::string &Filename) {
     if (Buffer.get())
       Result = ParseBitcodeFile(Buffer.get(), Context, &ErrorMessage);
     
-    if (Result)
+    if (Result) {
       DumpSymbolNamesFromModule(Result);
-    else {
+      delete Result;
+    } else
       errs() << ToolName << ": " << Filename << ": " << ErrorMessage << "\n";
-      return;
-    }
     
   } else if (aPath.isArchive()) {
     std::string ErrMsg;