blob: 8875f2e1ca47ec8bbc382cd13934a899005826ab [file] [log] [blame]
Chris Lattner03efbe62003-01-19 18:07:38 +00001#!/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 Lattner75e05a92003-05-11 17:34:14 +000010# 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 Lattner03efbe62003-01-19 18:07:38 +000013#
Chris Lattnerb8f52ba2003-05-31 23:16:10 +000014# Syntax: ./RunSafely.sh <ulimit> <stdinfile> <stdoutfile> <program> <args...>
Chris Lattner75e05a92003-05-11 17:34:14 +000015#
Chris Lattner062b4282003-05-17 22:32:43 +000016ULIMIT=$1
17shift
Chris Lattnerb8f52ba2003-05-31 23:16:10 +000018INFILE=$1
19shift
Chris Lattner75e05a92003-05-11 17:34:14 +000020OUTFILE=$1
21shift
Chris Lattner03efbe62003-01-19 18:07:38 +000022PROGRAM=$1
23shift
24
Chris Lattner062b4282003-05-17 22:32:43 +000025ulimit -t $ULIMIT
Chris Lattner75e05a92003-05-11 17:34:14 +000026rm -f core core.*
Chris Lattner3d283522003-05-11 18:55:29 +000027ulimit -c unlimited
John Criswell5438cb62003-07-02 20:42:05 +000028
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 Lattnerad1959c2003-07-01 18:04:43 +000041if test $? -eq 0
42then
43 touch $OUTFILE.exitok
44fi
45
Chris Lattner03efbe62003-01-19 18:07:38 +000046if ls | egrep "^core" > /dev/null
47then
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
52fi
53
John Criswell5438cb62003-07-02 20:42:05 +000054exit 0