blob: f14fcd2435109190530f81b823e8d4a30bd16617 [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
Misha Brukmane9b5cf32003-08-31 17:09:15 +000028# To prevent infinite loops which fill up the disk, specify a limit on size of
Misha Brukmanc3a87352003-08-31 17:10:55 +000029# files being output by the tests. 10 MB should be enough for anybody. ;)
30ulimit -f 10485760
John Criswell5438cb62003-07-02 20:42:05 +000031
32#
John Criswellc335feb2003-07-03 17:50:57 +000033# If we are on a sun4u machine (UltraSparc), then the code we're generating
34# is 64 bit code. In that case, use gdb-64 instead of gdb.
35#
36myarch=`uname -m`
37if [ "$myarch" = "sun4u" ]
38then
39 GDB="gdb-64"
40else
41 GDB=gdb
42fi
43
44#
John Criswell5438cb62003-07-02 20:42:05 +000045# Run the command, timing its execution.
46# The standard output and standard error of $PROGRAM should go in $OUTFILE,
47# and the standard error of time should go in $OUTFILE.time.
48#
49# Ah, the joys of shell programming!
50# To get the time program and the specified program different output filenames,
51# we tell time to launch a shell which in turn executes $PROGRAM with the
52# necessary I/O redirection.
53#
John Criswellc335feb2003-07-03 17:50:57 +000054(time sh -c "$PROGRAM $* > $OUTFILE 2>&1 < $INFILE") > $OUTFILE.time 2>&1
John Criswell5438cb62003-07-02 20:42:05 +000055
Chris Lattnerad1959c2003-07-01 18:04:43 +000056if test $? -eq 0
57then
58 touch $OUTFILE.exitok
59fi
60
Chris Lattner03efbe62003-01-19 18:07:38 +000061if ls | egrep "^core" > /dev/null
62then
63 corefile=`ls core* | head -1`
64 echo "where" > StackTrace.$$
John Criswellc335feb2003-07-03 17:50:57 +000065 $GDB -q -batch --command=StackTrace.$$ --core=$corefile $PROGRAM < /dev/null
Chris Lattner03efbe62003-01-19 18:07:38 +000066 rm -f StackTrace.$$ $corefile
67fi
68
John Criswell5438cb62003-07-02 20:42:05 +000069exit 0