diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/mondfe.exp | 213 | ||||
-rw-r--r-- | lib/remote.exp | 4 | ||||
-rw-r--r-- | lib/xsh.exp | 322 |
3 files changed, 1 insertions, 538 deletions
diff --git a/lib/mondfe.exp b/lib/mondfe.exp deleted file mode 100644 index 40a51db..0000000 --- a/lib/mondfe.exp +++ /dev/null @@ -1,213 +0,0 @@ -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -# 2001, 2002, 2003 Free Software Foundation, Inc. -# -# This file is part of DejaGnu. -# -# DejaGnu 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. -# -# DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -# This file was written by Rob Savoye. (rob@welcomehome.org) - -# -# Connect to udi using mondfe -# -# HOSTNAME can be `iss' to talk to the simulator. -# The result is the value of `spawn_id' or -1 for failure. -# -proc mondfe_open { hostname } { - global spawn_id - global board_info - - set retries 0 - set result -1 - - set shell_prompt [board_info $hostname shell_prompt] - if ![board_info $hostname exists mondfe,name] { - perror "Must set board_info(${hostname},mondfe,name)" - return -1 - } - if [board_info $hostname exists mondfe] { - set mondfe [board_info $hostname mondfe] - } else { - set mondfe "mondfe" - } - - set remote_host [board_info $hostname mondfe,name] - - if [board_info $hostname exists mondfe_host] { - set rh [board_info $hostname mondfe_host] - } else { - verbose "Attempting to connect to $hostname via mondfe." - set rh "host" - } - - set shell_id [remote_spawn $rh "$mondfe -D -TIP $remote_host"] - - remote_expect $rh 60 { - "$shell_prompt" { - verbose "Got prompt" - set result 0 - } - "*server bind*failed: Address already in use*" { - warning "Socket file already exists." - incr retries - if { $retries <= 2 } { - exp_continue - } - } - -indices -re ".*(UDIERROR\[^\r\n\]*)\[\r\n\]" { - warning "$expect_out(1,string)" - exp_continue - } - -indices -re ".*(DFEERROR\[^\r\n\]*)\[\r\n\]" { - warning "$expect_out(1,string)" - exp_continue - } - timeout { - warning "Timed out trying to connect." - set result -1 - incr retries - if { $retries <= 2 } { - remote_send $rh "\n" - exp_continue - } - } - } - - if { $result < 0 } { - perror "Couldn't connect after $retries retries." - remote_close $rh - return -1 - } else { - set board_info($hostname,fileid) $shell_id - return $shell_id - } -} - -# -# Downloads using the y (yank) command in mondfe -# -# FILE is a full path name to the file to download. -# Returns 1 if an error occured, 0 otherwise. -# -proc mondfe_ld { dest_machine file } { - global decimal # Regexp to match a decimal number. - - if ![file exists $file] { - perror "$file doesn't exist." - return "" - } - - set shell_prompt [board_info $dest_machine shell_prompt] - - if [board_info $dest_machine exists mondfe_host] { - set remote_host [board_info $dest_machine mondfe_host] - set file [remote_download $remote_host $file montest] - } else { - set remote_host "host" - } - - verbose "Downloading $file." 2 - verbose "Shell prompt is $shell_prompt." 3 - set result 1 - remote_send $remote_host "y $file\n" - remote_expect $remote_host 60 { - "y $file" { - exp_continue - } - -re "loading $file\[\r\n\]+" { - exp_continue - } - -re "Load(ing|ed) *TEXT section from\[^\r\n\]*\[\r\n\]+" { - verbose -n "." 2 - exp_continue - } - -re "Load(ing|ed) *LIT section from\[^\r\n\]*\[\r\n\]+" { - verbose -n "." 2 - exp_continue - } - -re "Load(ing|ed) *DATA section from\[^\r\n\]*\[\r\n\]+" { - verbose -n "." 2 - exp_continue - } - -re "Clear(ing|ed) *BSS section from\[^\r\n\]*\[\r\n\]+" { - verbose -n "." 2 - exp_continue - } - -re "(^|\[\r\n\]+)$shell_prompt$" { - verbose "Downloaded $file successfully." 2 - set result 0 - } - -re "Command failed.*$shell_prompt$" { - set result 1 - } - -re "DFEWARNING: $decimal : EMMAGIC: Bad COFF file magic number.*Command failed.*$shell_prompt$" { - warning "Bad COFF file magic number" - set result 1 - } - -re "Ignoring COMMENT section \($decimal bytes\)\[^\r\n\]*\[\r\n\]+" { - verbose "Ignoring COMMENT section" 2 - exp_continue - } - timeout { - perror "Timed out trying to download $file." - set result 1 - } - } - - if { $result && [info exists expect_out(buffer)] } { - send_log $expect_out(buffer) - } - - if [board_info $dest_machine exists mondfe_host] { - remote_file $remote_machine delete $file - } - - return $result -} - -# -# Exit the remote shell -# -proc mondfe_close { hostname } { - global board_info - - if [board_info $hostname exists mondfe_host] { - set remote_host [board_info $hostname mondfe_host] - } else { - set remote_host "host" - } - - if ![board_info $hostname exists fileid] { - return 0 - } - - if [board_info $remote_host exists fileid] { - remote_send $remote_host "q\n" - remote_expect $remote_host 30 { - "Goodbye." { - verbose "Exited mondfe." - } - timeout { - warning "mondfe didn't exit cleanly." - } - } - - remote_close $remote_host - } - - unset board_info($hostname,fileid) - - return 0 -} diff --git a/lib/remote.exp b/lib/remote.exp index 129b9eb..b57276e 100644 --- a/lib/remote.exp +++ b/lib/remote.exp @@ -19,10 +19,8 @@ # This file was written by Rob Savoye. (rob@welcomehome.org) -# load various protocol support modules +# Load various protocol support modules. -load_lib "mondfe.exp" -load_lib "xsh.exp" load_lib "telnet.exp" load_lib "rlogin.exp" load_lib "kermit.exp" diff --git a/lib/xsh.exp b/lib/xsh.exp deleted file mode 100644 index 5a3b64b..0000000 --- a/lib/xsh.exp +++ /dev/null @@ -1,322 +0,0 @@ -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -# 2001, 2002, 2003 Free Software Foundation, Inc. -# -# This file is part of DejaGnu. -# -# DejaGnu 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. -# -# DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -# This file was written by Rob Savoye. (rob@welcomehome.org) - -# -# Connect to Spectra (VTRX) using xsh -# -proc xsh_open { hostname } { - global hex - global target_triplet - global xsh_shell_prompt - global board_info - - if [board_info $hostname exists fileid] { - unset board_info($hostname,fileid) - } - - if ![board_info $hostname exists spectra] { - perror "No spectra directory for $hostname" - return -1 - } else { - set spectra [board_info $hostname spectra] - } - - if ![board_info $hostname exists xsh_shell_prompt] { - set xsh_shell_prompt ".*> " - } else { - set xsh_shell_prompt [board_info $hostname shell_prompt] - } - - set retries 0 - set result 0 - if ![board_info $hostname exists xsh_prog] { - set xsh xsh - } else { - set xsh [board_info $hostname xsh_prog] - } - - if {[which $xsh] != 0} { - spawn $xsh - } else { - warning "Can't find xsh in path" - return -1 - } - - set shell_id $spawn_id - - # start the shell - expect { - "*Spectra Cross-Development Shell version*$xsh_shell_prompt" { - verbose "Got prompt" - set result 0 - } - timeout { - warning "Timed out trying to connect." - set result -1 - incr retries - if { $retries <= 2 } { - exp_continue - } - } - } - - # connect to the shell - set retries 0 - send "connect $hostname\n" - expect { - "connect $hostname*$hostname connected \(non-os mode\)*\n" { - set xsh_shell_prompt "$hostname> " - verbose "Connected to $hostname" - } - "*connect: not attached*" { - warning "Couldn't attach target" - set result -1 - } - -re ".* reset on target.*$" { - send_user "Spectra was reset\n" - exp_continue - } - -re "\[0-9A-Fa-f\]+\[ 0x\]+\[0-9A-Fa-f\]+.*$" { - exp_continue - } - "$hostname> " { - #send "\n" - } - timeout { - warning "Timed out trying to connect after $expect_out(seconds) seconds." - set result -1 - incr retries - if { $retries <= 2 } { - exp_continue - } - } - } - - send "\n\n\n" - expect { - "*$hostname*$hostname" { - verbose "Cleared reset messages" 1 - } - timeout { - warning "Couldn't clear reset messages" - set result 1 - } - } - - set board_info($hostname,fileid) $spawn_id - # load to operating system - set timeout 20 - set retries 0 - if {[xsh_download $hostname $spectra/${target_triplet}-os.o "" {-e sys_start_crt0}]!=0} { - perror "Couldn't load Spectra into target" - return -1 - } - - set timeout 10 - # start the OS running - set retries 0 - send "go\n" - expect { - -re ".*Multithreading on target darkstar.*$" { - verbose "Spectra has been started..." 1 - set result 0 - } - -re ".*reset on target.*$" { - verbose "Spectra was reset" - exp_continue - } - -re "\[0-9A-Fa-f\]+\[ 0x\]+\[0-9A-Fa-f\]+.*$" { - #send "\n" - exp_continue - } - -re "go\n" { exp_continue } - "$xsh_shell_prompt" { exp_continue } - timeout { - perror "Spectra wouldn't start" - set result -1 - incr retries - if { $retries <= 2 } { - send "go\r" - exp_continue - } - } - } - - if { $result < 0 } { - perror "Couldn't connect after $retries retries.\n" - return -1 - } else { - set board_info($hostname,fileid) $spawn_id - return $spawn_id - } -} - -# -# Download an executable using the load command in Spectra. -# arg[0] - is a full path name to the file to download. -# arg[1] - optional arguments to the load command. -# returns 1 if a spectra error occured, -# -1 if an internal error occured, -# 0 otherwise. -# -proc xsh_download { dest file destfile args } { - global verbose - global shell_id - global decimal - global hex - global expect_out - global board_info - - set result 1 - set retries 0 - set shell_id [board_info $dest fileid] - - if { [llength $args] > 1 } { - set opts [lindex $args 1] - } else { - set opts "" - } - - if { [llength $args] > 0 } { - set destfile [lindex $args 0] - } - - if ![file exists $file] { - perror "$file doesn't exist." - return 1 - } - - verbose "Downloading $file..." - - send -i $shell_id "load $opts $file\r" - set force 0 - expect { - -i $shell_id -re "\[0-9A-Fa-f\]+\[ 0x\]+\[0-9A-Fa-f\]+\r\n" { - set timeout 1 - send "dout\n" - while $force<2 { - expect { - "dout*undefined kernel symbol*$xsh_shell_prompt" { - verbose "Attempted to flush I/O buffers" 1 - } - timout { - incr force - flush stdout - } - } - } - set timeout 20 - exp_continue - } - -i $shell_id "load $opts $file*\r" { - verbose "Loading a.out..." - exp_continue - } - -i $shell_id "Warm reset on target*\n" { - verbose "Spectra did a warm reset" - exp_continue - } - -i $shell_id "Cold reset on target*\n" { - verbose "Spectra did a cold reset" - exp_continue - } - -i $shell_id "loading a.out*\r" { - verbose "Loading a.out..." - exp_continue - } - -i $shell_id "reading symbols*\r" { - verbose "Reading symbols..." - exp_continue - } - -i $shell_id "defining symbols*\r" { - verbose "defining symbols..." - exp_continue - } - -i $shell_id "*loading image*\r" { - verbose "Loading image..." - exp_continue - } - -i $shell_id -re ".*bytes loaded:.*$decimal.*$" { - verbose "$expect_out(buffer)" - exp_continue - } - -i $shell_id "*loading done*\r" { - verbose "Loading done..." - exp_continue - } - -i $shell_id "*setting PC*\r" { - verbose "Setting PC..." - exp_continue - } - -i $shell_id "*resolving symbols*\r" { - verbose "Resolving symbols..." - exp_continue - } - -i $shell_id -re ".*load module id = $decimal.*$" { - verbose "" - } - -i $shell_id -re ".*load: undefined symbols.*$" { - perror "undefined symbols, make sure os is loaded and running" - set result -1 - } - -i $shell_id "$xsh_shell_prompt" { - set result 0 - exp_continue - } - -i $shell_id "load: no default target" { - perror "default target isn't set" - return -1 - } - -i $shell_id timeout { - perror "Timed out trying to download after $expect_out(seconds) seconds." - incr retries - set result 1 - if { $retries <= 2 } { - exp_continue - } - } - } - - set timeout 10 - if [info exists expect_out(buffer)] { - send_log $expect_out(buffer) - } - set board_info($hostname,fileid) $shell_id - return $result -} - -# -# Exit the remote shell -# -proc xsh_close { hostname } { - global board_info - - if ![board_info $hostname exists fileid] { - return - } - - set shell_id [board_info ${hostname} fileid] - send -i $shell_id "exit\n" - unset board_info(${hostname},fileid) - - verbose "Exiting shell." - return 0 -} |