| # Copyright (C) 1988, 1990, 1991, 1992, 1994, 1997 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, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| |
| # Please email any bugs, comments, and/or additions to this file to: |
| # bug-gdb@prep.ai.mit.edu |
| |
| # This file was written by J.T. Conklin. (jtc@cygnus.com) |
| |
| load_lib gdb.exp |
| load_lib remote.exp |
| |
| global shell_id |
| |
| global LD |
| if ![info exists LD] then { |
| set LD [findfile "$base_dir/../../ld/ld.new"] |
| } |
| |
| global NLMCONV |
| if ![info exists NLMCONV] then { |
| set NLMCONV [findfile "$base_dir/../../binutils/nlmconv"] |
| } |
| |
| # |
| # gdb_version -- extract and print the version number of gcc |
| # |
| proc gdb_version {} { |
| default_gdb_version |
| } |
| |
| # |
| # gdb_unload -- unload a file if one is loaded |
| # |
| |
| # |
| # gdb_load -- load a file into the debugger. |
| # return a -1 if anything goes wrong. |
| # |
| proc gdb_load { arg } { |
| global gdb_prompt |
| global LD |
| global NLMCONV |
| global errorCode |
| global shell_id |
| |
| # FIXME: this is wrong. |
| set targetname [target_info name]; |
| |
| set obj [file tail $arg] |
| set nlm "$obj.nlm" |
| set lnk "$obj.lnk" |
| |
| # build *.lnk file |
| set fd [open $lnk w] |
| puts $fd "description \"[file tail $nlm]\"" |
| puts $fd "screenname \"System Console\"" |
| puts $fd "module clib.nlm" |
| puts $fd "module mathlib.nlm" |
| puts $fd "stack 32768" |
| # puts $fd "stack 64512" |
| 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 $arg" |
| 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] { |
| warning "Can't link $arg" |
| |
| return -1 |
| } |
| catch "exec rm -f $lnk" |
| |
| # download |
| verbose "Downloading $nlm" 1 |
| catch "exec cp $nlm /.NetWare/$targetname.nws/sys.nwv/tmp/x.nlm" output |
| if ![string match "" $output] then { |
| verbose $output 1 |
| return -1 |
| } |
| |
| gdb_file_cmd $nlm |
| } |
| |
| proc gdb_run_cmd { } { |
| global shell_id |
| global gdb_prompt |
| global timeout |
| |
| set connhost [target_info name]; |
| if [board_info $connhost exists serial] { |
| set serialport [board_info $connhost serial]; |
| } else { |
| set serialport [board_info $connhost netport]; |
| } |
| |
| if [board_info $connhost exists baud] { |
| set baud [board_info $connhost baud]; |
| } else { |
| set baud 9600; |
| } |
| # FIXME: This is wrong. |
| send "kill\n" |
| gdb_expect { |
| -re ".*Kill the program being debugged.*y or n. $" { |
| send "y\n" |
| exp_continue |
| } |
| -re ".*$gdb_prompt $" {} |
| } |
| |
| verbose "Starting GDB stub on [target_info name]" 1 |
| send -i $shell_id "load nlmstub BAUD=$baud x.nlm\r\n" |
| |
| send "set remotebaud $baud\n" |
| gdb_expect { |
| -re "$gdb_prompt" {} |
| timeout { |
| perror "Couldn't set remote baud rate" |
| return |
| } |
| } |
| |
| set otimeout $timeout |
| set timeout 60 |
| verbose "Timeout is now $timeout seconds" 2 |
| send "target remote $serialport\n" |
| gdb_expect { |
| -re "Couldn't establish connection to remote target" { |
| send "target remote $serialport\n" |
| exp_continue |
| } |
| -re "$gdb_prompt" {} |
| timeout { |
| set timeout $otimeout |
| verbose "Timeout restored to $timeout seconds" 2 |
| perror "Couldn't set remote target" |
| return |
| } |
| } |
| set timeout $otimeout |
| verbose "Timeout restored to $timeout seconds" 2 |
| |
| send "continue\n" |
| gdb_expect { |
| "Continuing.$" {} |
| } |
| |
| return |
| } |
| |
| |
| |
| # |
| # start the remote shell |
| # |
| |
| set shell_prompt "Password:" |
| set shell_id [remote_open target] |
| |
| 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" |
| gdb_expect { |
| -i $shell_id ":" { |
| verbose "Got termtype prompt" 0 |
| } |
| |
| -i $shell_id timeout { |
| warning "Connection timed out" |
| return -1 |
| } |
| } |
| |
| |
| # FIXME: this is wrong. |
| set shell_prompt "[string toupper [target_info name]]:" |
| send -i $shell_id "1\n" |
| |
| gdb_expect { |
| -i $shell_id -re "$shell_prompt" {} |
| -i $shell_id timeout { |
| warning "Connection timed out" |
| return -1 |
| } |
| } |