URL
https://opencores.org/ocsvn/or1k_old/or1k_old/trunk
Subversion Repositories or1k_old
[/] [or1k_old/] [trunk/] [rtems-20020807/] [c/] [src/] [lib/] [libbsp/] [c4x/] [c4xsim/] [tools/] [runtest.in] - Rev 1782
Compare with Previous | Blame | View Log
#!@KSH@ -p## runtest.in,v 1.1 2000/02/22 18:39:52 joel Exp## Run rtems tests on the c4x simulator built into gdb# 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, bashUSAGE=\"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 everythingset -a# log an error to stderrprerr(){echo "$*" >&2}fatal() {[ "$1" ] && prerr $*prerr "$USAGE"exit 1}warn() {[ "$1" ] && prerr $*}# print args, 1 per lineml_echo(){for ldoecho "$l"done}# run at normal and signalled exittest_exit(){exit_code=$1rm -f ${statfile}* ${scriptfile}* ${logfile}.tmp*[ "$sim_pid" ] && kill -9 $sim_pidexit $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=logupdate_on_tick="no"max_run_time=$((6 * 60)) # is 5 on other simulators.using_print_buffer="yes"while getopts vhr12o:c:sl:t OPTdocase "$OPT" inv)verbose="yes";;s)script_and_exit="yes"run_to_completion="no"stdio_setup="no";;l)logdir="$OPTARG";;o)extra_options="$OPTARG";;*)fatal;;esacdonelet $((shiftcount = $OPTIND - 1))shift $shiftcountargs=$*## Run the tests#tests="$args"if [ ! "$tests" ]thenset -- `echo *.exe`tests="$*"fi[ -d $logdir ] ||mkdir $logdir || fatal "could not create log directory ($logdir)"cpus=1# where the tmp files gostatfile=/tmp/stats$$scriptfile=/tmp/script$$trap "test_exit" 1 2 3 13 14 15for tfile in $testsdotname=`basename $tfile .exe`TEST_TYPE="single"case $tname inmonitor)if [ $run_to_completion = "yes" ]thenwarn "Skipping $tname; it is interactive"continuefi;;*-node2*)fatal "MP tests not supported"warn "Skipping $tname; 'runtest' runs both nodes when for *-node1"continue;;*-node1*)fatal "MP tests not supported"warn "Running both nodes associated with $tname"tname=`echo $tname | sed 's/-node.*//'`TEST_TYPE="mp";;stackchk*|spfatal*|malloctest*|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 indicationlogfile=$logdir/$tnameinfofile=$logfile.inform -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 "target sim -3"echo "sim m r 0"echo "sim m w 0"echo "load"echo ""echo "printf \"START_OF_TEST\\n\""echo "run"echo "printf \"END_OF_TEST\\n\""echo "quit";;esac} > ${scriptfile}if [ "$script_and_exit" = "yes" ]thenmv ${scriptfile} $tname.sswarn "script left in $tname.ss"test_exit 0fi# Spin off the simulator in the backgroundc4x-rtems-gdb $extra_options -n \--command ${scriptfile} ${tfile} >${logfile}.tmp 2>&1 &sim_pid=$!# Make sure it won't run forever...{time_run=0while [ $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 10if kill -0 $sim_pid 2>/dev/nullthentime_run=$((time_run + 10))elseexit 0fidonekill -2 $sim_pid 2>/dev/null{ sleep 5; kill -9 $sim_pid 2>/dev/null; } &} &wait $sim_pidstatus=$?if [ $status -ne 0 ]thenran_too_long="yes"elseran_too_long="no"fisim_pid=""# fix up the printf output from the testcase $TEST_TYPE inmp)fatal "MP not supported";;*)output_it=0clean_exit=0sed -e '1,9d' \-e 's/ //' -e '/^$/d' < ${logfile}.tmp |while read linedoif [ $output_it -eq 1 ] ; thencase $line inEND_OF_TEST*)output_it=0;;*simio.c:86*)output_it=0clean_exit=1;;*)echo "$line";;esacelseif [ "$line" = "START_OF_TEST" ] ; thenoutput_it=1fifidone > ${logfile}_1if [ ${clean_exit} -eq 0 ] ; thenmv ${logfile}_1 ${logfile}_1.XXXsed -e '/^Program received signal SIGTRAP/d' \<${logfile}_1.XXX >${logfile}_1rm -f ${logfile}_1.XXXfi;;esac# Create the info filesfor cpu in $cpusdo{echo "$date"echo "Test run on: `uname -n` ( `uname -a` )"output_it=1sed -e 's/ //' < ${logfile}.tmp |while read linedoif [ $output_it -eq 0 ] ; thenif [ "$line" = "END_OF_TEST" ] ; thenoutput_it=1fielseif [ "$line" = "START_OF_TEST" ] ; thenoutput_it=0elseecho "$line"fifidoneif [ "$ran_too_long" = "yes" ]thenecho "Test did NOT finish normally; killed after $max_run_time seconds"fiechodate;} > ${infofile}_$cpudonerm -f ${logfile}.tmp*if [ "$cpus" = "1" ]thenmv ${infofile}_1 ${infofile}mv ${logfile}_1 ${logfile}fidonetest_exit 0# Local Variables: ***# mode:ksh ***# End: ***
