From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23176 invoked by alias); 3 Dec 2011 18:37:10 -0000 Received: (qmail 23164 invoked by uid 22791); 3 Dec 2011 18:37:08 -0000 X-SWARE-Spam-Status: No, hits=-7.2 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,SPF_HELO_PASS X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 03 Dec 2011 18:36:52 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id pB3Ial0m005381 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Sat, 3 Dec 2011 13:36:47 -0500 Received: from host2.jankratochvil.net (ovpn-116-69.ams2.redhat.com [10.36.116.69]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id pB3IaEno024703 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Sat, 3 Dec 2011 13:36:23 -0500 Date: Sat, 03 Dec 2011 18:37:00 -0000 From: Jan Kratochvil To: Pedro Alves Cc: gdb-patches@sourceware.org, Kevin Pouget , Tom Tromey Subject: ping: Re: [patch] Forbid "run" etc. for use_gdb_stub targets Message-ID: <20111203183613.GA15496@host2.jankratochvil.net> References: <201110271909.37066.pedro@codesourcery.com> <20111028174014.GB18885@host1.jankratochvil.net> <201110281917.44839.pedro@codesourcery.com> <20111029194745.GA12850@host1.jankratochvil.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20111029194745.GA12850@host1.jankratochvil.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-12/txt/msg00076.txt.bz2 I am a bit reluctant to check it on my own as I already made there some mistakes before. I see there is more work going on with this code. On Sat, 29 Oct 2011 21:47:45 +0200, Jan Kratochvil wrote: On Fri, 28 Oct 2011 20:17:44 +0200, Pedro Alves wrote: > Isn't this too late though? We do the [target_info exists use_gdb_stub] > check at the top of the test files, before gdbserver_start has had a chance > of running. So I'm guessing that in the first test that runs right > after the gdb.server/ tests complete, use_gdb_stub will be wrong at the top of > the test, but it'll get fixed by that test, so the following ones are right. > If that test file happen to have a use_gdb_stub check, it'll lose. > We may need to do this closer to gdb_init/default_gdb_init (or an override). I have tested it and you are right, I had some wrong dejagnu assumptions. Modifying target_info's use_gdb_stub is probably not much correct, therefore there is created global $use_gdb_stub instead. Global $use_gdb_stub is intentionally unset before gdb_start to cause errors trying to interpret the value before. Some problem is interpreting [target_info exists use_gdb_stub] after gdb_start is incorrect but it does not cause any sanity-check error. No regressions on {x86_64,x86_64-m32,i686}-fedora16pre-linux-gnu and with gdbserver. Thanks, Jan gdb/testsuite/ 2011-10-29 Jan Kratochvil * gdb.base/break-entry.exp: Move the target use_gdb_stub test before starting GDB. * gdb.base/default.exp: Replace target use_gdb_stub checks by global $use_gdb_stub. * gdb.base/display.exp: Likewise. * gdb.base/ending-run.exp: Likewise. * gdb.base/list.exp (test_listsize): Likewise. * gdb.base/setshow.exp: Likewise. * gdb.base/valgrind-db-attach.exp: Set global use_gdb_stub to 1. * lib/gdb.exp (gdb_run_cmd, gdb_start_cmd): Replace target use_gdb_stub check by global $use_gdb_stub. (gdb_test_multiple): Forbid run, start or attach for !$use_gdb_stub. (default_gdb_start): Set global use_gdb_stub from target use_gdb_stub. (default_gdb_init): Unset global $use_gdb_stub. (gdb_continue_to_end, rerun_to_main): Replace target use_gdb_stub check by global $use_gdb_stub. * lib/gdbserver-support.exp: Extend comments for set_board_info gdb_protocol and gdb,socketport, new comment for set_board_info use_gdb_stub. (gdbserver_start_extended): Set global gdbserver_protocol and gdbserver_gdbport. Clear global use_gdb_stub. * lib/mi-support.exp (default_mi_gdb_start): Set global use_gdb_stub from target use_gdb_stub. (mi_run_cmd): Replace target use_gdb_stub check by global $use_gdb_stub. --- a/gdb/testsuite/gdb.base/break-entry.exp +++ b/gdb/testsuite/gdb.base/break-entry.exp @@ -16,11 +16,6 @@ # Test inferior can stop at its very first instruction, usually "_start". # Dynamic executables have first instruction in ld.so. -set testfile break-entry -if { [prepare_for_testing ${testfile}.exp ${testfile} start.c {additional_flags=-static}] } { - return -1 -} - # If we're using a stub, we'll already be debugging a live program and # stopped at the entry point when we connect, and so the runto below # will issue a "continue", which always skips any breakpoint at PC. @@ -30,11 +25,17 @@ if { [prepare_for_testing ${testfile}.exp ${testfile} start.c {additional_flags= # continues the process with the equivalent of "jump *$PC", which # triggers any breakpoint at $PC. The latter is what we want to test. +set testfile break-entry + if [target_info exists use_gdb_stub] { untested ${testfile}.exp return } +if { [prepare_for_testing ${testfile}.exp ${testfile} start.c {additional_flags=-static}] } { + return -1 +} + set test "info files" set entry "" gdb_test_multiple $test $test { --- a/gdb/testsuite/gdb.base/default.exp +++ b/gdb/testsuite/gdb.base/default.exp @@ -39,7 +39,7 @@ gdb_test "append value" "Missing filename\." gdb_test "append binary memory" "Missing filename\." gdb_test "append binary value" "Missing filename\." -if ![target_info exists use_gdb_stub] { +if !$use_gdb_stub { setup_xfail "mips-idt-*" gdb_test_multiple "attach" "attach" { -re "Argument required .(process-id|program) to attach.*$gdb_prompt $"\ @@ -420,7 +420,7 @@ gdb_test "ptype" "The history is empty." "ptype" gdb_test "pwd" "Working directory .*" "pwd" #test run "r" abbreviation -if [target_info exists use_gdb_stub] { +if $use_gdb_stub { # Only extended-remote supports "run". } elseif [istarget "*-*-vxworks*"] then { gdb_test "set args" ".*" "" @@ -448,7 +448,7 @@ You must specify a function name to run, and arguments if any"\ } #test run -if [target_info exists use_gdb_stub] { +if $use_gdb_stub { # Only extended-remote supports "run". } elseif [istarget "*-*-vxworks*"] then { gdb_test "set args" ".*" "" --- a/gdb/testsuite/gdb.base/display.exp +++ b/gdb/testsuite/gdb.base/display.exp @@ -51,7 +51,7 @@ gdb_load ${binfile} # Some coverage stuff # -if ![target_info exists use_gdb_stub] { +if !$use_gdb_stub { gdb_test "kill" ".*The program is not being run.*" gdb_test "detach" ".*" gdb_test "run" ".*" --- a/gdb/testsuite/gdb.base/ending-run.exp +++ b/gdb/testsuite/gdb.base/ending-run.exp @@ -208,7 +208,7 @@ gdb_test_multiple "next" "step out of main" { set program_exited_normally 0 set program_not_exited 0 set program_in_exit 0 -if {! [target_info exists use_gdb_stub] +if {!$use_gdb_stub && (! [target_info exists use_cygmon] || ! [target_info use_cygmon])} { global program_exited; if {[eval expr $program_exited == 0]} { --- a/gdb/testsuite/gdb.base/list.exp +++ b/gdb/testsuite/gdb.base/list.exp @@ -81,7 +81,7 @@ proc set_listsize { arg } { # proc test_listsize {} { - global gdb_prompt + global gdb_prompt use_gdb_stub global hp_cc_compiler global hp_aCC_compiler @@ -94,7 +94,7 @@ proc test_listsize {} { # list the lines there instead of main, so we skip this test for remote targets. # The second case is for optimized code, it is still correct. - if [target_info exists use_gdb_stub] { + if $use_gdb_stub { runto_main; unsupported "list default lines around main"; } else { --- a/gdb/testsuite/gdb.base/setshow.exp +++ b/gdb/testsuite/gdb.base/setshow.exp @@ -97,7 +97,7 @@ gdb_test_no_output "set args foo bar blup baz bubble" "set args" gdb_test "show args" "Argument list to give program being debugged when it is started is \"foo bar blup baz bubble\"..*" "show args" # Don't test if we can't pass args or if we're using a stub. -if { ![target_info exists use_gdb_stub] && ![target_info exists noargs] } { +if { !$use_gdb_stub && ![target_info exists noargs] } { #test passing args gdb_test "cont" "Continuing.*" "continuing" delete_breakpoints --- a/gdb/testsuite/gdb.base/valgrind-db-attach.exp +++ b/gdb/testsuite/gdb.base/valgrind-db-attach.exp @@ -41,6 +41,9 @@ pass $test # Declare GDB now as running. set gdb_spawn_id -1 +# This value applies to GDB spawned by valgrind --db-attach=yes. +set use_gdb_stub 1 + set test "valgrind started" # The trailing '.' differs for different memcheck versions. gdb_test_multiple "" $test { --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -196,7 +196,7 @@ proc delete_breakpoints {} { # elsewhere. # proc gdb_run_cmd {args} { - global gdb_prompt + global gdb_prompt use_gdb_stub if [target_info exists gdb_init_command] { send_gdb "[target_info gdb_init_command]\n"; @@ -209,7 +209,7 @@ proc gdb_run_cmd {args} { } } - if [target_info exists use_gdb_stub] { + if $use_gdb_stub { if [target_info exists gdb,do_reload_on_run] { if { [gdb_reload] != 0 } { return; @@ -302,7 +302,7 @@ proc gdb_run_cmd {args} { # if we could not. proc gdb_start_cmd {args} { - global gdb_prompt + global gdb_prompt use_gdb_stub if [target_info exists gdb_init_command] { send_gdb "[target_info gdb_init_command]\n"; @@ -315,7 +315,7 @@ proc gdb_start_cmd {args} { } } - if [target_info exists use_gdb_stub] { + if $use_gdb_stub { return -1 } @@ -582,7 +582,7 @@ proc gdb_internal_error_resync {} { # ...", all being implicitly appended to that list. # proc gdb_test_multiple { command message user_code } { - global verbose + global verbose use_gdb_stub global gdb_prompt global GDB global inferior_exited_re @@ -601,6 +601,12 @@ proc gdb_test_multiple { command message user_code } { error "Invalid newline in \"$message\" test" } + if {$use_gdb_stub + && [regexp -nocase {^\s*(r|run|star|start|at|att|atta|attac|attach)\M} \ + $command]} { + error "gdbserver does not support $command without extended-remote" + } + # TCL/EXPECT WART ALERT # Expect does something very strange when it receives a single braced # argument. It splits it along word separators and performs substitutions. @@ -1316,7 +1322,7 @@ proc gdb_file_cmd { arg } { # get really slow. Give gdb at least 3 minutes to start up. # proc default_gdb_start { } { - global verbose + global verbose use_gdb_stub global GDB global INTERNAL_GDBFLAGS GDBFLAGS global gdb_prompt @@ -1325,6 +1331,9 @@ proc default_gdb_start { } { gdb_stop_suppressing_tests; + # Set the default value, it may be overriden later by specific testfile. + set use_gdb_stub [target_info exists use_gdb_stub] + verbose "Spawning $GDB $INTERNAL_GDBFLAGS $GDBFLAGS" if [info exists gdb_spawn_id] { @@ -2951,6 +2960,10 @@ proc default_gdb_init { args } { } else { set gdb_prompt "\\(gdb\\)" } + global use_gdb_stub + if [info exists use_gdb_stub] { + unset use_gdb_stub + } } # The default timeout used when testing GDB commands. We want to use @@ -3297,7 +3310,7 @@ proc gdb_get_line_number { text { file "" } } { # is accepted. proc gdb_continue_to_end {{mssg ""} {command continue} {allow_extra 0}} { - global inferior_exited_re + global inferior_exited_re use_gdb_stub if {$mssg == ""} { set text "continue until exit" @@ -3309,7 +3322,7 @@ proc gdb_continue_to_end {{mssg ""} {command continue} {allow_extra 0}} { } else { set extra "" } - if [target_info exists use_gdb_stub] { + if $use_gdb_stub { if {![gdb_breakpoint "exit"]} { return 0 } @@ -3326,9 +3339,9 @@ proc gdb_continue_to_end {{mssg ""} {command continue} {allow_extra 0}} { } proc rerun_to_main {} { - global gdb_prompt + global gdb_prompt use_gdb_stub - if [target_info exists use_gdb_stub] { + if $use_gdb_stub { gdb_run_cmd gdb_expect { -re ".*Breakpoint .*main .*$gdb_prompt $"\ --- a/gdb/testsuite/lib/gdbserver-support.exp +++ b/gdb/testsuite/lib/gdbserver-support.exp @@ -22,6 +22,14 @@ # # set_board_info gdb_protocol "remote" # Unles you have a gdbserver that uses a different protocol... +# After GDB starts you should check global $gdbserver_protocol instead as +# the testfile may force a specific different target protocol itself. +# +# set_board_info use_gdb_stub +# Flag the inferior is already started after connecting and run/attach +# are not supported. This is used for the "remote" protocol. +# After GDB starts you should check global $use_gdb_stub instead as the +# testfile may force a specific different target protocol itself. # # set_board_info gdb_server_prog # This will be the path to the gdbserver program you want to test. @@ -35,6 +43,8 @@ # set_board_info gdb,socketport # Port id to use for socket connection. If not set explicitly, # it will start at "2345" and increment for each use. +# After GDB starts you should check global $gdbserver_gdbport for the +# real port used. It is not useful if $gdbserver_reconnect_p was not set. # # @@ -337,9 +347,17 @@ proc gdbserver_reconnect { } { # Start and connect to a gdbserver in extended mode. proc gdbserver_start_extended { } { + global gdbserver_protocol + global gdbserver_gdbport + global use_gdb_stub + set res [gdbserver_start "--multi" ""] set gdbserver_protocol "extended-[lindex $res 0]" set gdbserver_gdbport [lindex $res 1] + # For both native mode and for stub-using gdbserver target board we run + # a new gdbserver in extended-remote mode, therefore without stub. + set use_gdb_stub 0 + return [gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport] } --- a/gdb/testsuite/lib/mi-support.exp +++ b/gdb/testsuite/lib/mi-support.exp @@ -96,7 +96,7 @@ proc mi_uncatched_gdb_exit {} { # get really slow. Give gdb at least 3 minutes to start up. # proc default_mi_gdb_start { args } { - global verbose + global verbose use_gdb_stub global GDB global INTERNAL_GDBFLAGS GDBFLAGS global gdb_prompt @@ -108,6 +108,9 @@ proc default_mi_gdb_start { args } { gdb_stop_suppressing_tests; set inferior_pty no-tty + # Set the default value, it may be overriden later by specific testfile. + set use_gdb_stub [target_info exists use_gdb_stub] + if { [llength $args] == 1} { set inferior_pty [lindex $args 0] } @@ -788,7 +791,7 @@ proc mi_run_cmd {args} { if { $suppress_flag } { return -1 } - global mi_gdb_prompt + global mi_gdb_prompt use_gdb_stub global thread_selected_re global library_loaded_re @@ -807,7 +810,7 @@ proc mi_run_cmd {args} { return -1 } - if [target_info exists use_gdb_stub] { + if $use_gdb_stub { if [target_info exists gdb,do_reload_on_run] { send_gdb "220-exec-continue\n"; gdb_expect 60 {