Include Support/FileUtilities.h.
authorBrian Gaeke <gaeke@uiuc.edu>
Sun, 16 Nov 2003 23:34:13 +0000 (23:34 +0000)
committerBrian Gaeke <gaeke@uiuc.edu>
Sun, 16 Nov 2003 23:34:13 +0000 (23:34 +0000)
Print module identifier in DumpSymbolNamesFromModule().
In DumpSymbolNamesFromFile(), check whether it is an archive or a bytecode
 file, and call the corresponding reader function (ParseBytecodeFile or
 ReadArchiveFile).
Unconditionally set MultipleFiles for archives.
Fixes PR117.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10044 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llvm-nm/llvm-nm.cpp

index 878aa24f432e664a935a66bf65b5c63eaf486fb1..ec024f9b02b0c1d6ac8aaf98806e795933072bec 100644 (file)
@@ -19,6 +19,7 @@
 #include "llvm/Module.h"
 #include "llvm/Bytecode/Reader.h"
 #include "Support/CommandLine.h"
+#include "Support/FileUtilities.h"
 #include <cctype>
 
 using namespace llvm;
@@ -96,26 +97,36 @@ void DumpSymbolNameForGlobalValue (GlobalValue &GV) {
 }
 
 void DumpSymbolNamesFromModule (Module *M) {
+  const std::string &Filename = M->getModuleIdentifier ();
+  if (OutputFormat == posix && MultipleFiles) {
+    std::cout << Filename << ":\n";
+  } else if (OutputFormat == bsd && MultipleFiles) {
+    std::cout << "\n" << Filename << ":\n";
+  } else if (OutputFormat == sysv) {
+    std::cout << "\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->gbegin (), M->gend (), DumpSymbolNameForGlobalValue);
 }
 
 void DumpSymbolNamesFromFile (std::string &Filename) {
   std::string ErrorMessage;
-  Module *Result = ParseBytecodeFile(Filename, &ErrorMessage);
-  if (Result) {
-    if (OutputFormat == posix && MultipleFiles) {
-      std::cout << Filename << ":\n";
-    } else if (OutputFormat == bsd && MultipleFiles) {
-      std::cout << "\n" << Filename << ":\n";
-    } else if (OutputFormat == sysv) {
-      std::cout << "\n\nSymbols from " << Filename << ":\n\n"
-                << "Name                  Value   Class        Type"
-                << "         Size   Line  Section\n";
+  if (IsBytecode (Filename)) {
+    Module *Result = ParseBytecodeFile(Filename, &ErrorMessage);
+    if (Result) {
+      DumpSymbolNamesFromModule (Result);
+    } else {
+      std::cerr << ToolName << ": " << Filename << ": " << ErrorMessage << "\n";
     }
-    DumpSymbolNamesFromModule (Result);
-  } else {
-    std::cerr << ToolName << ": " << Filename << ": " << ErrorMessage << "\n";
+  } else if (IsArchive (Filename)) {
+    std::vector<Module *> Modules;
+    if (ReadArchiveFile (Filename, Modules, &ErrorMessage))
+      std::cerr << ToolName << ": " << Filename << ": "
+                << ErrorMessage << "\n";
+    MultipleFiles = true;
+    std::for_each (Modules.begin (), Modules.end (), DumpSymbolNamesFromModule);
   }
 }