[llvm-commits] CVS: llvm/tools/bugpoint/BugDriver.cpp BugDriver.h ExecutionDriver.cpp OptimizerDriver.cpp ToolRunner.cpp ToolRunner.h bugpoint.cpp
Anton Korobeynikov
asl at math.spbu.ru
Fri Feb 16 11:11:50 PST 2007
Changes in directory llvm/tools/bugpoint:
BugDriver.cpp updated: 1.50 -> 1.51
BugDriver.h updated: 1.47 -> 1.48
ExecutionDriver.cpp updated: 1.68 -> 1.69
OptimizerDriver.cpp updated: 1.49 -> 1.50
ToolRunner.cpp updated: 1.60 -> 1.61
ToolRunner.h updated: 1.23 -> 1.24
bugpoint.cpp updated: 1.35 -> 1.36
---
Log message:
Add possibility to set memory limit for binaries run via libSystem. This
is especially needed for bugpoint. This partly implements PR688: http://llvm.org/PR688
---
Diffs of the changes: (+46 -25)
BugDriver.cpp | 4 ++--
BugDriver.h | 3 ++-
ExecutionDriver.cpp | 4 ++--
OptimizerDriver.cpp | 3 ++-
ToolRunner.cpp | 39 +++++++++++++++++++++++++--------------
ToolRunner.h | 12 ++++++++----
bugpoint.cpp | 6 +++++-
7 files changed, 46 insertions(+), 25 deletions(-)
Index: llvm/tools/bugpoint/BugDriver.cpp
diff -u llvm/tools/bugpoint/BugDriver.cpp:1.50 llvm/tools/bugpoint/BugDriver.cpp:1.51
--- llvm/tools/bugpoint/BugDriver.cpp:1.50 Wed Feb 7 15:41:02 2007
+++ llvm/tools/bugpoint/BugDriver.cpp Fri Feb 16 13:11:06 2007
@@ -64,10 +64,10 @@
}
BugDriver::BugDriver(const char *toolname, bool as_child, bool find_bugs,
- unsigned timeout)
+ unsigned timeout, unsigned memlimit)
: ToolName(toolname), ReferenceOutputFile(OutputFile),
Program(0), Interpreter(0), cbe(0), gcc(0), run_as_child(as_child),
- run_find_bugs(find_bugs), Timeout(timeout) {}
+ run_find_bugs(find_bugs), Timeout(timeout), MemoryLimit(memlimit) {}
/// ParseInputFile - Given a bytecode or assembly input filename, parse and
Index: llvm/tools/bugpoint/BugDriver.h
diff -u llvm/tools/bugpoint/BugDriver.h:1.47 llvm/tools/bugpoint/BugDriver.h:1.48
--- llvm/tools/bugpoint/BugDriver.h:1.47 Wed Oct 25 13:36:14 2006
+++ llvm/tools/bugpoint/BugDriver.h Fri Feb 16 13:11:07 2007
@@ -50,6 +50,7 @@
bool run_as_child;
bool run_find_bugs;
unsigned Timeout;
+ unsigned MemoryLimit;
// FIXME: sort out public/private distinctions...
friend class ReducePassList;
@@ -57,7 +58,7 @@
public:
BugDriver(const char *toolname, bool as_child, bool find_bugs,
- unsigned timeout);
+ unsigned timeout, unsigned memlimit);
const std::string &getToolName() const { return ToolName; }
Index: llvm/tools/bugpoint/ExecutionDriver.cpp
diff -u llvm/tools/bugpoint/ExecutionDriver.cpp:1.68 llvm/tools/bugpoint/ExecutionDriver.cpp:1.69
--- llvm/tools/bugpoint/ExecutionDriver.cpp:1.68 Tue Nov 28 01:04:10 2006
+++ llvm/tools/bugpoint/ExecutionDriver.cpp Fri Feb 16 13:11:07 2007
@@ -263,11 +263,11 @@
InterpreterSel == CBE_bug)
RetVal = AI->ExecuteProgram(BytecodeFile, InputArgv, InputFile,
OutputFile, AdditionalLinkerArgs, SharedObjs,
- Timeout);
+ Timeout, MemoryLimit);
else
RetVal = AI->ExecuteProgram(BytecodeFile, InputArgv, InputFile,
OutputFile, std::vector<std::string>(),
- SharedObjs, Timeout);
+ SharedObjs, Timeout, MemoryLimit);
if (RetVal == -1) {
std::cerr << "<timeout>";
Index: llvm/tools/bugpoint/OptimizerDriver.cpp
diff -u llvm/tools/bugpoint/OptimizerDriver.cpp:1.49 llvm/tools/bugpoint/OptimizerDriver.cpp:1.50
--- llvm/tools/bugpoint/OptimizerDriver.cpp:1.49 Sun Jan 21 00:31:25 2007
+++ llvm/tools/bugpoint/OptimizerDriver.cpp Fri Feb 16 13:11:07 2007
@@ -194,7 +194,8 @@
prog = sys::Program::FindProgramByName("valgrind");
else
prog = tool;
- int result = sys::Program::ExecuteAndWait(prog,args,0,0,Timeout,&ErrMsg);
+ int result = sys::Program::ExecuteAndWait(prog, args, 0, 0,
+ Timeout, MemoryLimit, &ErrMsg);
// If we are supposed to delete the bytecode file or if the passes crashed,
// remove it now. This may fail if the file was never created, but that's ok.
Index: llvm/tools/bugpoint/ToolRunner.cpp
diff -u llvm/tools/bugpoint/ToolRunner.cpp:1.60 llvm/tools/bugpoint/ToolRunner.cpp:1.61
--- llvm/tools/bugpoint/ToolRunner.cpp:1.60 Wed Jan 3 01:44:30 2007
+++ llvm/tools/bugpoint/ToolRunner.cpp Fri Feb 16 13:11:07 2007
@@ -32,7 +32,8 @@
const sys::Path &StdInFile,
const sys::Path &StdOutFile,
const sys::Path &StdErrFile,
- unsigned NumSeconds = 0) {
+ unsigned NumSeconds = 0,
+ unsigned MemoryLimit = 0) {
const sys::Path* redirects[3];
redirects[0] = &StdInFile;
redirects[1] = &StdOutFile;
@@ -46,7 +47,8 @@
}
return
- sys::Program::ExecuteAndWait(ProgramPath, Args, 0, redirects, NumSeconds);
+ sys::Program::ExecuteAndWait(ProgramPath, Args, 0, redirects,
+ NumSeconds, MemoryLimit);
}
@@ -102,7 +104,8 @@
const std::vector<std::string> &GCCArgs,
const std::vector<std::string> &SharedLibs =
std::vector<std::string>(),
- unsigned Timeout = 0);
+ unsigned Timeout = 0,
+ unsigned MemoryLimit = 0);
};
}
@@ -112,7 +115,8 @@
const std::string &OutputFile,
const std::vector<std::string> &GCCArgs,
const std::vector<std::string> &SharedLibs,
- unsigned Timeout) {
+ unsigned Timeout,
+ unsigned MemoryLimit) {
if (!SharedLibs.empty())
throw ToolExecutionError("LLI currently does not support "
"loading shared libraries.");
@@ -142,7 +146,7 @@
);
return RunProgramWithTimeout(sys::Path(LLIPath), &LLIArgs[0],
sys::Path(InputFile), sys::Path(OutputFile), sys::Path(OutputFile),
- Timeout);
+ Timeout, MemoryLimit);
}
// LLI create method - Try to find the LLI executable
@@ -209,7 +213,8 @@
const std::string &OutputFile,
const std::vector<std::string> &ArgsForGCC,
const std::vector<std::string> &SharedLibs,
- unsigned Timeout) {
+ unsigned Timeout,
+ unsigned MemoryLimit) {
sys::Path OutputAsmFile;
OutputCode(Bytecode, OutputAsmFile);
@@ -220,7 +225,8 @@
// Assuming LLC worked, compile the result with GCC and run it.
return gcc->ExecuteProgram(OutputAsmFile.toString(), Args, GCC::AsmFile,
- InputFile, OutputFile, GCCArgs, Timeout);
+ InputFile, OutputFile, GCCArgs,
+ Timeout, MemoryLimit);
}
/// createLLC - Try to find the LLC executable
@@ -265,7 +271,8 @@
std::vector<std::string>(),
const std::vector<std::string> &SharedLibs =
std::vector<std::string>(),
- unsigned Timeout =0 );
+ unsigned Timeout =0,
+ unsigned MemoryLimit =0);
};
}
@@ -275,7 +282,8 @@
const std::string &OutputFile,
const std::vector<std::string> &GCCArgs,
const std::vector<std::string> &SharedLibs,
- unsigned Timeout) {
+ unsigned Timeout,
+ unsigned MemoryLimit) {
if (!GCCArgs.empty())
throw ToolExecutionError("JIT does not support GCC Arguments.");
// Construct a vector of parameters, incorporating those from the command-line
@@ -306,7 +314,7 @@
DEBUG(std::cerr << "\nSending output to " << OutputFile << "\n");
return RunProgramWithTimeout(sys::Path(LLIPath), &JITArgs[0],
sys::Path(InputFile), sys::Path(OutputFile), sys::Path(OutputFile),
- Timeout);
+ Timeout, MemoryLimit);
}
/// createJIT - Try to find the LLI executable
@@ -370,7 +378,8 @@
const std::string &OutputFile,
const std::vector<std::string> &ArgsForGCC,
const std::vector<std::string> &SharedLibs,
- unsigned Timeout) {
+ unsigned Timeout,
+ unsigned MemoryLimit) {
sys::Path OutputCFile;
OutputCode(Bytecode, OutputCFile);
@@ -379,7 +388,8 @@
std::vector<std::string> GCCArgs(ArgsForGCC);
GCCArgs.insert(GCCArgs.end(),SharedLibs.begin(),SharedLibs.end());
return gcc->ExecuteProgram(OutputCFile.toString(), Args, GCC::CFile,
- InputFile, OutputFile, GCCArgs, Timeout);
+ InputFile, OutputFile, GCCArgs,
+ Timeout, MemoryLimit);
}
/// createCBE - Try to find the 'llc' executable
@@ -412,7 +422,8 @@
const std::string &InputFile,
const std::string &OutputFile,
const std::vector<std::string> &ArgsForGCC,
- unsigned Timeout ) {
+ unsigned Timeout,
+ unsigned MemoryLimit) {
std::vector<const char*> GCCArgs;
GCCArgs.push_back(GCCPath.c_str());
@@ -488,7 +499,7 @@
FileRemover OutputBinaryRemover(OutputBinary);
return RunProgramWithTimeout(OutputBinary, &ProgramArgs[0],
sys::Path(InputFile), sys::Path(OutputFile), sys::Path(OutputFile),
- Timeout);
+ Timeout, MemoryLimit);
}
int GCC::MakeSharedObject(const std::string &InputFile, FileType fileType,
Index: llvm/tools/bugpoint/ToolRunner.h
diff -u llvm/tools/bugpoint/ToolRunner.h:1.23 llvm/tools/bugpoint/ToolRunner.h:1.24
--- llvm/tools/bugpoint/ToolRunner.h:1.23 Fri Sep 15 16:29:15 2006
+++ llvm/tools/bugpoint/ToolRunner.h Fri Feb 16 13:11:07 2007
@@ -64,7 +64,8 @@
const std::string &OutputFile,
const std::vector<std::string> &GCCArgs =
std::vector<std::string>(),
- unsigned Timeout = 0);
+ unsigned Timeout = 0,
+ unsigned MemoryLimit = 0);
/// MakeSharedObject - This compiles the specified file (which is either a .c
/// file or a .s file) into a shared object.
@@ -124,7 +125,8 @@
std::vector<std::string>(),
const std::vector<std::string> &SharedLibs =
std::vector<std::string>(),
- unsigned Timeout = 0) = 0;
+ unsigned Timeout = 0,
+ unsigned MemoryLimit = 0) = 0;
};
//===---------------------------------------------------------------------===//
@@ -156,7 +158,8 @@
std::vector<std::string>(),
const std::vector<std::string> &SharedLibs =
std::vector<std::string>(),
- unsigned Timeout = 0);
+ unsigned Timeout = 0,
+ unsigned MemoryLimit = 0);
/// OutputCode - Compile the specified program from bytecode to code
/// understood by the GCC driver (either C or asm). If the code generator
@@ -196,7 +199,8 @@
std::vector<std::string>(),
const std::vector<std::string> &SharedLibs =
std::vector<std::string>(),
- unsigned Timeout = 0);
+ unsigned Timeout = 0,
+ unsigned MemoryLimit = 0);
virtual GCC::FileType OutputCode(const std::string &Bytecode,
sys::Path &OutFile);
Index: llvm/tools/bugpoint/bugpoint.cpp
diff -u llvm/tools/bugpoint/bugpoint.cpp:1.35 llvm/tools/bugpoint/bugpoint.cpp:1.36
--- llvm/tools/bugpoint/bugpoint.cpp:1.35 Tue Dec 5 19:18:00 2006
+++ llvm/tools/bugpoint/bugpoint.cpp Fri Feb 16 13:11:07 2007
@@ -46,6 +46,10 @@
cl::desc("Number of seconds program is allowed to run before it "
"is killed (default is 300s), 0 disables timeout"));
+static cl::opt<unsigned>
+MemoryLimit("mlimit", cl::init(100), cl::value_desc("MBytes"),
+ cl::desc("Maximum amount of memory to use. 0 disables check."));
+
// The AnalysesList is automatically populated with registered Passes by the
// PassNameParser.
//
@@ -68,7 +72,7 @@
sys::PrintStackTraceOnErrorSignal();
sys::SetInterruptFunction(BugpointInterruptFunction);
- BugDriver D(argv[0],AsChild,FindBugs,TimeoutValue);
+ BugDriver D(argv[0], AsChild, FindBugs, TimeoutValue, MemoryLimit);
if (D.addSources(InputFilenames)) return 1;
D.addPasses(PassList.begin(), PassList.end());
More information about the llvm-commits
mailing list