| # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 |
| } |