diff options
author | Brian Gaeke <gaeke@uiuc.edu> | 2003-11-16 23:34:13 +0000 |
---|---|---|
committer | Brian Gaeke <gaeke@uiuc.edu> | 2003-11-16 23:34:13 +0000 |
commit | 747777795f07e9d31f20ef17972df25670d410d1 (patch) | |
tree | 522d3d8851e97fbc2c9e64a8864b42194d9181a9 /llvm | |
parent | 900cc96e08999d1e234bd956ddc741852a0cb8f0 (diff) | |
download | bcm5719-llvm-747777795f07e9d31f20ef17972df25670d410d1.tar.gz bcm5719-llvm-747777795f07e9d31f20ef17972df25670d410d1.zip |
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.
llvm-svn: 10044
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/tools/llvm-nm/llvm-nm.cpp | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp index 878aa24f432..ec024f9b02b 100644 --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/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 <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); } } |