* Allow the ExecuteAndWait to return negative values if a signal is
detected as the reason for the child termination. This is needed to
support bugpoint detecting bad things in its child processes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24960
91177308-0d34-0410-b5e6-
96231b3b80d8
sigaction(SIGALRM, &Old, 0);
}
- // If the program exited normally with a zero exit status, return success!
+ // Return the proper exit status. 0=success, >0 is programs' exit status,
+ // <0 means a signal was returned, -9999999 means the program dumped core.
+ int result = 0;
if (WIFEXITED (status))
- return WEXITSTATUS(status);
+ result = WEXITSTATUS(status);
else if (WIFSIGNALED(status))
- return 1;
-
+ result = 0 - WTERMSIG(status);
+#ifdef WCOREDUMP
+ if (WCOREDUMP(status))
+ result |= 0x01000000;
+#endif
+ return result;
#else
- throw std::string(
- "Program::ExecuteAndWait not implemented on this platform!\n");
+ return -99;
#endif
- return 0;
+
}
}