From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17001 invoked by alias); 7 Sep 2003 04:10:46 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 16977 invoked from network); 7 Sep 2003 04:10:43 -0000 Received: from unknown (HELO nevyn.them.org) (66.93.172.17) by sources.redhat.com with SMTP; 7 Sep 2003 04:10:43 -0000 Received: from drow by nevyn.them.org with local (Exim 4.22 #1 (Debian)) id 19vqsp-0002ho-V2; Sun, 07 Sep 2003 00:10:39 -0400 Date: Sun, 07 Sep 2003 04:10:00 -0000 From: Daniel Jacobowitz To: gdb-patches@sources.redhat.com Cc: cagney@redhat.com, ezannoni@redhat.com Subject: Re: [RFA: mi testsuite] Gdbserver support for the MI testsuite Message-ID: <20030907041039.GA10340@nevyn.them.org> Mail-Followup-To: gdb-patches@sources.redhat.com, cagney@redhat.com, ezannoni@redhat.com References: <20030622042226.GA25362@nevyn.them.org> <20030817205713.GC11300@nevyn.them.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: <20030817205713.GC11300@nevyn.them.org> User-Agent: Mutt/1.5.1i X-SW-Source: 2003-09/txt/msg00094.txt.bz2 Ping? On Sun, Aug 17, 2003 at 04:57:13PM -0400, Daniel Jacobowitz wrote: > On Sun, Jun 22, 2003 at 12:22:26AM -0400, Daniel Jacobowitz wrote: > > Updated and improved version of a patch I've posted several times over = the > > last year and a half or so. This adds support for gdbserver-style remo= te > > stubs to the MI testsuite; the differences between the MI support and n= on-MI > > support are mostly cosmetic at this point (i.e. it doesn't go out of it= s way > > to use -target-select). Just handles the different prompt. > >=20 > > There's still an unnecessary restart of gdbserver every test; fixing th= at is > > going to take some serious work. > >=20 > > Results with the patch are OK: linux-proc tests fail, not surprisingly; > > gcore fails; there are some new thread failures since I last updated it > > which I will have to investigate. But most of the MI tests pass instea= d of > > timing out. > >=20 > > Does this patch look OK for 6.0? > Would one of our MI testsuite maintainers kindly comment on this patch? > > 2003-06-22 Daniel Jacobowitz > >=20 > > * config/gdbserver.exp (gdb_load): Rename to gdbserver_gdb_load. > > Add an "mi" flag argument. Handle the MI prompt and quoting. Use > > mi_gdb_file_cmd and mi_gdb_target_cmd. Redirect gdbserver > > output to /dev/null. > > (gdb_load, mi_gdb_load): New wrappers for gdbserver_gdb_load. > > * config/monitor.exp (mi_gdb_target_cmd): New function, based on > > gdb_target_cmd. > > * lib/gdb.exp: Require mi-support.exp, so that we can override > > functions from it in target config files. > > * lib/mi-support.exp (mi_gdb_file_cmd): New function, broken out > > from mi_gdb_load. Download binaries to the target. > > (mi_gdb_load): Call mi_gdb_file_cmd. > >=20 > > Index: testsuite/config/gdbserver.exp > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > RCS file: /cvs/src/src/gdb/testsuite/config/gdbserver.exp,v > > retrieving revision 1.5 > > diff -u -p -r1.5 gdbserver.exp > > --- testsuite/config/gdbserver.exp 19 Jul 2002 19:40:28 -0000 1.5 > > +++ testsuite/config/gdbserver.exp 22 Jun 2003 04:10:25 -0000 > > @@ -89,12 +89,13 @@ global server_exec; > > global portnum; > > set portnum "2345"; > >=20=20 > > -proc gdb_load { arg } { > > +proc gdbserver_gdb_load { mi arg } { > > global host_exec; > > global server_exec; > > global portnum; > > global verbose; > > global gdb_prompt; > > + global mi_gdb_prompt; > >=20=20 > > # Port id -- either specified in baseboard file, or managed here. > > if [target_info exists gdb,socketport] { > > @@ -138,16 +139,30 @@ proc gdb_load { arg } { > > if { $arg =3D=3D "" } { > > if { ! [info exists host_exec] } { > > send_gdb "info files\n"; > > - gdb_expect 30 { > > - -re "Symbols from \"(\[^\"\]+)\"" { > > - set host_exec $expect_out(1,string); > > - exp_continue; > > - } > > - -re "Local exec file:\[\r\n\]+\[ \t\]*`(\[^'\]+)'," { > > - set host_exec $expect_out(1,string); > > - exp_continue; > > + if { $mi =3D=3D 0 } { > > + gdb_expect 30 { > > + -re "Symbols from \"(\[^\"\]+)\"" { > > + set host_exec $expect_out(1,string); > > + exp_continue; > > + } > > + -re "Local exec file:\[\r\n\]+\[ \t\]*`(\[^'\]+)'," { > > + set host_exec $expect_out(1,string); > > + exp_continue; > > + } > > + -re "$gdb_prompt $" { } > > + } > > + } else { > > + gdb_expect 30 { > > + -re "~\"Symbols from \\\\\"(\[^\"\]+)\\\\\"\." { > > + set host_exec $expect_out(1,string); > > + exp_continue; > > + } > > + -re "~\"Local exec file:\\\\n\"\[\r\n\]+~\"\\\\t`(\[^'\]+)'," { > > + set host_exec $expect_out(1,string); > > + exp_continue; > > + } > > + -re "$mi_gdb_prompt$" { } > > } > > - -re "$gdb_prompt $" { } > > } > > } > > } else { > > @@ -173,8 +188,10 @@ proc gdb_load { arg } { > > } else { > > # This flavour of gdbserver takes as arguments the port inform= ation > > # and the name of the executable file to be debugged. > > + # Redirect output to /dev/null, to prevent write() from blocking > > + # (since we aren't reading from it, yet.) > > set server_spawn_id [remote_spawn target \ > > - "$gdbserver $sockethost$portnum $server_exec"] > > + "sh -c {$gdbserver $sockethost$portnum $server_exec > /dev/null 2= > /dev/null}"] > > }=20 > >=20=20 > > # We can't call close, because if gdbserver is local then that mea= ns > > @@ -187,40 +204,72 @@ proc gdb_load { arg } { > >=20=20 > > # tell gdb what file we are debugging > > if { $arg !=3D "" } { > > - if [gdb_file_cmd $arg] { > > - return -1; > > + if { $mi =3D=3D 0 } { > > + if [gdb_file_cmd $arg] { > > + return -1; > > + } > > + } else { > > + if [mi_gdb_file_cmd $arg] { > > + return -1; > > + } > > } > > } > >=20=20 > > # attach to the "serial port" > > - gdb_target_cmd $protocol $gdbport; > > + if { $mi =3D=3D 0 } { > > + gdb_target_cmd $protocol $gdbport > > + } else { > > + mi_gdb_target_cmd $protocol $gdbport > > + } > >=20=20 > > # do the real load if needed > > if [target_info exists gdb_server_do_load] { > > send_gdb "load\n" > > set timeout 2400 > > verbose "Timeout is now $timeout seconds" 2 > > - gdb_expect { > > - -re ".*$gdb_prompt $" { > > - if $verbose>1 then { > > - send_user "Loaded $arg into $GDB\n" > > - } > > - set timeout 30 > > - verbose "Timeout is now $timeout seconds" 2 > > - return 1 > > - } > > - -re "$gdb_prompt $" { > > - if $verbose>1 then { > > - perror "GDB couldn't load." > > - } > > - } > > - timeout { > > - if $verbose>1 then { > > - perror "Timed out trying to load $arg." > > - } > > - } > > - } > > + > > + if { $mi =3D=3D 0 } { > > + gdb_expect { > > + -re ".*$gdb_prompt $" { > > + if $verbose>1 then { > > + send_user "Loaded $server_exec into $GDB\n" > > + } > > + set timeout 30 > > + verbose "Timeout is now $timeout seconds" 2 > > + return 1 > > + } > > + timeout { > > + if $verbose>1 then { > > + perror "Timed out trying to load $server_exec." > > + } > > + } > > + } > > + } else { > > + gdb_expect { > > + -re ".*$mi_gdb_prompt$" { > > + if $verbose>1 then { > > + send_user "Loaded $server_exec into $GDB\n" > > + } > > + set timeout 30 > > + verbose "Timeout is now $timeout seconds" 2 > > + return 1 > > + } > > + timeout { > > + if $verbose>1 then { > > + perror "Timed out trying to load $server_exec." > > + } > > + } > > + } > > + } > > } > >=20=20 > > return 0; > > +} > > + > > +proc gdb_load { arg } { > > + gdbserver_gdb_load 0 $arg > > +} > > + > > +proc mi_gdb_load { arg } { > > + gdbserver_gdb_load 1 $arg > > } > > Index: testsuite/config/monitor.exp > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > RCS file: /cvs/src/src/gdb/testsuite/config/monitor.exp,v > > retrieving revision 1.5 > > diff -u -p -r1.5 monitor.exp > > --- testsuite/config/monitor.exp 15 Mar 2001 21:46:57 -0000 1.5 > > +++ testsuite/config/monitor.exp 22 Jun 2003 04:10:25 -0000 > > @@ -71,6 +71,55 @@ proc gdb_target_cmd { targetname serialp > > } > >=20=20 > >=20=20 > > +# Much the same, but for MI. > > +proc mi_gdb_target_cmd { targetname serialport } { > > + global mi_gdb_prompt > > + > > + for {set i 1} {$i <=3D 3} {incr i} { > > + send_gdb "target $targetname $serialport\n" > > + gdb_expect 60 { > > + -re "Couldn't establish connection to remote.*$mi_gdb_prompt$" { > > + verbose "Connection failed"; > > + } > > + -re "Remote MIPS debugging.*$mi_gdb_prompt$" { > > + verbose "Set target to $targetname"; > > + return 0; > > + } > > + -re "Remote debugging using .*$serialport.*$mi_gdb_prompt$" { > > + verbose "Set target to $targetname"; > > + return 0; > > + } > > + -re "Remote target $targetname connected to.*$mi_gdb_prompt$" { > > + verbose "Set target to $targetname"; > > + return 0; > > + } > > + -re "Connected to.*$mi_gdb_prompt$" {=20 > > + verbose "Set target to $targetname"; > > + return 0; > > + } > > + -re "Ending remote.*$mi_gdb_prompt$" { } > > + -re "Connection refused.*$mi_gdb_prompt$" { > > + verbose "Connection refused by remote target. Pausing, and trying a= gain." > > + sleep 30 > > + continue > > + } > > + -re "Timeout reading from remote system.*$mi_gdb_prompt$" { > > + verbose "Got timeout error from gdb."; > > + } > > + -re "\\^done,.*$mi_gdb_prompt$" { > > + verbose "Set target to $targetname" > > + return 0 > > + } > > + timeout { > > + send_gdb "=03"; > > + break > > + } > > + } > > + } > > + return 1 > > +} > > + > > + > >=20=20 > > # > > # gdb_target_monitor > > Index: testsuite/lib/gdb.exp > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > RCS file: /cvs/src/src/gdb/testsuite/lib/gdb.exp,v > > retrieving revision 1.37 > > diff -u -p -r1.37 gdb.exp > > --- testsuite/lib/gdb.exp 1 May 2003 01:09:51 -0000 1.37 > > +++ testsuite/lib/gdb.exp 22 Jun 2003 04:10:25 -0000 > > @@ -26,6 +26,7 @@ > > # or by passing arguments. > >=20=20 > > load_lib libgloss.exp > > +load_lib mi-support.exp > >=20=20 > > global GDB > >=20=20 > > Index: testsuite/lib/mi-support.exp > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > RCS file: /cvs/src/src/gdb/testsuite/lib/mi-support.exp,v > > retrieving revision 1.23 > > diff -u -p -r1.23 mi-support.exp > > --- testsuite/lib/mi-support.exp 22 Jun 2003 00:04:27 -0000 1.23 > > +++ testsuite/lib/mi-support.exp 22 Jun 2003 04:10:25 -0000 > > @@ -282,10 +282,10 @@ proc mi_gdb_reinitialize_dir { subdir }=20 > > } > >=20=20 > > # > > -# load a file into the debugger. > > +# load a file into the debugger (file command only). > > # return a -1 if anything goes wrong. > > # > > -proc mi_gdb_load { arg } { > > +proc mi_gdb_file_cmd { arg } { > > global verbose > > global loadpath > > global loadfile > > @@ -300,16 +300,21 @@ proc mi_gdb_load { arg } { > >=20=20 > > set last_mi_gdb_file $arg; > >=20=20 > > - # ``gdb_unload'' > > + if [is_remote host] { > > + set arg [remote_download host $arg]; > > + if { $arg =3D=3D "" } { > > + error "download failed" > > + return -1; > > + } > > + } > >=20=20 > > - # ``gdb_file_cmd'' > > # FIXME: Several of these patterns are only acceptable for console > > # output. Queries are an error for mi. > > send_gdb "105-file-exec-and-symbols $arg\n" > > gdb_expect 120 { > > -re "Reading symbols from.*done.*$mi_gdb_prompt$" { > > verbose "\t\tLoaded $arg into the $GDB" > > - # All OK > > + return 0 > > } > > -re "has no symbol-table.*$mi_gdb_prompt$" { > > perror "$arg wasn't compiled with \"-g\"" > > @@ -338,14 +343,15 @@ proc mi_gdb_load { arg } { > > return -1 > > } > > -re "105-file-exec-and-symbols .*\r\n105\\\^done\r\n$mi_gdb_pr= ompt$" { > > - # We are just giving the prompt back for now > > - # All OK > > - } > > + # We (MI) are just giving the prompt back for now, instead= of giving > > + # some acknowledgement. > > + return 0 > > + } > > timeout { > > perror "couldn't load $arg into $GDB (timed out)." > > return -1 > > } > > - eof { > > + eof { > > # This is an attempt to detect a core dump, but seems not = to > > # work. Perhaps we need to match .* followed by eof, in w= hich > > # gdb_expect does not seem to have a way to do that. > > @@ -353,7 +359,24 @@ proc mi_gdb_load { arg } { > > return -1 > > } > > } > > -=20=20=20=20 > > +} > > + > > +# > > +# load a file into the debugger. > > +# return a -1 if anything goes wrong. > > +# > > +proc mi_gdb_load { arg } { > > + global verbose > > + global loadpath > > + global loadfile > > + global GDB > > + global mi_gdb_prompt > > + upvar timeout timeout > > + > > + # ``gdb_unload'' > > + > > + mi_gdb_file_cmd $arg > > + > > # ``load'' > > if { [info procs send_target_sid] !=3D "" } { > > # For SID, things get complex > >=20 --=20 Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer