From 61ba976360804d85f9203821518bb4b132852188 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 22 Feb 2000 18:39:52 +0000 Subject: New port of RTEMS to TI C3x and C4x. --- c/src/lib/libbsp/c4x/c4xsim/tools/Makefile.am | 15 ++ c/src/lib/libbsp/c4x/c4xsim/tools/configure.in | 23 ++ c/src/lib/libbsp/c4x/c4xsim/tools/runtest.in | 331 +++++++++++++++++++++++++ 3 files changed, 369 insertions(+) create mode 100644 c/src/lib/libbsp/c4x/c4xsim/tools/Makefile.am create mode 100644 c/src/lib/libbsp/c4x/c4xsim/tools/configure.in create mode 100644 c/src/lib/libbsp/c4x/c4xsim/tools/runtest.in (limited to 'c/src/lib/libbsp/c4x/c4xsim/tools') diff --git a/c/src/lib/libbsp/c4x/c4xsim/tools/Makefile.am b/c/src/lib/libbsp/c4x/c4xsim/tools/Makefile.am new file mode 100644 index 0000000000..fd48f4ee00 --- /dev/null +++ b/c/src/lib/libbsp/c4x/c4xsim/tools/Makefile.am @@ -0,0 +1,15 @@ +## +## $Id$ +## + +AUTOMAKE_OPTIONS = foreign 1.4 +ACLOCAL_AMFLAGS = -I $(RTEMS_TOPdir)/aclocal + +noinst_SCRIPTS=runtest + +#HACK: install to build-tree +all-local: $(SCRIPTS) + $(mkinstalldirs) $(PROJECT_ROOT)/$(RTEMS_BSP)/tests + $(INSTALL_SCRIPT) runtest $(PROJECT_ROOT)/$(RTEMS_BSP)/tests/runtest + +include $(top_srcdir)/../../../../../../../automake/local.am diff --git a/c/src/lib/libbsp/c4x/c4xsim/tools/configure.in b/c/src/lib/libbsp/c4x/c4xsim/tools/configure.in new file mode 100644 index 0000000000..47f6b0417f --- /dev/null +++ b/c/src/lib/libbsp/c4x/c4xsim/tools/configure.in @@ -0,0 +1,23 @@ +dnl Process this file with autoconf to produce a configure script. +dnl +dnl $Id$ + +AC_INIT(runtest.in) +RTEMS_TOP(../../../../../../..) +AC_CONFIG_AUX_DIR(../../../../../../..) + +RTEMS_CANONICAL_TARGET_CPU + +AM_INIT_AUTOMAKE(rtems-c-src-lib-libbsp-c4x-c4xsim-tools,$RTEMS_VERSION,no) +AM_MAINTAINER_MODE + +RTEMS_PATH_KSH +RTEMS_ENV_RTEMSBSP + +RTEMS_PROJECT_ROOT +RTEMS_TOOLPATHS + +# Explicitly list all Makefiles here +AC_OUTPUT( +Makefile +runtest) diff --git a/c/src/lib/libbsp/c4x/c4xsim/tools/runtest.in b/c/src/lib/libbsp/c4x/c4xsim/tools/runtest.in new file mode 100644 index 0000000000..2814c2a1e3 --- /dev/null +++ b/c/src/lib/libbsp/c4x/c4xsim/tools/runtest.in @@ -0,0 +1,331 @@ +#!@KSH@ -p +# +# $Id$ +# +# 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: *** + -- cgit v1.2.3