diff options
author | Devang Patel <dpatel@apple.com> | 2008-07-18 23:46:41 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2008-07-18 23:46:41 +0000 |
commit | 5dd66a0bb00b30e492cc4dd332ae54c9c764501a (patch) | |
tree | 0e507d913c39aa8492e9080f3cced3d6711b29ff | |
parent | e330f2df415af5b2f5ffd0db85fa0252fd86fded (diff) | |
download | external_llvm-5dd66a0bb00b30e492cc4dd332ae54c9c764501a.zip external_llvm-5dd66a0bb00b30e492cc4dd332ae54c9c764501a.tar.gz external_llvm-5dd66a0bb00b30e492cc4dd332ae54c9c764501a.tar.bz2 |
If all linker input files are native object files then lto-bugpoint is not useful.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53777 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | tools/lto-bugpoint/LTOBugPoint.cpp | 29 | ||||
-rw-r--r-- | tools/lto-bugpoint/LTOBugPoint.h | 12 | ||||
-rw-r--r-- | tools/lto-bugpoint/Makefile | 2 | ||||
-rw-r--r-- | tools/lto-bugpoint/lto-bugpoint.cpp | 13 |
4 files changed, 48 insertions, 8 deletions
diff --git a/tools/lto-bugpoint/LTOBugPoint.cpp b/tools/lto-bugpoint/LTOBugPoint.cpp index 83ed134..925ab9e 100644 --- a/tools/lto-bugpoint/LTOBugPoint.cpp +++ b/tools/lto-bugpoint/LTOBugPoint.cpp @@ -13,7 +13,12 @@ //===----------------------------------------------------------------------===// #include "LTOBugPoint.h" +#include "llvm/Support/SystemUtils.h" +#include "llvm/System/Path.h" +#include <iostream> +/// LTOBugPoint -- Constructor. Popuate list of linker options and +/// list of linker input files. LTOBugPoint::LTOBugPoint(std::istream &args, std::istream &ins) { // Read linker options. Order is important here. @@ -26,3 +31,27 @@ LTOBugPoint::LTOBugPoint(std::istream &args, std::istream &ins) { while(getline(ins, inFile)) LinkerInputFiles.push_back(inFile); } + +/// findTroubleMakers - Find minimum set of input files that causes error +/// identified by the script. +bool +LTOBugPoint::findTroubleMakers(llvm::SmallVector<std::string, 4> &TroubleMakers, + std::string &Script) { + + // First, build native object files set. + bool bitcodeFileSeen = false; + for(llvm::SmallVector<std::string, 16>::iterator I = LinkerInputFiles.begin(), + E = LinkerInputFiles.end(); I != E; ++I) { + std::string &path = *I; + if (llvm::sys::Path(path.c_str()).isBitcodeFile()) + bitcodeFileSeen = true; + } + + if (!bitcodeFileSeen) { + std::cerr << "lto-bugpoint: Error: Unable to help!"; + std::cerr << " Need at least one input file that contains llvm bitcode\n"; + return false; + } + + return true; +} diff --git a/tools/lto-bugpoint/LTOBugPoint.h b/tools/lto-bugpoint/LTOBugPoint.h index 57b99c1..b73b267 100644 --- a/tools/lto-bugpoint/LTOBugPoint.h +++ b/tools/lto-bugpoint/LTOBugPoint.h @@ -21,10 +21,22 @@ class LTOBugPoint { LTOBugPoint(std::istream &args, std::istream &ins); + /// findTroubleMakers - Find minimum set of input files that causes error + /// identified by the script. + bool findTroubleMakers(llvm::SmallVector<std::string, 4> &TroubleMakers, + std::string &Script); private: /// LinkerInputFiles - This is a list of linker input files. Once populated /// this list is not modified. llvm::SmallVector<std::string, 16> LinkerInputFiles; + + /// LinkerOptions - List of linker command line options. llvm::SmallVector<std::string, 16> LinkerOptions; + /// NativeInputFiles - This is a list of input files that are not llvm + /// bitcode files. The order in this list is important. The a file + /// in LinkerInputFiles at index 4 is a llvm bitcode file then the file + /// at index 4 in NativeInputFiles is corresponding native object file. + llvm::SmallVector<std::string, 16> NativeInputFiles; + }; diff --git a/tools/lto-bugpoint/Makefile b/tools/lto-bugpoint/Makefile index e7f8061..c63eb6b 100644 --- a/tools/lto-bugpoint/Makefile +++ b/tools/lto-bugpoint/Makefile @@ -10,6 +10,8 @@ LEVEL = ../.. TOOLNAME = lto-bugpoint +LINK_COMPONENTS := system + REQUIRES_EH := 1 include $(LEVEL)/Makefile.common diff --git a/tools/lto-bugpoint/lto-bugpoint.cpp b/tools/lto-bugpoint/lto-bugpoint.cpp index 8633415..01adb57 100644 --- a/tools/lto-bugpoint/lto-bugpoint.cpp +++ b/tools/lto-bugpoint/lto-bugpoint.cpp @@ -47,16 +47,13 @@ int main(int argc, char **argv) { // 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; - } - + std::string ValidationScript = argv[3]; LTOBugPoint bugFinder(*LinkerArgsFile, *LinkerInputsFile); + llvm::SmallVector<std::string, 4> TroubleMakers; + if (!bugFinder.findTroubleMakers(TroubleMakers, ValidationScript)) + return 1; + return 0; } catch (const std::string& msg) { std::cerr << argv[0] << ": " << msg << "\n"; |