From 1c0b6982d28c910e7555d2c7a98f745f5d701827 Mon Sep 17 00:00:00 2001 From: Brian Gaeke Date: Sun, 16 Nov 2003 23:34:13 +0000 Subject: [PATCH] Include Support/FileUtilities.h. 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 | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/tools/llvm-nm/llvm-nm.cpp b/tools/llvm-nm/llvm-nm.cpp index 878aa24f432..ec024f9b02b 100644 --- a/tools/llvm-nm/llvm-nm.cpp +++ b/tools/llvm-nm/llvm-nm.cpp @@ -19,6 +19,7 @@ #include "llvm/Module.h" #include "llvm/Bytecode/Reader.h" #include "Support/CommandLine.h" +#include "Support/FileUtilities.h" #include 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 Modules; + if (ReadArchiveFile (Filename, Modules, &ErrorMessage)) + std::cerr << ToolName << ": " << Filename << ": " + << ErrorMessage << "\n"; + MultipleFiles = true; + std::for_each (Modules.begin (), Modules.end (), DumpSymbolNamesFromModule); } } -- 2.34.1