Chris Lattner | 03efbe6 | 2003-01-19 18:07:38 +0000 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | # |
| 3 | # Program: RunSafely.sh |
| 4 | # |
| 5 | # Synopsis: This script simply runs another program. If the program works |
| 6 | # correctly, this script has no effect, otherwise it will do things |
| 7 | # like print a stack trace of a core dump. It always returns |
| 8 | # "successful" so that tests will continue to be run. |
| 9 | # |
Chris Lattner | 75e05a9 | 2003-05-11 17:34:14 +0000 | [diff] [blame] | 10 | # This script funnels stdout and stderr from the program into the |
| 11 | # first argument specified, and outputs a <outputfile>.time file which |
| 12 | # contains a timing of the program. |
Chris Lattner | 03efbe6 | 2003-01-19 18:07:38 +0000 | [diff] [blame] | 13 | # |
Chris Lattner | b8f52ba | 2003-05-31 23:16:10 +0000 | [diff] [blame] | 14 | # Syntax: ./RunSafely.sh <ulimit> <stdinfile> <stdoutfile> <program> <args...> |
Chris Lattner | 75e05a9 | 2003-05-11 17:34:14 +0000 | [diff] [blame] | 15 | # |
Chris Lattner | 062b428 | 2003-05-17 22:32:43 +0000 | [diff] [blame] | 16 | ULIMIT=$1 |
| 17 | shift |
Chris Lattner | b8f52ba | 2003-05-31 23:16:10 +0000 | [diff] [blame] | 18 | INFILE=$1 |
| 19 | shift |
Chris Lattner | 75e05a9 | 2003-05-11 17:34:14 +0000 | [diff] [blame] | 20 | OUTFILE=$1 |
| 21 | shift |
Chris Lattner | 03efbe6 | 2003-01-19 18:07:38 +0000 | [diff] [blame] | 22 | PROGRAM=$1 |
| 23 | shift |
| 24 | |
Chris Lattner | 062b428 | 2003-05-17 22:32:43 +0000 | [diff] [blame] | 25 | ulimit -t $ULIMIT |
Chris Lattner | 75e05a9 | 2003-05-11 17:34:14 +0000 | [diff] [blame] | 26 | rm -f core core.* |
Chris Lattner | 3d28352 | 2003-05-11 18:55:29 +0000 | [diff] [blame] | 27 | ulimit -c unlimited |
John Criswell | 5438cb6 | 2003-07-02 20:42:05 +0000 | [diff] [blame^] | 28 | |
| 29 | # |
| 30 | # Run the command, timing its execution. |
| 31 | # The standard output and standard error of $PROGRAM should go in $OUTFILE, |
| 32 | # and the standard error of time should go in $OUTFILE.time. |
| 33 | # |
| 34 | # Ah, the joys of shell programming! |
| 35 | # To get the time program and the specified program different output filenames, |
| 36 | # we tell time to launch a shell which in turn executes $PROGRAM with the |
| 37 | # necessary I/O redirection. |
| 38 | # |
| 39 | (time sh -c "$PROGRAM $* >& $OUTFILE < $INFILE") >& $OUTFILE.time |
| 40 | |
Chris Lattner | ad1959c | 2003-07-01 18:04:43 +0000 | [diff] [blame] | 41 | if test $? -eq 0 |
| 42 | then |
| 43 | touch $OUTFILE.exitok |
| 44 | fi |
| 45 | |
Chris Lattner | 03efbe6 | 2003-01-19 18:07:38 +0000 | [diff] [blame] | 46 | if ls | egrep "^core" > /dev/null |
| 47 | then |
| 48 | corefile=`ls core* | head -1` |
| 49 | echo "where" > StackTrace.$$ |
| 50 | gdb -q -batch --command=StackTrace.$$ --core=$corefile $PROGRAM < /dev/null |
| 51 | rm -f StackTrace.$$ $corefile |
| 52 | fi |
| 53 | |
John Criswell | 5438cb6 | 2003-07-02 20:42:05 +0000 | [diff] [blame^] | 54 | exit 0 |