2008-09-03 Joel Sherrill <joel.sherrill@oarcorp.com>

* Makefile.am, configure.ac: Rework psim scripts to share code for
	creating device trees and actually running the tests. Overhaul the
	device tree generated to always include a block of Flash and a
	Real-Time Clock. When running MP tests enable the shared memory and
	semaphore devices.
	* psim-bottom, psim-gdb-bottom, psim-gdb-top.in, psim-shared,
	psim-top.in, runtest-bottom, runtest-top.in: New files.
	* psim, psim-gdb, runtest: Removed.
This commit is contained in:
Joel Sherrill
2008-09-03 18:37:51 +00:00
parent 6c45275ae0
commit 001b41625e
13 changed files with 478 additions and 456 deletions

View File

@@ -1,3 +1,14 @@
2008-09-03 Joel Sherrill <joel.sherrill@oarcorp.com>
* Makefile.am, configure.ac: Rework psim scripts to share code for
creating device trees and actually running the tests. Overhaul the
device tree generated to always include a block of Flash and a
Real-Time Clock. When running MP tests enable the shared memory and
semaphore devices.
* psim-bottom, psim-gdb-bottom, psim-gdb-top.in, psim-shared,
psim-top.in, runtest-bottom, runtest-top.in: New files.
* psim, psim-gdb, runtest: Removed.
2008-08-05 Joel Sherrill <joel.sherrill@OARcorp.com> 2008-08-05 Joel Sherrill <joel.sherrill@OARcorp.com>
* runtest: Strip .exe or .ralf from file names. * runtest: Strip .exe or .ralf from file names.

View File

@@ -9,7 +9,7 @@ bsptools_bindir = ${exec_prefix}/@RTEMS_BSP@/tests
bsptools_bin_SCRIPTS = psim psim-gdb runtest bsptools_bin_SCRIPTS = psim psim-gdb runtest
## HACK: install to build-tree ## HACK: install to build-tree
all-local: $(TMPINSTALL_FILES) all-local: psim $(TMPINSTALL_FILES)
TMPINSTALL_FILES = TMPINSTALL_FILES =
@@ -18,6 +18,18 @@ $(PROJECT_ROOT)/@RTEMS_BSP@/tests/$(dirstamp):
@: > $(PROJECT_ROOT)/@RTEMS_BSP@/tests/$(dirstamp) @: > $(PROJECT_ROOT)/@RTEMS_BSP@/tests/$(dirstamp)
TMPINSTALL_FILES += $(PROJECT_ROOT)/@RTEMS_BSP@/tests/$(dirstamp) TMPINSTALL_FILES += $(PROJECT_ROOT)/@RTEMS_BSP@/tests/$(dirstamp)
psim: psim-top psim-shared psim-bottom
cat $^ >$@
chmod +x $@
psim-gdb: psim-gdb-top psim-shared psim-gdb-bottom
cat $^ >$@
chmod +x $@
runtest: runtest-top psim-shared runtest-bottom
cat $^ >$@
chmod +x $@
$(PROJECT_ROOT)/@RTEMS_BSP@/tests/psim: psim $(PROJECT_ROOT)/@RTEMS_BSP@/tests/$(dirstamp) $(PROJECT_ROOT)/@RTEMS_BSP@/tests/psim: psim $(PROJECT_ROOT)/@RTEMS_BSP@/tests/$(dirstamp)
$(INSTALL_SCRIPT) $< $(PROJECT_ROOT)/@RTEMS_BSP@/tests/psim $(INSTALL_SCRIPT) $< $(PROJECT_ROOT)/@RTEMS_BSP@/tests/psim
TMPINSTALL_FILES += $(PROJECT_ROOT)/@RTEMS_BSP@/tests/psim TMPINSTALL_FILES += $(PROJECT_ROOT)/@RTEMS_BSP@/tests/psim
@@ -30,6 +42,6 @@ $(PROJECT_ROOT)/@RTEMS_BSP@/tests/runtest: runtest $(PROJECT_ROOT)/@RTEMS_BSP@/t
$(INSTALL_SCRIPT) $< $(PROJECT_ROOT)/@RTEMS_BSP@/tests/runtest $(INSTALL_SCRIPT) $< $(PROJECT_ROOT)/@RTEMS_BSP@/tests/runtest
TMPINSTALL_FILES += $(PROJECT_ROOT)/@RTEMS_BSP@/tests/runtest TMPINSTALL_FILES += $(PROJECT_ROOT)/@RTEMS_BSP@/tests/runtest
CLEANFILES = $(TMPINSTALL_FILES) CLEANFILES = $(TMPINSTALL_FILES) psim psim-gdb
include $(top_srcdir)/../../../../../automake/host.am include $(top_srcdir)/../../../../../automake/host.am

View File

@@ -4,7 +4,7 @@
AC_PREREQ(2.60) AC_PREREQ(2.60)
AC_INIT([rtems-c-src-lib-libbsp-powerpc-psim-tools],[_RTEMS_VERSION],[http://www.rtems.org/bugzilla]) AC_INIT([rtems-c-src-lib-libbsp-powerpc-psim-tools],[_RTEMS_VERSION],[http://www.rtems.org/bugzilla])
AC_CONFIG_SRCDIR([psim]) AC_CONFIG_SRCDIR([psim-top.in])
RTEMS_TOP(../../../../../../..) RTEMS_TOP(../../../../../../..)
RTEMS_CANONICAL_TARGET_CPU RTEMS_CANONICAL_TARGET_CPU
@@ -13,9 +13,15 @@ AM_INIT_AUTOMAKE([no-define foreign 1.10])
AM_MAINTAINER_MODE AM_MAINTAINER_MODE
RTEMS_ENV_RTEMSBSP RTEMS_ENV_RTEMSBSP
RTEMS_PATH_KSH
RTEMS_PROJECT_ROOT RTEMS_PROJECT_ROOT
RTEMS_TOOLPATHS RTEMS_TOOLPATHS
# Explicitly list all Makefiles here # Explicitly list all Makefiles here
AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([Makefile
psim-top
psim-gdb-top
runtest-top
])
AC_OUTPUT AC_OUTPUT

View File

@@ -1,121 +0,0 @@
#! /bin/sh
#
# Shell script to ease invocation of the powerpc simulator
#
# COPYRIGHT (c) 1989-2006.
# On-Line Applications Research Corporation (OAR).
#
# The license and distribution terms for this file may be
# found in found in the file LICENSE in this distribution or at
# http://www.rtems.com/license/LICENSE.
#
# $Id$
#
TREE_FILE=psim_tree.${LOGNAME}
RUN=powerpc-rtems4.8-run
progname=${0##*/} # fast basename hack for ksh, bash
USAGE=\
"usage: $progname [ -opts ] test [ test ... ]
-v -- verbose
-l limit -- specify time limit (default is 'no limit')
"
# log an error to stderr
prerr()
{
echo "$*" >&2
}
fatal() {
[ "$1" ] && prerr $*
prerr "$USAGE"
exit 1
}
warn() {
[ "$1" ] && prerr $*
}
#
# process the options
#
# defaults for getopt vars
#
verbose=""
limit="0"
while getopts vl: OPT
do
case "$OPT" in
v)
verbose="yes";;
l)
limit="$OPTARG";;
*)
fatal;;
esac
done
shiftcount=`expr $OPTIND - 1`
shift $shiftcount
args=$*
# RUN_DEBUG="-t sem_device"
# Build this user's device tree file
echo "/#address-cells 2" > ${TREE_FILE}
echo "/openprom/init/register/pvr 0xfffe0000" >> ${TREE_FILE}
echo "/openprom/options/oea-memory-size 8388608" >> ${TREE_FILE}
# These require the semaphore and shared memory device models.
# echo "/shm@0xc0000000/reg 0xc0000000 0x10000" >> ${TREE_FILE}
# echo "/shm@0xc0000000/key ${RTEMS_SHM_KEY}" >> ${TREE_FILE}
# echo "/sem@0xc0010000/reg 0xc0010000 12" >> ${TREE_FILE}
# echo "/sem@0xc0010000/key ${RTEMS_SHM_SEMAPHORE_KEY}" >> ${TREE_FILE}
# echo "/sem@0xc0010000/value -1" >> ${TREE_FILE}
runtest()
{
testname=${1}
max_run_time=${2}
if [ ${max_run_time} -eq 0 ] ; then
#echo run ${testname} forever
${RUN} -f ${TREE_FILE} ${RUN_DEBUG} ${testname}
else
#echo run ${testname} for maximum ${max_run_time} seconds
${RUN} -f ${TREE_FILE} ${RUN_DEBUG} ${testname} &
pid=$!
# Make sure it won't run forever...
time_run=0
while [ $time_run -lt $max_run_time ]
do
# sleep 5s at a time waiting for job to finish or timer to expire
# if job has exited, then we exit, too.
sleep 1
kill -0 $pid 2> /dev/null
running=$?
if [ $running -eq 0 ] ; then
time_run=$((time_run + 5))
if [ $time_run -ge $max_run_time ]; then
kill -9 $pid 2> /dev/null
ran_too_long="yes"
echo "${testname} killed after running ${max_run_time} seconds"
fi
else
ran_too_long="no"
break
fi
done
fi
}
runtest ${1} ${limit}
rm -f ${TREE_FILE}
exit $?

View File

@@ -0,0 +1,35 @@
#
# process the options
#
# defaults for getopt vars
#
verbose=""
limit="0"
## TODO: may want command line ability to turn on some psim tracing
while getopts vl: OPT
do
case "$OPT" in
v)
verbose="yes";;
l)
limit="$OPTARG";;
*)
fatal;;
esac
done
shiftcount=`expr $OPTIND - 1`
shift $shiftcount
args=$*
if [ $# -eq 0 ] ; then
fatal
fi
gen_device_tree ${1} >${TREE_FILE}
runone ${1} ${limit}
rm -f ${TREE_FILE}
exit $?

View File

@@ -1,42 +0,0 @@
#! /bin/sh
#
# Shell script to ease invocation of the powerpc simulator
#
# COPYRIGHT (c) 1989-2006.
# On-Line Applications Research Corporation (OAR).
#
# The license and distribution terms for this file may be
# found in found in the file LICENSE in this distribution or at
# http://www.rtems.com/license/LICENSE.
#
# $Id$
#
TREE_FILE=psim_tree.${LOGNAME}
GDB_FILE=gdb_tree.${LOGNAME}
# Build this user's device tree file
echo "/#address-cells 2" > ${TREE_FILE}
echo "/openprom/init/register/pvr 0xfffe0000" >> ${TREE_FILE}
echo "/openprom/options/oea-memory-size 8388608" >> ${TREE_FILE}
# These require the semaphore and shared memory device models.
# echo "/shm@0xc0000000/reg 0xc0000000 0x10000" >> ${TREE_FILE}
# echo "/shm@0xc0000000/key ${RTEMS_SHM_KEY}" >> ${TREE_FILE}
# echo "/sem@0xc0010000/reg 0xc0010000 12" >> ${TREE_FILE}
# echo "/sem@0xc0010000/key ${RTEMS_SHM_SEMAPHORE_KEY}" >> ${TREE_FILE}
# echo "/sem@0xc0010000/value -1" >> ${TREE_FILE}
#
# Build this user's gdb script
echo "tar sim -f ${TREE_FILE} ${GDB_DEBUG}" > ${GDB_FILE}
echo "load" >> ${GDB_FILE}
echo "b _Internal_error_Occurred" >> ${GDB_FILE}
echo "b rtems_fatal_error_occurred" >> ${GDB_FILE}
echo "b __assert" >> ${GDB_FILE}
GDB=powerpc-rtems4.9-gdb
${GDB} -x ${GDB_FILE} $*
exit $?

View File

@@ -0,0 +1,24 @@
## TODO: may want command line ability to turn on some psim tracing
## Generate the GDB Command Script
gen_gdb_script()
{
echo "tar sim -f ${TREE_FILE}"
echo "load"
echo "b _Internal_error_Occurred"
echo "b rtems_fatal_error_occurred"
echo "b __assert"
echo "printf \"Use run to start the RTEMS application\\n\""
}
GDB=powerpc-rtems4.9-gdb
gen_device_tree ${1} >${TREE_FILE}
gen_gdb_script >${GDB_FILE}
${GDB} -x ${GDB_FILE} $*
rm -f ${GDB_FILE} ${TREEFILE}
exit $?

View File

@@ -0,0 +1,18 @@
#! @KSH@ -p
#
# Shell script to ease invocation of the powerpc simulator with gdb
#
# COPYRIGHT (c) 1989-2008.
# On-Line Applications Research Corporation (OAR).
#
# The license and distribution terms for this file may be
# found in found in the file LICENSE in this distribution or at
# http://www.rtems.com/license/LICENSE.
#
# $Id$
#
GDB=@target_alias@-gdb
GDB_FILE=gdb_tree.${LOGNAME}

View File

@@ -0,0 +1,98 @@
TREE_FILE=psim_tree.${LOGNAME}
### Generate the PSIM device tree based upon the type of application being run
gen_device_tree()
{
case ${1} in
*mp*)
if [ X${RTEMS_SHM_SEMAPHORE_KEY} = X -o X${RTEMS_SHM_KEY} = X ] ; then
fatal RTEMS_SHM_SEMAPHORE_KEY and/or RTEMS_SHM_KEY not set
fi
use_sysv_devices=yes
case ${1} in
*node1*) value=1 ;;
*) value=-1 ;;
esac
;;
*)
use_sysv_devices=no
;;
esac
cat <<EOF
#
# Device Tree for PSIM
#
# Automatically Generated -- DO NOT EDIT!!
#
/#address-cells 1
/openprom/init/register/pvr 0xfffe0000
/openprom/options/oea-memory-size 8388608
##### EEPROM @ 0x0c000000 for 512K
/eeprom@0x0c000000/reg 0x0c000000 0x80000
/eeprom@0x0c000000/nr-sectors 8
/eeprom@0x0c000000/sector-size 0x10000
/eeprom@0x0c000000/byte-write-delay 1000
/eeprom@0x0c000000/sector-start-delay 100
/eeprom@0x0c000000/erase-delay 1000
/eeprom@0x0c000000/manufacture-code 0x01
/eeprom@0x0c000000/device-code 0xa4
##### NVRAM/RTC NVRAM Portion is 0x0c080000 for 512K
##### NVRAM/RTC RTC Portion is 0x0c100000 for 12
/nvram@0x0c080000/reg 0x0c080000 524300
/nvram@0x0c080000/timezone -3600
EOF
if [ ${use_sysv_devices} = yes ] ; then
echo "##### System V IPC (Semaphore) 0x0c100010 for 12"
echo "/sem@0x0c100010/reg 0x0c100010 12"
echo "/sem@0x0c100010/key ${RTEMS_SHM_SEMAPHORE_KEY}"
echo "/sem@0x0c100010/value ${value}"
$@
echo "##### System V IPC (Shared Memory) 0x0c110000 for 128K"
echo "/shm@0x0c110000/reg 0x0c110000 0x20000"
echo "/shm@0x0c110000/key ${RTEMS_SHM_KEY}"
fi
}
### run the specified test with the time limit
runone()
{
testname=${1}
max_run_time=${2}
if [ ${max_run_time} -eq 0 ] ; then
#echo run ${testname} forever
${RUN} -f ${TREE_FILE} ${RUN_DEBUG} ${testname}
else
#echo run ${testname} for maximum ${max_run_time} seconds
${RUN} -f ${TREE_FILE} ${RUN_DEBUG} ${testname} &
pid=$!
# Make sure it won't run forever...
time_run=0
while [ $time_run -lt $max_run_time ]
do
# sleep 5s at a time waiting for job to finish or timer to expire
# if job has exited, then we exit, too.
sleep 1
kill -0 $pid 2> /dev/null
running=$?
if [ $running -eq 0 ] ; then
time_run=$((time_run + 5))
if [ $time_run -ge $max_run_time ]; then
kill -9 $pid 2> /dev/null
ran_too_long="yes"
echo "${testname} killed after running ${max_run_time} seconds"
fi
else
ran_too_long="no"
break
fi
done
fi
}

View File

@@ -0,0 +1,41 @@
#! @KSH@ -p
#
# Shell script to ease invocation of the powerpc simulator
#
# COPYRIGHT (c) 1989-2008.
# On-Line Applications Research Corporation (OAR).
#
# The license and distribution terms for this file may be
# found in found in the file LICENSE in this distribution or at
# http://www.rtems.com/license/LICENSE.
#
# $Id$
#
TREE_FILE=psim_tree.${LOGNAME}
RUN=@target_alias@-run
progname=${0##*/} # fast basename hack for ksh, bash
USAGE=\
"usage: $progname [ -opts ] test [ test ... ]
-v -- verbose
-l limit -- specify time limit (default is 'no limit')
"
# log an error to stderr
prerr()
{
echo "$*" >&2
}
fatal() {
[ "$1" ] && prerr $*
prerr "$USAGE"
exit 1
}
warn() {
[ "$1" ] && prerr $*
}

View File

@@ -1,289 +0,0 @@
#!/bin/sh -p
#
# Run rtems tests on the powerpc 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
#
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
# The license and distribution terms for this file may be
# found in found in the file LICENSE in this distribution or at
# http://www.rtems.com/license/LICENSE.
#
# $Id$
#
# 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
-d -- generate device tree file (as 'test'.device) 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 ${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=""
device_and_exit=""
stdio_setup="yes"
run_to_completion="yes"
logdir=log
update_on_tick="no"
max_run_time=$((5 * 60))
using_print_buffer="yes"
#simulator=/usr1/rtems/work/ada/4.00/ppc_src/b-gdb/sim/ppc/run
simulator=powerpc-rtems4.9-run
instruction_limit=1000000000
sizeof_ram=8388608
while getopts vdl:o:s: OPT
do
case "$OPT" in
v)
verbose="yes";;
d)
device_and_exit="yes"
run_to_completion="no"
stdio_setup="no";;
l)
logdir="$OPTARG";;
o)
extra_options="$OPTARG";;
r)
sizeof_ram="$OPTARG";;
s)
simulator="$OPTARG";;
*)
fatal;;
esac
done
let $((shiftcount = $OPTIND - 1))
shift $shiftcount
args=$*
#
# Check some parameters
#
# JRS CHANGE
# if [ ! -x ${simulator} ] ; then
# fatal "${simulator} is not executable"
# fi;
#
# Run the tests
#
tests="$args"
if [ ! "$tests" ]
then
set -- `echo *.exe`
tests="$*"
fi
[ -d $logdir ] ||
mkdir $logdir || fatal "could not create log directory ($logdir)"
# where the tmp files go
trap "test_exit" 1 2 3 13 14 15
for tfile in $tests
do
tname=`basename $tfile .exe`
tname=`basename $tname .ralf`
cpus="1"
TEST_TYPE="single"
case $tname in
# size is no longer interactive.
capture* | monitor* | termios* | fileio* | pppd*)
if [ $run_to_completion = "yes" ]
then
warn "Skipping $tname; it is interactive"
continue
fi
;;
*-node2*)
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*|*fatal*|termio*)
continue ;;
esac
if [ $TEST_TYPE = "mp" ]
then
cpus="1 2"
logfile1=$logdir/${tname}_1${variant}
logfile2=$logdir/${tname}_2${variant}
infofile1=$logfile1.info
infofile2=$logfile2.info
rm -f ${logfile1} ${logfile2}
date=`date`
echo "Starting $tname at $date"
${simulator} $extra_options -c ${instruction_limit} \
-o "/#address-cells 2" \
-o "/openprom/options/oea-memory-size ${sizeof_ram}" \
-o "/openprom/init/register/pvr 0xfffe0000" \
-o "/shm@0xc0000000/reg 0xc0000000 0x10000" \
-o "/shm@0xc0000000/key 0x1234" \
-o "/sem@0xc0010000/reg 0xc0010000 12" \
-o "/sem@0xc0010000/key 0x1234" \
-o "/sem@0xc0010000/value 1" ${tname}-node1${variant}.exe | \
sed -e 's/
//' -e '/^$/d' > ${logfile1} &
${simulator} $extra_options -c ${instruction_limit} \
-o "/#address-cells 2" \
-o "/openprom/options/oea-memory-size ${sizeof_ram}" \
-o "/openprom/init/register/pvr 0xfffe0000" \
-o "/shm@0xc0000000/reg 0xc0000000 0x10000" \
-o "/shm@0xc0000000/key 0x1234" \
-o "/sem@0xc0010000/reg 0xc0010000 12" \
-o "/sem@0xc0010000/key 0x1234" \
-o "/sem@0xc0010000/value -1" ${tname}-node2${variant}.exe | \
sed -e 's/
//' -e '/^$/d' > ${logfile2} &
wait
fi
if [ $TEST_TYPE = "single" ]
then
logfile=$logdir/${tname}_1
infofile=$logfile.info
rm -f ${logfile}.tmp*
date=`date`
echo "Starting $tname at $date"
# Generate a device file to get the work done.
# The device file must do the following:
#
# arrange for more memory (2 Mb)
if [ "$device_and_exit" = "yes" ]
then
fatal "Cannot currently generate device files"
fi
# Spin off the simulator in the background
# -c sets an instruction limit
# Don't need to make sure it won't run forever... since there is
# an instruction count limit
#powerpc-rtems-run $extra_options -c ${instruction_limit} \
# -f ${devicefile} $tfile | sed -e 's/
//' -e '/^$/d' > ${logfile}
${simulator} $extra_options -c ${instruction_limit} \
-o "/#address-cells 2" \
-o "/openprom/options/oea-memory-size ${sizeof_ram}" \
-o "/openprom/init/register/pvr 0xfffe0000" \
$tfile | sed -e 's/
//' -e '/^$/d' > ${logfile}
fi
# Create the info files
for cpu in $cpus
do
{
echo "$date"
echo "Test run on: `uname -n`"
echo "Host Information:"
echo `uname -a`
echo
#sed -e 's/
//' < ${logdir}/${tname}_${cpu}
cat ${logdir}/${tname}_${cpu}
if [ "$ran_too_long" = "yes" ]
then
echo "Test did NOT finish normally; killed after $max_run_time seconds"
fi
echo
date;
} > ${logdir}/${tname}_${cpu}.info
done
if [ "$cpus" = "1" ]
then
mv ${infofile} $logdir/${tname}.info
mv ${logfile} $logdir/${tname}
fi
done
echo "Tests completed at " `date`
test_exit 0

View File

@@ -0,0 +1,125 @@
#
# Run the tests
#
tests="$args"
if [ ! "$tests" ]
then
set -- `echo *.exe`
tests="$*"
fi
[ -d $logdir ] ||
mkdir $logdir || fatal "could not create log directory ($logdir)"
# where the tmp files go
trap "test_exit" 1 2 3 13 14 15
for tfile in $tests
do
echo $tfile | grep "exe$" >/dev/null
if [ $? -eq 0 ] ; then
ext=.exe
else
ext=.ralf
fi
tname=`basename $tfile ${ext}`
cpus="1"
TEST_TYPE="single"
case $tname in
# size is no longer interactive.
capture* | monitor* | termios* | fileio* | pppd*)
warn "Skipping $tname; it is interactive"
continue
;;
*-node2*)
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*|*fatal*|termio*)
continue ;;
esac
if [ $TEST_TYPE = "mp" ]
then
cpus="1 2"
logfile1=$logdir/${tname}_1${variant}
logfile2=$logdir/${tname}_2${variant}
infofile1=$logfile1.info
infofile2=$logfile2.info
rm -f ${logfile1} ${logfile2}
date=`date`
echo "Starting $tname at $date"
# XXX -c ${instruction_limit}
runone ${tname}-node1${variant}.${ext} ${max_run_time} | \
sed -e 's/^M//' -e '/^$/d' > ${logfile1} &
runone ${tname}-node2${variant}.${ext} ${max_run_time} | \
sed -e 's/^M//' -e '/^$/d' > ${logfile2} &
wait
fi
if [ $TEST_TYPE = "single" ]
then
logfile=$logdir/${tname}_1
infofile=$logfile.info
rm -f ${logfile}.tmp*
date=`date`
echo "Starting $tname at $date"
# Spin off the simulator in the background
# -c could be used to set an instruction limit
runone ${tfile} ${max_run_time} | \
sed -e 's/^M//' -e '/^$/d' > ${logfile}
fi
# Create the info files
for cpu in $cpus
do
{
echo "$date"
echo "Test run on: `uname -n`"
echo "Host Information:"
echo `uname -a`
echo
cat ${logdir}/${tname}_${cpu}
if [ "$ran_too_long" = "yes" ]
then
echo "Test did NOT finish normally; killed after $max_run_time seconds"
fi
echo
date;
} > ${logdir}/${tname}_${cpu}.info
done
if [ "$cpus" = "1" ]
then
mv ${infofile} $logdir/${tname}.info
mv ${logfile} $logdir/${tname}
fi
done
echo "Tests completed at " `date`
test_exit 0
# Local Variables: ***
# mode:ksh ***
# End: ***

View File

@@ -0,0 +1,104 @@
#!@KSH@ -p
#
# Run rtems tests on the powerpc 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
#
# COPYRIGHT (c) 1989-2008.
# On-Line Applications Research Corporation (OAR).
#
# The license and distribution terms for this file may be
# found in found in the file LICENSE in this distribution or at
# http://www.rtems.com/license/LICENSE.
#
# $Id$
#
# progname=`basename $0`
progname=${0##*/} # fast basename hack for ksh, bash
RUN=@target_alias@-run
USAGE=\
"usage: $progname [ -opts ] test [ test ... ]
-o options -- specify options to be passed to simulator
-v -- verbose
-d -- generate device tree file (as 'test'.device) 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 ${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=""
logdir=log
update_on_tick="no"
max_run_time=$((5 * 60))
instruction_limit=1000000000
while getopts vl: OPT
do
case "$OPT" in
v) verbose="yes";;
l) logdir="$OPTARG";;
*) fatal;;
esac
done
let $((shiftcount = $OPTIND - 1))
shift $shiftcount
args=$*
#
# Check some parameters
#
# XXX nothing to check so far