forked from Imagelibrary/rtems
* 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.
313 lines
6.4 KiB
Plaintext
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: ***
|
|
|