OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [rtems-20020807/] [c/] [src/] [lib/] [libbsp/] [c4x/] [c4xsim/] [tools/] [runtest.in] - Rev 1765

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, 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=$((6 * 60))  # is 5 on other simulators.
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*)
           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 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 "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" ]
   then
        mv ${scriptfile} $tname.ss
        warn "script left in $tname.ss"
        test_exit 0
   fi

   # Spin off the simulator in the background
   c4x-rtems-gdb $extra_options -n \
        --command ${scriptfile} ${tfile} >${logfile}.tmp 2>&1 &
   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=0
           clean_exit=0
           sed -e '1,9d' \
               -e 's/
//' -e '/^$/d' < ${logfile}.tmp | 
             while read line
              do
                if [ $output_it -eq 1 ] ; then
                   case $line in
                       END_OF_TEST*)
                       output_it=0
                       ;;
                      *simio.c:86*)
                        output_it=0
                        clean_exit=1
                        ;;
                      *)
                        echo "$line"
                        ;;
                     esac
                 else
                   if [ "$line" = "START_OF_TEST" ] ; then 
                     output_it=1
                   fi
                 fi
               done > ${logfile}_1
               if [ ${clean_exit} -eq 0 ] ; then
                 mv ${logfile}_1 ${logfile}_1.XXX
                 sed -e '/^Program received signal SIGTRAP/d' \
                    <${logfile}_1.XXX >${logfile}_1
                 rm -f ${logfile}_1.XXX
               fi
           ;;
   esac

   # Create the info files
   for cpu in $cpus
   do
   {
       echo "$date"
       echo "Test run on: `uname -n`    ( `uname -a` )"

       output_it=1
       sed -e 's/
//' < ${logfile}.tmp | 
         while read line
         do
           if [ $output_it -eq 0 ] ; then
              if [ "$line" = "END_OF_TEST" ] ; then 
                output_it=1
              fi
            else
              if [ "$line" = "START_OF_TEST" ] ; then 
                output_it=0
              else
                echo "$line"
              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: ***

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.