blob: c3f9679a8cb321c5097563cc1164ec7d3de8a859 [file] [log] [blame]
#!/bin/sh
set -eu
if [ $# -lt 2 ]; then
echo "usage: $0 <timeout> <program> <args...>"
echo
echo " This script simply runs another program under ulimit and always"
echo " returns true. It is used for invoking tools from the LLVM test suite"
echo " Makefiles, where we need them to always return true so that we don't"
echo " abort the test run."
exit 1
fi
# Save a copy of the original arguments in a string before we
# clobber them with the shift command.
TIMEOUT=$1
shift
PROGRAM=$1
shift
SYSTEM=`uname -s`
ULIMITCMD=""
case $SYSTEM in
CYGWIN*)
;;
Darwin*)
# Disable core file emission, the script doesn't find it anyway because it
# is put into /cores.
ULIMITCMD="$ULIMITCMD ulimit -c 0;"
ULIMITCMD="$ULIMITCMD ulimit -t $TIMEOUT;"
# To prevent infinite loops which fill up the disk, specify a limit on size
# of files being output by the tests. 10 MB should be enough for anybody. ;)
ULIMITCMD="$ULIMITCMD ulimit -f 10485760;"
;;
*)
ULIMITCMD="$ULIMITCMD ulimit -t $TIMEOUT;"
ULIMITCMD="$ULIMITCMD ulimit -c unlimited;"
# To prevent infinite loops which fill up the disk, specify a limit on size
# of files being output by the tests. 10 MB should be enough for anybody. ;)
ULIMITCMD="$ULIMITCMD ulimit -f 10485760;"
# virtual memory: 600 MB should be enough for anybody. ;)
ULIMITCMD="$ULIMITCMD ulimit -v 600000;"
esac
if ( ! sh -c "$ULIMITCMD sh -c '$PROGRAM $*'" ); then
echo "warning: command failed: '$PROGRAM $*'"
fi
# Always return "successful" so that tests will continue to be run.
exit 0