aboutsummaryrefslogtreecommitdiff
path: root/config/sim.exp
diff options
context:
space:
mode:
authorRob Savoye <rob@welcomehome.org>2001-02-05 04:14:59 +0000
committerRob Savoye <rob@welcomehome.org>2001-02-05 04:14:59 +0000
commit20f1185dd84bcadf4b238d1d2ca18f5ca79157d4 (patch)
treeda300d5097593bc1d61123a8e32179914440e85f /config/sim.exp
downloaddejagnu-20f1185dd84bcadf4b238d1d2ca18f5ca79157d4.zip
dejagnu-20f1185dd84bcadf4b238d1d2ca18f5ca79157d4.tar.gz
dejagnu-20f1185dd84bcadf4b238d1d2ca18f5ca79157d4.tar.bz2
Initial revision
Diffstat (limited to 'config/sim.exp')
-rw-r--r--config/sim.exp124
1 files changed, 124 insertions, 0 deletions
diff --git a/config/sim.exp b/config/sim.exp
new file mode 100644
index 0000000..74edc6f
--- /dev/null
+++ b/config/sim.exp
@@ -0,0 +1,124 @@
+# Copyright (C) 1993, 1994, 1996, 1997, 1998 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-dejagnu@prep.ai.mit.edu
+
+#
+# sim_load -- load the program and execute it
+#
+# See default.exp for explanation of arguments and results.
+#
+
+proc sim_spawn { dest cmdline args } {
+ if ![board_info $dest exists sim] {
+ perror "no simulator defined for [board_info $dest name]"
+ exit 1
+ } else {
+ set sim [board_info $dest sim];
+ }
+
+ if [board_info $dest exists sim,options] {
+ set simflags [board_info $dest sim,options]
+ } else {
+ set simflags ""
+ }
+
+ if ![is_remote host] {
+ if { [which $sim] == 0 } {
+ verbose -log "Simulator $sim missing." 3
+ return -1;
+ }
+ }
+
+ if [is_remote host] {
+ # download the program to remote.
+ # we're assuming the program is the first word in the command.
+ # FIXME: "prog < infile" won't work until we download infile.
+ set prog [lindex $cmdline 0]
+ set prog [remote_download host $prog a.out];
+ set cmdline [lreplace $cmdline 0 0 $prog]
+ }
+
+ return [eval remote_spawn host \{ $sim $simflags $cmdline \} $args];
+}
+
+proc sim_wait { dest timeout } {
+ return [remote_wait host $timeout];
+}
+
+proc sim_load { dest prog args } {
+ set inpfile ""
+ if { [llength $args] > 1 } {
+ if { [lindex $args 1] != "" } {
+ set inpfile "[lindex $args 1]"
+ }
+ }
+
+ if ![file exists $prog] then {
+ perror "sim.exp: $prog to be downloaded does not exist."
+ verbose -log "$prog to be downloaded does not exist." 3
+ return [list "untested" ""];
+ }
+
+ if [board_info $dest exists sim_time_limit] {
+ set sim_time_limit [board_info $dest sim_time_limit];
+ } else {
+ set sim_time_limit 240
+ }
+
+ set output "";
+
+ # Run the program with a limited amount of real time. While
+ # this isn't as nice as limiting the amount of CPU time, it
+ # will have to do.
+ if { $inpfile != "" } {
+ set res [remote_spawn target "${prog} < $inpfile" "readonly"];
+ } else {
+ set res [remote_spawn target "${prog}"];
+ }
+
+ if { $res <= 0 } {
+ return [list "fail" "remote_spawn failed"];
+ }
+
+ set state [remote_wait target $sim_time_limit];
+ set status [lindex $state 0];
+ set output [lindex $state 1];
+ verbose "Output is $output";
+
+ set status2 [check_for_board_status output];
+ if { $status2 >= 0 } {
+ set status $status2
+ }
+
+ # FIXME: Do we need to examine $status?
+ # Yes, we do--what if the simulator itself gets an error and coredumps?
+
+ verbose "Return status was: $status" 2
+ if { $status == 0 } {
+ set result "pass"
+ } else {
+ set result "fail"
+ }
+ return [list $result $output];
+}
+
+set_board_info protocol "sim";
+
+# By default, assume the simulator is slow. This causes some tests
+# to either be simplified or skipped completely.
+set_board_info slow_simulator 1