diff options
Diffstat (limited to 'config/unix.exp')
-rw-r--r-- | config/unix.exp | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/config/unix.exp b/config/unix.exp new file mode 100644 index 0000000..d3e7fab --- /dev/null +++ b/config/unix.exp @@ -0,0 +1,134 @@ +# Copyright (C) 92, 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-gcc@prep.ai.mit.edu + +# This file was written by Rob Savoye. (rob@cygnus.com) + +if ![info exists board] { + error "must set $board before loading unix.exp" +} + +# For rcp_download, rsh_exec. +load_lib remote.exp + +# +# unix_load -- load the program and execute it +# +# See default.exp for explanation of arguments and results. +# + + +proc unix_load { dest prog args } { + global ld_library_path + set output ""; + + if { [llength $args] > 0 } { + set parg [lindex $args 0]; + } else { + set parg "" + } + + if { [llength $args] > 1 } { + set inp [lindex $args 1]; + } else { + set inp "" + } + + if ![file exists $prog] then { + # We call both here because this should never happen. + perror "$prog does not exist in unix_load." + verbose -log "$prog does not exist." 3 + return "untested" + } + verbose "loading to $dest" 2 + if ![is_remote $dest] { + if { "$inp" != "" } { + set command "$prog $parg < $inp" + } else { + set command "$prog $parg"; + } + + if [info exists ld_library_path] { + setenv LD_LIBRARY_PATH $ld_library_path + setenv SHLIB_PATH $ld_library_path + } + + set id [remote_spawn $dest "$command" "readonly"]; + if { $id < 0 } { + set output "remote_spawn failed" + set status -1; + } else { + set status [remote_wait $dest 300]; + set output [lindex $status 1]; + set status [lindex $status 0]; + } + # Unset them so we don't potentially get hosed when we try to run a + # non-testcase executable. (Setting LD_LIBRARY_PATH is the wrong + # fix in the first place; this just tries to minimize the resulting + # crap.) + if [info exists ld_library_path] { + unsetenv LD_LIBRARY_PATH + unsetenv SHLIB_PATH + } + } else { + set remotefile "/tmp/[file tail $prog].[pid]" + set remotefile [remote_download $dest $prog $remotefile]; + if { $remotefile == "" } { + verbose -log "Download of $prog to [board_info $dest name] failed." 3 + return [list "unresolved" ""]; + } + if [board_info $dest exists remote_link] { + if [[board_info $dest remote_link] $remotefile] { + verbose -log "Couldn't do remote link" + remote_exec $dest "\\rm -f $remotefile" + return [list "unresolved" ""] + } + + verbose "$prog linked ok" 3 + } else { + # rcp's to lynx seem not to get marked executable + set status [remote_exec $dest "chmod +x $remotefile"] + if { [lindex $status 0] != 0 } { + remote_file $dest delete ${remotefile}.o $remotefile + verbose -log "chmod +x of $prog on $dest failed." 3 + return [list "unresolved" ""]; + } + } + set status [remote_exec $dest "$remotefile" $parg $inp] + remote_file $dest delete $remotefile.o $remotefile; + if { [lindex $status 0] < 0 } { + verbose -log "Couldn't execute $prog, [lindex $status 1]" 3 + return [list "unresolved" ""] + } + set output [lindex $status 1] + set status [lindex $status 0] + } + + verbose "Executed $prog, status $status" 2 + if ![string match "" $output] { + verbose -- "$output" 2 + } + if { $status == 0 } { + set result "pass"; + } else { + set result "fail"; + } + return [list $result $output]; +} + +set_board_info protocol "unix"; |