diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2004-07-02 03:22:53 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2004-07-02 03:22:53 +0000 |
commit | 8a542aeb8478d53df8dc985972bdc479560ff72f (patch) | |
tree | 0e949c6f933eb49aaf5a97043c8193b113be1980 /tools/llvm-bcanalyzer | |
parent | 452069abccca2a2ea2887220aceeedda8bb6b6d7 (diff) | |
download | external_llvm-8a542aeb8478d53df8dc985972bdc479560ff72f.zip external_llvm-8a542aeb8478d53df8dc985972bdc479560ff72f.tar.gz external_llvm-8a542aeb8478d53df8dc985972bdc479560ff72f.tar.bz2 |
Name Change: llvm-abcd -> llvm-bcanalyzer
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14555 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-bcanalyzer')
-rw-r--r-- | tools/llvm-bcanalyzer/Makefile | 13 | ||||
-rw-r--r-- | tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp | 98 |
2 files changed, 111 insertions, 0 deletions
diff --git a/tools/llvm-bcanalyzer/Makefile b/tools/llvm-bcanalyzer/Makefile new file mode 100644 index 0000000..2608344 --- /dev/null +++ b/tools/llvm-bcanalyzer/Makefile @@ -0,0 +1,13 @@ +##===- tools/llvm-bcanalyzer/Makefile ----------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file was developed by Reid Spencer and is distributed under the +# University of Illinois Open Source License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## +LEVEL = ../.. + +TOOLNAME = llvm-bcanalyzer +USEDLIBS = bcreader vmcore support.a +include $(LEVEL)/Makefile.common diff --git a/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp b/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp new file mode 100644 index 0000000..d0ba73d --- /dev/null +++ b/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp @@ -0,0 +1,98 @@ +//===-- llvm-bcanalyzer.cpp - Byte Code Analyzer --------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by Reid Spencer and is distributed under the +// University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This tool may be invoked in the following manner: +// llvm-bcanalyzer [options] - Read LLVM bytecode from stdin +// llvm-bcanalyzer [options] x.bc - Read LLVM bytecode from the x.bc file +// +// Options: +// --help - Output information about command line switches +// --nodetails - Don't print out detailed informaton about individual +// blocks and functions +// --dump - Dump low-level bytecode structure in readable format +// +// This tool provides analytical information about a bytecode file. It is +// intended as an aid to developers of bytecode reading and writing software. It +// produces on std::out a summary of the bytecode file that shows various +// statistics about the contents of the file. By default this information is +// detailed and contains information about individual bytecode blocks and the +// functions in the module. To avoid this more detailed output, use the +// -nodetails option to limit the output to just module level information. +// The tool is also able to print a bytecode file in a straight forward text +// format that shows the containment and relationships of the information in +// the bytecode file (-dump option). +//===----------------------------------------------------------------------===// + +#include "llvm/Analysis/Verifier.h" +#include "llvm/Bytecode/Analyzer.h" +#include "Support/CommandLine.h" +#include "llvm/System/Signals.h" +#include <fstream> +#include <iostream> + +using namespace llvm; + +static cl::opt<std::string> + InputFilename(cl::Positional, cl::desc("<input bytecode>"), cl::init("-")); + +static cl::opt<bool> NoDetails ("nodetails", cl::desc("Skip detailed output")); +static cl::opt<bool> Dump ("dump", cl::desc("Dump low level bytecode trace")); +static cl::opt<bool> Verify ("verify", cl::desc("Progressively verify module")); + +int +main(int argc, char **argv) +{ + cl::ParseCommandLineOptions(argc, argv, + " llvm-bcanalyzer Analysis of ByteCode Dumper\n"); + + PrintStackTraceOnErrorSignal(); + + std::ostream* Out = &std::cout; // Default to printing to stdout... + std::istream* In = &std::cin; // Default to reading stdin + std::string ErrorMessage; + BytecodeAnalysis bca; + + /// Determine what to generate + bca.dumpBytecode = Dump; + bca.detailedResults = !NoDetails; + bca.progressiveVerify = Verify; + + /// Analyze the bytecode file + Module* M = AnalyzeBytecodeFile(InputFilename, bca, &ErrorMessage); + + // All that bcanalyzer does is write the gathered statistics to the output + PrintBytecodeAnalysis(bca,*Out); + + if ( M && Verify ) { + std::string verificationMsg; + try { + verifyModule( *M, ThrowExceptionAction ); + } catch (std::string& errmsg ) { + verificationMsg = errmsg; + } + if ( verificationMsg.length() > 0 ) + std::cerr << "Final Verification Message: " << verificationMsg << "\n"; + } + + + // If there was an error, print it and stop. + if ( ErrorMessage.size() ) { + std::cerr << argv[0] << ": " << ErrorMessage << "\n"; + return 1; + } + + + if (Out != &std::cout) { + ((std::ofstream*)Out)->close(); + delete Out; + } + return 0; +} + +// vim: sw=2 |