mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
llvmc: Make segfault detection work on Win32.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104261 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9da1bf4845
commit
eb0971529d
@ -33,8 +33,27 @@ extern const char* ProgramName;
|
||||
}
|
||||
|
||||
namespace {
|
||||
int ExecuteProgram(const std::string& name,
|
||||
const StrVector& args) {
|
||||
|
||||
void PrintString (const std::string& str) {
|
||||
errs() << str << ' ';
|
||||
}
|
||||
|
||||
void PrintCommand (const std::string& Cmd, const StrVector& Args) {
|
||||
errs() << Cmd << " ";
|
||||
std::for_each(Args.begin(), Args.end(), &PrintString);
|
||||
errs() << '\n';
|
||||
}
|
||||
|
||||
bool IsSegmentationFault (int returnCode) {
|
||||
#ifdef LLVM_ON_WIN32
|
||||
return (returnCode >= 0xc0000000UL)
|
||||
#else
|
||||
return (returnCode < 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
int ExecuteProgram (const std::string& name,
|
||||
const StrVector& args) {
|
||||
sys::Path prog = sys::Program::FindProgramByName(name);
|
||||
|
||||
if (prog.isEmpty()) {
|
||||
@ -69,35 +88,23 @@ namespace {
|
||||
// Invoke the program.
|
||||
int ret = sys::Program::ExecuteAndWait(prog, &argv[0], 0, &redirects[0]);
|
||||
|
||||
if (ret < 0) {
|
||||
const char** B = &argv[0];
|
||||
|
||||
if (IsSegmentationFault(ret)) {
|
||||
errs() << "Segmentation fault:";
|
||||
while (*B)
|
||||
errs() << ' ' << *(B++);
|
||||
errs() << '\n';
|
||||
|
||||
return 1;
|
||||
PrintCommand(name, args);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void print_string (const std::string& str) {
|
||||
errs() << str << ' ';
|
||||
}
|
||||
}
|
||||
|
||||
namespace llvmc {
|
||||
void AppendToGlobalTimeLog(const std::string& cmd, double time);
|
||||
void AppendToGlobalTimeLog (const std::string& cmd, double time);
|
||||
}
|
||||
|
||||
int llvmc::Action::Execute() const {
|
||||
if (DryRun || VerboseMode) {
|
||||
errs() << Command_ << " ";
|
||||
std::for_each(Args_.begin(), Args_.end(), print_string);
|
||||
errs() << '\n';
|
||||
}
|
||||
int llvmc::Action::Execute () const {
|
||||
if (DryRun || VerboseMode)
|
||||
PrintCommand(Command_, Args_);
|
||||
|
||||
if (!DryRun) {
|
||||
if (Time) {
|
||||
sys::TimeValue now = sys::TimeValue::now();
|
||||
|
Loading…
Reference in New Issue
Block a user