# Copyright (C) 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This file was written by J.T. Conklin. (jtc@cygnus.com) # # load support libraries # load_lib remote.exp # set target variables only if needed proc ${board}_init { args } { global NLMCONV if {![info exists NLMCONV]} then { set NLMCONV [findfile "$rootme/../binutils/nlmconv"] } global LD if {![info exists LD]} then { set LD [findfile "$rootme/../ld/ld-new" "$rootme/../ld/ld-new" [transform "ld"]] } set shell_prompt "Password:" set shell_id [remote_open target] if {[target_info exists passwd]} { set passwd [target_info passwd] } else { set passwd "" } if $shell_id<0 then { warning "Couldn't connect to target" return -1 } if {[string match "" $passwd]} then { stty -echo send_user "Password: " expect_user -re "(.*)\n" send_user "\n" set passwd "$expect_out(1,string)" stty echo } send -i $shell_id "$passwd\n" expect { -i $shell_id ":" { verbose "Got termtype prompt" 0 } -i $shell_id timeout { warning "Connection timed out" return -1 } } # FIXME set shell_prompt "[string toupper [target_info name]]:" send -i $shell_id "1\n" expect { -i $shell_id -re "$shell_prompt" {} -i $shell_id timeout { warning "Connection timed out" return -1 } } } # # ${board}_load -- load the program and execute it # # See default.exp for explanation of arguments and results. # proc ${board}_load { dest prog args } { global LD NLMCONV global tmpdir global errorCode if {[board_info $dest exists fileid]} { set shell_id [board_info $dest fileid] } else { set shell_id -1 } set output "" if $shell_id<0 then { verbose -log "$prog not executed because there is no target" 3 return "untested" } # set exe [file tail $prog] # We can't blindly append a suffix to the object name, because the # result may not be valid on netware's 8.3 filesystem. set nlm "$tmpdir/x.nlm" set lnk "$tmpdir/x.lnk" # build *.lnk file set fd [open $lnk w] puts $fd "description \"$exe\"" puts $fd "screenname \"System Console\"" puts $fd "module clib.nlm" puts $fd "module mathlib.nlm" puts $fd "stack 65536" puts $fd "debug" # FIXME: don't hardcode location of prelude.o puts $fd "input /s1/cygnus/dejagnu/i386-netware/lib/prelude.o" puts $fd "input $prog" puts $fd "output $nlm" close $fd # run nlmconv verbose "Executing: $NLMCONV -l$LD -T$lnk" 1 catch "exec $NLMCONV -l$LD -T$lnk" output if {![string match "" $output]} then { verbose $output 1 } if {![string match "NONE" $errorCode]} { verbose -log "Can't link $prog" 3 return "fail" } # download verbose "Downloading $nlm" 1 catch "exec cp $nlm /.NetWare/[board_info $dest name].nws/sys.nwv/tmp/x.nlm" output if {![string match "" $output]} then { verbose $output 1 verbose -log "cp failed for $nlm" 3 return "unresolved" } # Wait a second for the file to "settle" on the NetWare server. # I've encountered unexplained failures without this delay. # sleep 1 # The NetWare remote console expects to be connected to a vt100 # compatible terminal. It isn't very efficent, and it seems to # send screen repaints for no reason. So we have to clear the # screen as we run each test, otherwise a shell prompt or abort # message from a previous test could cause incorrect results. send -i $shell_id "CLS\r\n" set timeout 1 expect { -i $shell_id -re "$shell_prompt" { exp_continue } } set timeout 10 # Netware does not support exit status. The best we can do to # detect failures is to look for the "ABNORMAL NLM TERMINATION" # message printed by abort(). set ret 0 send -i $shell_id "LOAD X.NLM\r\n" expect { -i $shell_id "ABNORMAL NLM TERMINATION" { set ret 1 exp_continue } -i $shell_id "Unable to find load file" { perror "Couldn't execute program" verbose -log "Couldn't execute program" 3 return "unresolved" } -i $shell_id timeout { perror "Couldn't execute program (timed out)" verbose -log "Couldn't execute program (timed out)" 3 return "unresolved" } -i $shell_id -re "[format "%sLOAD" $shell_prompt]" { exp_continue } -i $shell_id -re "$shell_prompt" {} } catch [exec rm -f $lnk] catch [exec rm -f $nlm] if { $ret == 0 } { return "pass" } else { return "fail" } } # # ${tool}_exit -- shutdown the connection # proc ${board}_exit {} { remote_close target }