From 8e450f07ade3acd6be83ab4b8708be814035640f Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Fri, 18 Jul 2008 22:59:45 +0000 Subject: Start writing lto-bugpoint tool. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53774 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/lto-bugpoint/LTOBugPoint.cpp | 28 ++++++++++++++++ tools/lto-bugpoint/LTOBugPoint.h | 30 +++++++++++++++++ tools/lto-bugpoint/Makefile | 15 +++++++++ tools/lto-bugpoint/lto-bugpoint.cpp | 67 +++++++++++++++++++++++++++++++++++++ 4 files changed, 140 insertions(+) create mode 100644 tools/lto-bugpoint/LTOBugPoint.cpp create mode 100644 tools/lto-bugpoint/LTOBugPoint.h create mode 100644 tools/lto-bugpoint/Makefile create mode 100644 tools/lto-bugpoint/lto-bugpoint.cpp (limited to 'tools') diff --git a/tools/lto-bugpoint/LTOBugPoint.cpp b/tools/lto-bugpoint/LTOBugPoint.cpp new file mode 100644 index 0000000000..83ed134816 --- /dev/null +++ b/tools/lto-bugpoint/LTOBugPoint.cpp @@ -0,0 +1,28 @@ +//===- LTOBugPoint.cpp - Top-Level LTO BugPoint class ---------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This class contains all of the shared state and information that is used by +// the LTO BugPoint tool to track down bit code files that cause errors. +// +//===----------------------------------------------------------------------===// + +#include "LTOBugPoint.h" + +LTOBugPoint::LTOBugPoint(std::istream &args, std::istream &ins) { + + // Read linker options. Order is important here. + std::string option; + while (getline(args, option)) + LinkerOptions.push_back(option); + + // Read linker input files. Order is important here. + std::string inFile; + while(getline(ins, inFile)) + LinkerInputFiles.push_back(inFile); +} diff --git a/tools/lto-bugpoint/LTOBugPoint.h b/tools/lto-bugpoint/LTOBugPoint.h new file mode 100644 index 0000000000..57b99c15f2 --- /dev/null +++ b/tools/lto-bugpoint/LTOBugPoint.h @@ -0,0 +1,30 @@ +//===- LTOBugPoint.h - Top-Level LTO BugPoint class -------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This class contains all of the shared state and information that is used by +// the LTO BugPoint tool to track down bit code files that cause errors. +// +//===----------------------------------------------------------------------===// + +#include "llvm/ADT/SmallVector.h" +#include +#include + +class LTOBugPoint { + public: + + LTOBugPoint(std::istream &args, std::istream &ins); + + private: + /// LinkerInputFiles - This is a list of linker input files. Once populated + /// this list is not modified. + llvm::SmallVector LinkerInputFiles; + llvm::SmallVector LinkerOptions; + +}; diff --git a/tools/lto-bugpoint/Makefile b/tools/lto-bugpoint/Makefile new file mode 100644 index 0000000000..e7f8061b0d --- /dev/null +++ b/tools/lto-bugpoint/Makefile @@ -0,0 +1,15 @@ +##===- tools/lto-bugpoint/Makefile -------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## +LEVEL = ../.. + +TOOLNAME = lto-bugpoint + +REQUIRES_EH := 1 + +include $(LEVEL)/Makefile.common diff --git a/tools/lto-bugpoint/lto-bugpoint.cpp b/tools/lto-bugpoint/lto-bugpoint.cpp new file mode 100644 index 0000000000..8633415d65 --- /dev/null +++ b/tools/lto-bugpoint/lto-bugpoint.cpp @@ -0,0 +1,67 @@ +//===- lto-bugpoing.cpp - The lto-bugpoint driver -------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// lto-bugpoint tool identifies minmal set of bitcode files that is causing +// failure when Link Time Optimization is enabled. The failure is identified +// using developer provided validation script. +// +//===----------------------------------------------------------------------===// + +#include "LTOBugPoint.h" +#include +#include + +int main(int argc, char **argv) { + try { + + if (argc != 4) { + std::cerr << "Invalid number of lto-bugpoint arguments!\n"; + return 1; + } + + std::ios::openmode input_mode = std::ios::in; + + // First argument is linker command line options file. This text file + // is a list of linker command line options, one option per line. + // First line always list the absolute path to invoke the linker. + std::istream *LinkerArgsFile = new std::ifstream(argv[1], input_mode); + if (!LinkerArgsFile->good()) { + std::cerr << argv[0] << ": error opening " << argv[1] << "!\n"; + return 1; + } + + // Second argment is a text file that includes the linker input + // file paths, one input file path per line. + std::istream *LinkerInputsFile = new std::ifstream(argv[2], input_mode); + if (!LinkerInputsFile->good()) { + std::cerr << argv[0] << ": error opening " << argv[2] << "!\n"; + delete LinkerArgsFile; + return 1; + } + + // Third argument is absolute path to the validation script. This + // script is used to validate LTO error under investigation. + std::istream *ValidationScriptFile = new std::ifstream(argv[3], input_mode); + if (!ValidationScriptFile->good()) { + std::cerr << argv[0] << ": error opening " << argv[3] << "!\n"; + delete LinkerArgsFile; + delete LinkerInputsFile; + return 1; + } + + LTOBugPoint bugFinder(*LinkerArgsFile, *LinkerInputsFile); + + return 0; + } catch (const std::string& msg) { + std::cerr << argv[0] << ": " << msg << "\n"; + } catch (...) { + std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n"; + } + return 1; +} -- cgit v1.2.3