From 4d5aad2d99233fdee38cbbf844f65b7a74073954 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 6 May 2007 05:36:18 +0000 Subject: [PATCH] add bitcode reading support to llvm-nm git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36847 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/llvm-nm/Makefile | 3 +-- tools/llvm-nm/llvm-nm.cpp | 54 +++++++++++++++++++++++---------------- 2 files changed, 33 insertions(+), 24 deletions(-) diff --git a/tools/llvm-nm/Makefile b/tools/llvm-nm/Makefile index 5e18c4a1629..42233c78943 100644 --- a/tools/llvm-nm/Makefile +++ b/tools/llvm-nm/Makefile @@ -9,7 +9,6 @@ LEVEL = ../.. TOOLNAME = llvm-nm -LINK_COMPONENTS = archive bcreader -REQUIRES_EH := 1 +LINK_COMPONENTS = archive bcreader bitreader include $(LEVEL)/Makefile.common diff --git a/tools/llvm-nm/llvm-nm.cpp b/tools/llvm-nm/llvm-nm.cpp index d195f700831..5b98be7056c 100644 --- a/tools/llvm-nm/llvm-nm.cpp +++ b/tools/llvm-nm/llvm-nm.cpp @@ -17,19 +17,22 @@ //===----------------------------------------------------------------------===// #include "llvm/Module.h" +#include "llvm/Bitcode/ReaderWriter.h" #include "llvm/Bytecode/Reader.h" #include "llvm/Bytecode/Archive.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/ManagedStatic.h" +#include "llvm/Support/MemoryBuffer.h" #include "llvm/System/Signals.h" #include #include #include #include #include - using namespace llvm; +cl::opt Bitcode("bitcode"); + namespace { enum OutputFormatTy { bsd, sysv, posix }; cl::opt @@ -132,6 +135,20 @@ static void DumpSymbolNamesFromFile(std::string &Filename) { std::cerr << ToolName << ": " << Filename << ": " << ErrorMessage << "\n"; return; } + } else if (aPath.isBitcodeFile()) { + std::auto_ptr Buffer( + MemoryBuffer::getFileOrSTDIN(&Filename[0], Filename.size())); + Module *Result = 0; + if (Buffer.get()) + Result = ParseBitcodeFile(Buffer.get(), &ErrorMessage); + + if (Result) + DumpSymbolNamesFromModule(Result); + else { + std::cerr << ToolName << ": " << Filename << ": " << ErrorMessage << "\n"; + return; + } + } else if (aPath.isArchive()) { std::string ErrMsg; Archive* archive = Archive::OpenAndLoad(sys::Path(Filename), &ErrorMessage); @@ -153,27 +170,20 @@ static void DumpSymbolNamesFromFile(std::string &Filename) { int main(int argc, char **argv) { llvm_shutdown_obj X; // Call llvm_shutdown() on exit. - try { - cl::ParseCommandLineOptions(argc, argv, " llvm symbol table dumper\n"); - sys::PrintStackTraceOnErrorSignal(); - - ToolName = argv[0]; - if (BSDFormat) OutputFormat = bsd; - if (POSIXFormat) OutputFormat = posix; - - switch (InputFilenames.size()) { - case 0: InputFilenames.push_back("-"); - case 1: break; - default: MultipleFiles = true; - } + cl::ParseCommandLineOptions(argc, argv, " llvm symbol table dumper\n"); + sys::PrintStackTraceOnErrorSignal(); - std::for_each (InputFilenames.begin (), InputFilenames.end (), - DumpSymbolNamesFromFile); - return 0; - } catch (const std::string& msg) { - std::cerr << argv[0] << ": " << msg << "\n"; - } catch (...) { - std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n"; + ToolName = argv[0]; + if (BSDFormat) OutputFormat = bsd; + if (POSIXFormat) OutputFormat = posix; + + switch (InputFilenames.size()) { + case 0: InputFilenames.push_back("-"); + case 1: break; + default: MultipleFiles = true; } - return 1; + + std::for_each(InputFilenames.begin(), InputFilenames.end(), + DumpSymbolNamesFromFile); + return 0; } -- 2.34.1