For PR351:
* 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.
llvm-svn: 24960
diff --git a/llvm/lib/System/Unix/Program.inc b/llvm/lib/System/Unix/Program.inc
index 8aa0705..47810bd 100644
--- a/llvm/lib/System/Unix/Program.inc
+++ b/llvm/lib/System/Unix/Program.inc
@@ -209,17 +209,22 @@
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;
-
-#else
- throw std::string(
- "Program::ExecuteAndWait not implemented on this platform!\n");
+ result = 0 - WTERMSIG(status);
+#ifdef WCOREDUMP
+ if (WCOREDUMP(status))
+ result |= 0x01000000;
#endif
- return 0;
+ return result;
+#else
+ return -99;
+#endif
+
}
}