1# Copyright (C) 1988, 1990, 1991, 1992, 1994, 1997 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 2 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program; if not, write to the Free Software 15# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 16 17# Please email any bugs, comments, and/or additions to this file to: 18# bug-gdb@prep.ai.mit.edu 19 20# This file was written by J.T. Conklin. (jtc@cygnus.com) 21 22load_lib gdb.exp 23load_lib remote.exp 24 25global shell_id 26 27global LD 28if ![info exists LD] then { 29 set LD [findfile "$base_dir/../../ld/ld.new"] 30} 31 32global NLMCONV 33if ![info exists NLMCONV] then { 34 set NLMCONV [findfile "$base_dir/../../binutils/nlmconv"] 35} 36 37# 38# gdb_version -- extract and print the version number of gcc 39# 40proc gdb_version {} { 41 default_gdb_version 42} 43 44# 45# gdb_unload -- unload a file if one is loaded 46# 47 48# 49# gdb_load -- load a file into the debugger. 50# return a -1 if anything goes wrong. 51# 52proc gdb_load { arg } { 53 global gdb_prompt 54 global LD 55 global NLMCONV 56 global errorCode 57 global shell_id 58 59 # FIXME: this is wrong. 60 set targetname [target_info name]; 61 62 set obj [file tail $arg] 63 set nlm "$obj.nlm" 64 set lnk "$obj.lnk" 65 66 # build *.lnk file 67 set fd [open $lnk w] 68 puts $fd "description \"[file tail $nlm]\"" 69 puts $fd "screenname \"System Console\"" 70 puts $fd "module clib.nlm" 71 puts $fd "module mathlib.nlm" 72 puts $fd "stack 32768" 73# puts $fd "stack 64512" 74 puts $fd "debug" 75 # FIXME: don't hardcode location of prelude.o 76 puts $fd "input /s1/cygnus/dejagnu/i386-netware/lib/prelude.o" 77 puts $fd "input $arg" 78 puts $fd "output $nlm" 79 close $fd 80 81 # run nlmconv 82 verbose "Executing: $NLMCONV -l$LD -T$lnk" 1 83 catch "exec $NLMCONV -l$LD -T$lnk" output 84 if ![string match "" $output] then { 85 verbose $output 1 86 } 87 if ![string match "NONE" $errorCode] { 88 warning "Can't link $arg" 89 90 return -1 91 } 92 catch "exec rm -f $lnk" 93 94 # download 95 verbose "Downloading $nlm" 1 96 catch "exec cp $nlm /.NetWare/$targetname.nws/sys.nwv/tmp/x.nlm" output 97 if ![string match "" $output] then { 98 verbose $output 1 99 return -1 100 } 101 102 gdb_file_cmd $nlm 103} 104 105proc gdb_run_cmd { } { 106 global shell_id 107 global gdb_prompt 108 global timeout 109 110 set connhost [target_info name]; 111 if [board_info $connhost exists serial] { 112 set serialport [board_info $connhost serial]; 113 } else { 114 set serialport [board_info $connhost netport]; 115 } 116 117 if [board_info $connhost exists baud] { 118 set baud [board_info $connhost baud]; 119 } else { 120 set baud 9600; 121 } 122 # FIXME: This is wrong. 123 send "kill\n" 124 gdb_expect { 125 -re ".*Kill the program being debugged.*y or n. $" { 126 send "y\n" 127 exp_continue 128 } 129 -re ".*$gdb_prompt $" {} 130 } 131 132 verbose "Starting GDB stub on [target_info name]" 1 133 send -i $shell_id "load nlmstub BAUD=$baud x.nlm\r\n" 134 135 send "set remotebaud $baud\n" 136 gdb_expect { 137 -re "$gdb_prompt" {} 138 timeout { 139 perror "Couldn't set remote baud rate" 140 return 141 } 142 } 143 144 set otimeout $timeout 145 set timeout 60 146 verbose "Timeout is now $timeout seconds" 2 147 send "target remote $serialport\n" 148 gdb_expect { 149 -re "Couldn't establish connection to remote target" { 150 send "target remote $serialport\n" 151 exp_continue 152 } 153 -re "$gdb_prompt" {} 154 timeout { 155 set timeout $otimeout 156 verbose "Timeout restored to $timeout seconds" 2 157 perror "Couldn't set remote target" 158 return 159 } 160 } 161 set timeout $otimeout 162 verbose "Timeout restored to $timeout seconds" 2 163 164 send "continue\n" 165 gdb_expect { 166 "Continuing.$" {} 167 } 168 169 return 170} 171 172 173 174# 175# start the remote shell 176# 177 178set shell_prompt "Password:" 179set shell_id [remote_open target] 180 181if $shell_id<0 then { 182 warning "Couldn't connect to target" 183 return -1 184} 185 186if [string match "" $passwd] then { 187 stty -echo 188 send_user "Password: " 189 expect_user -re "(.*)\n" 190 send_user "\n" 191 set passwd "$expect_out(1,string)" 192 stty echo 193} 194 195send -i $shell_id "$passwd\n" 196gdb_expect { 197 -i $shell_id ":" { 198 verbose "Got termtype prompt" 0 199 } 200 201 -i $shell_id timeout { 202 warning "Connection timed out" 203 return -1 204 } 205} 206 207 208# FIXME: this is wrong. 209set shell_prompt "[string toupper [target_info name]]:" 210send -i $shell_id "1\n" 211 212gdb_expect { 213 -i $shell_id -re "$shell_prompt" {} 214 -i $shell_id timeout { 215 warning "Connection timed out" 216 return -1 217 } 218} 219