From 80becf194d56524e8c75618ac57a34520f87a684 Mon Sep 17 00:00:00 2001 From: David Goodwin Date: Fri, 10 Jul 2009 21:39:28 +0000 Subject: [PATCH] Support remote execute for ARM. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75292 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/bugpoint/BugDriver.cpp | 2 +- tools/bugpoint/ExecutionDriver.cpp | 7 ++++--- tools/bugpoint/Miscompilation.cpp | 4 ++-- tools/bugpoint/ToolRunner.cpp | 31 +++++++++++++++++++++++++++++- 4 files changed, 37 insertions(+), 7 deletions(-) diff --git a/tools/bugpoint/BugDriver.cpp b/tools/bugpoint/BugDriver.cpp index aab50720c6e..269bf5fb095 100644 --- a/tools/bugpoint/BugDriver.cpp +++ b/tools/bugpoint/BugDriver.cpp @@ -205,7 +205,7 @@ bool BugDriver::run() { std::cout << "*** Checking the code generator...\n"; try { if (!diffProgram()) { - std::cout << "\n*** Debugging miscompilation!\n"; + std::cout << "\n*** Output matches: Debugging miscompilation!\n"; return debugMiscompilation(); } } catch (ToolExecutionError &TEE) { diff --git a/tools/bugpoint/ExecutionDriver.cpp b/tools/bugpoint/ExecutionDriver.cpp index 640fe2829ae..854aeb817f9 100644 --- a/tools/bugpoint/ExecutionDriver.cpp +++ b/tools/bugpoint/ExecutionDriver.cpp @@ -457,9 +457,10 @@ bool BugDriver::diffProgram(const std::string &BitcodeFile, } FilesDifferent = true; } - - // Remove the generated output. - Output.eraseFromDisk(); + else { + // Remove the generated output if there are no differences. + Output.eraseFromDisk(); + } // Remove the bitcode file if we are supposed to. if (RemoveBitcode) diff --git a/tools/bugpoint/Miscompilation.cpp b/tools/bugpoint/Miscompilation.cpp index 21e141243b3..785abb92405 100644 --- a/tools/bugpoint/Miscompilation.cpp +++ b/tools/bugpoint/Miscompilation.cpp @@ -57,7 +57,7 @@ ReduceMiscompilingPasses::doTest(std::vector &Prefix, // First, run the program with just the Suffix passes. If it is still broken // with JUST the kept passes, discard the prefix passes. std::cout << "Checking to see if '" << getPassesString(Suffix) - << "' compile correctly: "; + << "' compiles correctly: "; std::string BitcodeResult; if (BD.runPasses(Suffix, BitcodeResult, false/*delete*/, true/*quiet*/)) { @@ -85,7 +85,7 @@ ReduceMiscompilingPasses::doTest(std::vector &Prefix, // Next, see if the program is broken if we run the "prefix" passes first, // then separately run the "kept" passes. std::cout << "Checking to see if '" << getPassesString(Prefix) - << "' compile correctly: "; + << "' compiles correctly: "; // If it is not broken with the kept passes, it's possible that the prefix // passes must be run before the kept passes to break it. If the program diff --git a/tools/bugpoint/ToolRunner.cpp b/tools/bugpoint/ToolRunner.cpp index 978e60bed38..7087cdd3d1c 100644 --- a/tools/bugpoint/ToolRunner.cpp +++ b/tools/bugpoint/ToolRunner.cpp @@ -32,6 +32,10 @@ namespace { RemoteHost("remote-host", cl::desc("Remote execution (rsh/ssh) host")); + cl::opt + RemotePort("remote-port", + cl::desc("Remote execution (rsh/ssh) port")); + cl::opt RemoteUser("remote-user", cl::desc("Remote execution (rsh/ssh) user id")); @@ -538,6 +542,23 @@ CBE *AbstractInterpreter::createCBE(const std::string &ProgramPath, //===---------------------------------------------------------------------===// // GCC abstraction // + +static bool +IsARMArchitecture(std::vector Args) +{ + for (std::vector::const_iterator + I = Args.begin(), E = Args.end(); I != E; ++I) { + if (!strcasecmp(I->c_str(), "-arch")) { + ++I; + if ((I != E) && !strncasecmp(I->c_str(), "arm", strlen("arm"))) { + return true; + } + } + } + + return false; +} + int GCC::ExecuteProgram(const std::string &ProgramFile, const std::vector &Args, FileType fileType, @@ -562,7 +583,11 @@ int GCC::ExecuteProgram(const std::string &ProgramFile, } else { GCCArgs.push_back("assembler"); #ifdef __APPLE__ - GCCArgs.push_back("-force_cpusubtype_ALL"); + // For ARM architectures we don't want this flag. bugpoint isn't + // explicitly told what architecture it is working on, so we get + // it from gcc flags + if (!IsARMArchitecture(ArgsForGCC)) + GCCArgs.push_back("-force_cpusubtype_ALL"); #endif } GCCArgs.push_back(ProgramFile.c_str()); // Specify the input filename... @@ -615,6 +640,10 @@ int GCC::ExecuteProgram(const std::string &ProgramFile, ProgramArgs.push_back(RemoteHost.c_str()); ProgramArgs.push_back("-l"); ProgramArgs.push_back(RemoteUser.c_str()); + if (!RemotePort.empty()) { + ProgramArgs.push_back("-p"); + ProgramArgs.push_back(RemotePort.c_str()); + } if (!RemoteExtra.empty()) { ProgramArgs.push_back(RemoteExtra.c_str()); } -- 2.34.1