1 # Test Framework Driver
for GDB driving a ROM
monitor (via
monitor.c
).
2 # Copyright
1995, 1996, 1997, 1998, 1999, 2000
3 # Free Software Foundation
, Inc.
5 # This
program is free software
; you can redistribute it and
/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation
; either version
2 of the License
, or
8 #
(at your option
) any later version.
10 # This
program is distributed in the hope that it will be useful
,
11 # but WITHOUT
ANY WARRANTY
; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License
for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this
program; if not
, write to the Free Software
17 # Foundation
, Inc.
, 59 Temple Place
- Suite
330, Boston
, MA
02111-1307, USA.
20 # puts
"***** DID USE MONITOR ******"
24 # Send gdb the
"target" command
26 proc gdb_target_cmd
{ targetname serialport
} {
29 for {set i
1} {$i
<= 3} {incr i
} {
30 send_gdb
"target $targetname $serialport\n"
32 -re
"A program is being debugged already.*ill it.*y or n. $" {
36 -re
"Couldn't establish connection to remote.*$gdb_prompt" {
37 verbose
"Connection failed";
39 -re
"Remote MIPS debugging.*$gdb_prompt" {
40 verbose
"Set target to $targetname";
43 -re
"Remote debugging using .*$serialport.*$gdb_prompt" {
44 verbose
"Set target to $targetname";
47 -re
"Remote target $targetname connected to.*$gdb_prompt" {
48 verbose
"Set target to $targetname";
51 -re
"Connected to.*$gdb_prompt" {
52 verbose
"Set target to $targetname";
55 -re
"Ending remote.*$gdb_prompt" { }
56 -re
"Connection refused.*$gdb_prompt" {
57 verbose
"Connection refused by remote target. Pausing, and trying again."
61 -re
"Timeout reading from remote system.*$gdb_prompt" {
62 verbose
"Got timeout error from gdb.";
77 #
Set gdb to target the
monitor
79 proc gdb_target_monitor
{ exec_file
} {
84 if [target_info
exists gdb_protocol
] {
85 set targetname
"[target_info gdb_protocol]"
87 perror
"No protocol specified for [target_info name].";
90 if [target_info
exists baud
] {
91 gdb_test
"set remotebaud [target_info baud]" "" ""
93 if [target_info
exists binarydownload
] {
94 gdb_test
"set remotebinarydownload [target_info binarydownload]" "" ""
96 if { [ target_info
exists disable_x_packet
] } {
97 gdb_test
"set remote X-packet disable" ""
99 if { [ target_info
exists disable_z_packet
] } {
100 gdb_test
"set remote Z-packet disable" ""
102 if [target_info
exists gdb_serial
] {
103 set serialport
"[target_info gdb_serial]";
104 } elseif
[target_info
exists netport
] {
105 set serialport
"[target_info netport]"
107 set serialport
"[target_info serial]"
110 for {set j
1} {$j
<= 2} {incr j
} {
111 if [gdb_file_cmd $exec_file
] { return -1; }
113 if ![gdb_target_cmd $targetname $serialport
] { return 0; }
117 if { $j
== 1 && ![reboot_target
] } {
122 perror
"Couldn't set target for $targetname, port is $serialport.";
126 proc gdb_target_exec
{ } {
127 gdb_test
"target exec" "No executable file now." "" ".*Kill it.*y or n.*" "y"
131 # gdb_load
-- load a file into the debugger.
132 #
return a
-1 if anything goes wrong.
134 proc gdb_load
{ arg } {
141 global last_gdb_file
;
143 if [target_info
exists gdb_download_size
] {
144 send_gdb
"set download-write-size [target_info gdb_download_size]\n";
146 -re
"$gdb_prompt $" { }
148 perror
"Setting download-write-size for target failed";
155 if [info exists last_gdb_file
] {
156 set arg $last_gdb_file
;
158 send_gdb
"info files\n";
160 -re
"Symbols from \"(\[^\"\]+)\"" {
161 set arg $expect_out
(1,string
);
164 -re
"Local exec file:\[\r\n\]+\[ \t\]*`(\[^'\]+)'," {
165 set arg $expect_out
(1,string
);
168 -re
"$gdb_prompt $" { }
173 set last_gdb_file $
arg;
175 for { set j
1; } { $j
<= 2 } {incr j
; } {
176 if [target_info
exists gdb
,use_standard_load
] {
178 if ![target_info
exists gdb
,no_push_conn
] {
179 remote_push_conn host
;
181 set state
[remote_ld target $
arg];
182 if ![target_info
exists gdb
,no_push_conn
] {
184 remote_pop_conn host
;
186 if { $state
== "pass" } {
187 if [gdb_target_monitor $
arg] { return -1; }
188 gdb_test
"list main" ".*" ""
189 verbose
"Loaded $arg into $GDB\n";
194 if [gdb_target_monitor $
arg] { return -1 }
196 if [is_remote host
] {
197 # FIXME
: Multiple downloads. bleah.
198 set farg
[remote_download host $
arg];
203 if { $
arg != "" && [target_info exists gdb_sect_offset] } {
204 set textoff
[target_info gdb_sect_offset
];
205 send_gdb
"sect .text $textoff\n";
207 -re
"(0x\[0-9a-z]+) - 0x\[0-9a-z\]+ is \\.data" {
208 set dataoff $expect_out
(1,string
);
211 -re
"(0x\[0-9a-z\]+) - 0x\[0-9a-z\]+ is \\.bss" {
212 set bssoff $expect_out
(1,string
);
215 -re
"$gdb_prompt" { }
217 set dataoff
[format
0x
%x
[expr $dataoff
+ $textoff
]];
218 set bssoff
[format
0x
%x
[expr $bssoff
+ $textoff
]];
219 send_gdb
"sect .data $dataoff\n";
221 -re
"$gdb_prompt" { }
223 send_gdb
"sect .bss $bssoff\n";
225 -re
"$gdb_prompt" { }
229 verbose
"Loading $farg"
230 if [target_info
exists gdb_load_offset
] {
231 set command
"load $farg [target_info gdb_load_offset]\n";
233 set command
"load $farg\n";
235 if [target_info
exists gdb_load_timeout
] {
236 set loadtimeout
[target_info gdb_load_timeout
]
242 gdb_expect $loadtimeout
{
243 -re
"\[Ff\]ailed.*$gdb_prompt $" {
244 verbose
"load failed";
246 -re
"Timeout reading from remote.*$gdb_prompt" {
248 -re
"$gdb_prompt $" {
249 verbose
"Loaded $farg into $GDB\n"
253 if { $verbose
> 1 } {
254 perror
"Timed out trying to load $farg."
260 # Make sure we don
't have an open connection to the target.
264 if { ![reboot_target] } {
269 perror "Couldn't
load file into GDB.
";