Files
rtems/c/src/lib/libbsp/sparc/erc32/tools/runtest.in
Joel Sherrill b3a6713265 2001-08-16 Joel Sherrill <joel@OARcorp.com>
* src/mqueuesendsupp.c: Account for possibly blocking during the
	core send operation.


2001-08-16	Joel Sherrill <joel@OARcorp.com>

	* src/msgqsubmit.c: Add a comment indicating that we do not have
	to account for possibly blocking during the core send operation
	because Classic API message queue send is always non-blocking.

2001-08-16	Joel Sherrill <joel@OARcorp.com>

	* include/rtems/score/coremsg.h, src/coremsgsubmit.c: Add a new
	return status to account for blocking sends.  Otherwise, the
	caller will think that the returned message status will have
	the ultimate results of the operation.  If the send times out,
	the final status will be in the return_code of the thread.

2001-08-16      Joel Sherrill <joel@OARcorp.com>

        * src/coremutexsurrender.c: Use holder thread not executing
        thread because even though they may and often are the same
        it is not guaranteed unless the proper attribute is set.

2001-08-16      Joel Sherrill <joel@OARcorp.com>

        * startup/linkcmds: Modified to work better with gcc 2.8.1 and
        gnat 3.13p.

2001-08-16      Joel Sherrill <joel@OARcorp.com>

        * tools/runtest.in: Recognize debug variant of monitor test.


2001-08-16      Joel Sherrill <joel@OARcorp.com>

        * sp13/sp13.scn: Id in screen had wrong class field value.
        * sp13/system.h: Account for message buffer memory.
        * sp13/task2.c: Remove unnecessary check for failure.

2001-08-16      Joel Sherrill <joel@OARcorp.com>

        * sp20/system.h: Account for extra task stacks properly.


2001-08-16      Joel Sherrill <joel@OARcorp.com>

        * include/tmacros.h: Attempt to print errno as further information.
2001-08-16 21:36:15 +00:00

313 lines
6.4 KiB
Plaintext

#!@KSH@ -p
#
# $Id$
#
# Run rtems tests on the hppa simulator
# This program generates a simulator script to run each test
# Typically the test is then run, although it can be generated
# and left as a file using -s
#
# progname=`basename $0`
progname=${0##*/} # fast basename hack for ksh, bash
USAGE=\
"usage: $progname [ -opts ] test [ test ... ]
-o options -- specify options to be passed to simulator
-v -- verbose
-s -- generate script file (as 'test'.ss) and exit
-l logdir -- specify log directory (default is 'logdir')
Specify test as 'test' or 'test.exe'.
All multiprocessing tests *must* be specified simply as 'mp01', etc.
"
# export everything
set -a
# log an error to stderr
prerr()
{
echo "$*" >&2
}
fatal() {
[ "$1" ] && prerr $*
prerr "$USAGE"
exit 1
}
warn() {
[ "$1" ] && prerr $*
}
# print args, 1 per line
ml_echo()
{
for l
do
echo "$l"
done
}
# run at normal and signalled exit
test_exit()
{
exit_code=$1
rm -f ${statfile}* ${scriptfile}* ${logfile}.tmp*
[ "$sim_pid" ] && kill -9 $sim_pid
exit $exit_code
}
#
# process the options
#
# defaults for getopt vars
#
# max_run_time is defaulted to 5 minutes
#
verbose=""
extra_options=""
script_and_exit=""
stdio_setup="yes"
run_to_completion="yes"
logdir=log
update_on_tick="no"
max_run_time=$((5 * 60))
using_print_buffer="yes"
while getopts vhr12o:c:sl:t OPT
do
case "$OPT" in
v)
verbose="yes";;
s)
script_and_exit="yes"
run_to_completion="no"
stdio_setup="no";;
l)
logdir="$OPTARG";;
o)
extra_options="$OPTARG";;
*)
fatal;;
esac
done
let $((shiftcount = $OPTIND - 1))
shift $shiftcount
args=$*
#
# Run the tests
#
tests="$args"
if [ ! "$tests" ]
then
set -- `echo *.exe`
tests="$*"
fi
[ -d $logdir ] ||
mkdir $logdir || fatal "could not create log directory ($logdir)"
cpus=1
# where the tmp files go
statfile=/tmp/stats$$
scriptfile=/tmp/script$$
trap "test_exit" 1 2 3 13 14 15
for tfile in $tests
do
tname=`basename $tfile .exe`
TEST_TYPE="single"
case $tname in
monitor*)
if [ $run_to_completion = "yes" ]
then
warn "Skipping $tname; it is interactive"
continue
fi
;;
*-node2*)
fatal "MP tests not supported"
warn "Skipping $tname; 'runtest' runs both nodes when for *-node1"
continue;;
*-node1*)
warn "Running both nodes associated with $tname"
variant=`echo $tname | sed 's/.*-node[12]//' | sed 's/\.exe//'`
tname=`echo $tname | sed 's/-node.*//'`
TEST_TYPE="mp"
;;
minimum*|stackchk*|spfatal*|termio*)
warn "Skipping $tname; it locks up or takes a VERY long time to run"
continue
;;
esac
# Change the title bar to indicate which test we are running
# The simulator screen doesn't provide any indication
logfile=$logdir/$tname
infofile=$logfile.info
rm -f ${statfile}* ${scriptfile}* ${logfile}.tmp*
date=`date`
echo "Starting $tname at $date"
# Generate a script file to get the work done.
# The script file must do the following:
#
# load the program (programs if MP test)
# arrange for capture of output
# run the program
# produce statistics
{
case $TEST_TYPE in
"mp")
fatal "MP tests not supported"
;;
# All other tests (single-processor)
*)
echo "load $tfile"
echo "go 0x02000000"
echo ""
echo "perf"
echo "quit"
;;
esac
} > ${scriptfile}
if [ "$script_and_exit" = "yes" ]
then
mv ${scriptfile} $tname.ss
warn "script left in $tname.ss"
test_exit 0
fi
# Spin off the simulator in the background
sparc-rtems-sis $extra_options -c ${scriptfile} >${logfile}.tmp &
sim_pid=$!
# Make sure it won't run forever...
{
time_run=0
while [ $time_run -lt $max_run_time ]
do
# sleep 10s at a time waiting for job to finish or timer to expire
# if job has exited, then we exit, too.
sleep 10
if kill -0 $sim_pid 2>/dev/null
then
time_run=$((time_run + 10))
else
exit 0
fi
done
kill -2 $sim_pid 2>/dev/null
{ sleep 5; kill -9 $sim_pid 2>/dev/null; } &
} &
wait $sim_pid
status=$?
if [ $status -ne 0 ]
then
ran_too_long="yes"
else
ran_too_long="no"
fi
sim_pid=""
# fix up the printf output from the test
case $TEST_TYPE in
mp)
fatal "MP not supported"
;;
*)
output_it=1
sed -e '1,9d' \
-e 's/
//' -e '/^$/d' < ${logfile}.tmp |
while read line
do
if [ $output_it -eq 1 ] ; then
if [ "$line" = "sis> perf" ] ; then
output_it=0
elif [ "$line" = "sis> quit" ] ; then
output_it=0
elif [ "$line" = "sis>" ] ; then
output_it=0
else
echo "$line"
fi
fi
done > ${logfile}_1
;;
esac
# Create the info files
for cpu in $cpus
do
{
echo "$date"
echo "Test run on: `uname -n` ( `uname -a` )"
output_it=0
sed -e 's/
//' < ${logfile}.tmp |
while read line
do
if [ $output_it -eq 1 ] ; then
if [ "$line" = "sis> quit" ] ; then
output_it=0
else
echo "$line"
fi
else
if [ "$line" = "sis> perf" ] ; then
output_it=1
fi
fi
done
if [ "$ran_too_long" = "yes" ]
then
echo "Test did NOT finish normally; killed after $max_run_time seconds"
fi
echo
date;
} > ${infofile}_$cpu
done
rm -f ${logfile}.tmp*
if [ "$cpus" = "1" ]
then
mv ${infofile}_1 ${infofile}
mv ${logfile}_1 ${logfile}
fi
done
test_exit 0
# Local Variables: ***
# mode:ksh ***
# End: ***