aboutsummaryrefslogtreecommitdiff
path: root/config/unix.exp
diff options
context:
space:
mode:
Diffstat (limited to 'config/unix.exp')
-rw-r--r--config/unix.exp134
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";