diff options
Diffstat (limited to 'config/udi.exp')
-rw-r--r-- | config/udi.exp | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/config/udi.exp b/config/udi.exp new file mode 100644 index 0000000..4e10c4f --- /dev/null +++ b/config/udi.exp @@ -0,0 +1,158 @@ +# Copyright (C) 1994, 1996, 1997 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: +# DejaGnu@cygnus.com + +# This file was originally written by Rob Savoye. (rob@cygnus.com) +# and modified by Bob Manson (manson@cygnus.com) + +# When using the simulator (-n iss) and running nice'd, things can naturally +# take a little longer, so increase the timeout. + +# +# udi_load -- load the program and execute it +# +# See default.exp for explanation of arguments and results. +# + +proc udi_load { dest prog args } { + set shell_prompt [board_info $dest shell_prompt]; + set output ""; + + if ![file exists $prog] then { + perror "$prog does not exist." + verbose -log "$prog does not exist." 3 + return [list "untested" ""]; + } + + # Load the program. + if ![board_info $dest exists fileid] then { + remote_open $dest; + if ![board_info $dest exists fileid] then { + verbose -log "$prog not executed, couldn't connect to $dest." 3 + return "untested" + } + } + + if { [remote_ld $dest $prog] == "" } { + verbose -log "$prog not executed, load failed." 3 + return [list "unresolved" ""]; + } + + # Execute it. + set result -1 + set output ""; + set noappend 0; + + verbose "Executing $prog." 2 + remote_send $dest "g\n" + # FIXME: The value 300 below should be a parameter. + remote_expect $dest 300 { + -re "(.*)Process exited with 0x0\[^\r\n\]*\[\r\n\]" { + append output $expect_out(1,string); + verbose "$prog executed successfully" 2 + set noappend 1; + set result 0; + exp_continue; + } + -re "(.*)Halt instruction encountered" { + append output $expect_out(1,string); + verbose "$prog got a HALT instruction" 2 + set result 1; + set noappend 1; + exp_continue; + } + -re "(^|\[\r\n\])$shell_prompt" { + if { $result == -1 } { + exp_continue; + } + } + -re "(^|\[\r\n\]+)g\[\r\n\]+" { + exp_continue; + } + -re "\[\r\n\]+" { + if { ! $noappend } { + append output $expect_out(buffer); + if { [string length $output] < 512000 } { + exp_continue; + } else { + set result 1; + } + } else { + exp_continue; + } + } + timeout { + warning "$prog timed out." + } + } + + # See what happened. + switch -- $result { + 0 { + set status [check_for_board_status output]; + if { $status < 0 } { + blammo + } + if { $status > 0 } { + set result "fail"; + } else { + set result "pass" + } + } + 1 - -1 { + warning "Resetting $dest." + remote_send $dest "r\n" + remote_expect $dest 5 { + -re "r.*$shell_prompt.*" { + verbose "Target reset." 2 + } + timeout { + # Get nastier. We want to leave the system in a state + # ready to run the next testcase. + remote_send $dest "q\n" + remote_close $dest; + set udi_shell_id [remote_open $dest] + if { $udi_shell_id < 0 } { + perror "Couldn't reset $dest." + } + } + } + if { $result == 1 } { + set result "fail" + } else { + set result "unresolved" + } + } + default { + set result "unresolved" + } + } + return [list $result $output]; +} + +# +# udi_exit -- shutdown the connection (or simulator) +# + +proc udi_exit {} { + remote_close target; +} + +set_board_info protocol "udi"; +set_board_info connect "mondfe"; +set_board_info shell_prompt "mondfe>"; |