diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2007-02-16 19:11:07 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2007-02-16 19:11:07 +0000 |
commit | 9ba8a76f8baaa1092d60ccfbc04e7efdc207c98f (patch) | |
tree | a4d2b47d47b30c9f7416757f798b092bf1ea6909 /tools/bugpoint/ToolRunner.cpp | |
parent | bdf44b929f6bd0983b0f0df0d2ae66610e81e149 (diff) | |
download | external_llvm-9ba8a76f8baaa1092d60ccfbc04e7efdc207c98f.zip external_llvm-9ba8a76f8baaa1092d60ccfbc04e7efdc207c98f.tar.gz external_llvm-9ba8a76f8baaa1092d60ccfbc04e7efdc207c98f.tar.bz2 |
Add possibility to set memory limit for binaries run via libSystem. This
is especially needed for bugpoint. This partly implements PR688
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34349 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/bugpoint/ToolRunner.cpp')
-rw-r--r-- | tools/bugpoint/ToolRunner.cpp | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/tools/bugpoint/ToolRunner.cpp b/tools/bugpoint/ToolRunner.cpp index 35f27db..150155f 100644 --- a/tools/bugpoint/ToolRunner.cpp +++ b/tools/bugpoint/ToolRunner.cpp @@ -32,7 +32,8 @@ static int RunProgramWithTimeout(const sys::Path &ProgramPath, 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 @@ static int RunProgramWithTimeout(const sys::Path &ProgramPath, } return - sys::Program::ExecuteAndWait(ProgramPath, Args, 0, redirects, NumSeconds); + sys::Program::ExecuteAndWait(ProgramPath, Args, 0, redirects, + NumSeconds, MemoryLimit); } @@ -102,7 +104,8 @@ namespace { 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 @@ int LLI::ExecuteProgram(const std::string &Bytecode, 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 @@ int LLI::ExecuteProgram(const std::string &Bytecode, ); 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 @@ int LLC::ExecuteProgram(const std::string &Bytecode, 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 @@ int LLC::ExecuteProgram(const std::string &Bytecode, // 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 @@ namespace { 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 @@ int JIT::ExecuteProgram(const std::string &Bytecode, 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 @@ int JIT::ExecuteProgram(const std::string &Bytecode, 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 @@ int CBE::ExecuteProgram(const std::string &Bytecode, 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 @@ int CBE::ExecuteProgram(const std::string &Bytecode, 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 @@ int GCC::ExecuteProgram(const std::string &ProgramFile, 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 @@ int GCC::ExecuteProgram(const std::string &ProgramFile, 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, |