diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index a2c160ce42..860201c35b 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,30 @@ +2011-12-03 Jan Kratochvil + Pedro Alves + + * 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. + (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. + 2011-12-03 Doug Evans * lib/gdb.exp (gdb_run_cmd, gdb_start_cmd, run_to_main): Add comments. diff --git a/gdb/testsuite/gdb.base/break-entry.exp b/gdb/testsuite/gdb.base/break-entry.exp index 9e1a14c6b3..d748ad299a 100644 --- 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 { diff --git a/gdb/testsuite/gdb.base/default.exp b/gdb/testsuite/gdb.base/default.exp index 4b7a8f5c1b..e23ac21835 100644 --- 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" ".*" "" diff --git a/gdb/testsuite/gdb.base/display.exp b/gdb/testsuite/gdb.base/display.exp index fcf8511912..fc3c47eacc 100644 --- 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" ".*" diff --git a/gdb/testsuite/gdb.base/ending-run.exp b/gdb/testsuite/gdb.base/ending-run.exp index 0098f04627..1de1ed008b 100644 --- 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]} { diff --git a/gdb/testsuite/gdb.base/list.exp b/gdb/testsuite/gdb.base/list.exp index 5b9fe15b57..d967dd2384 100644 --- 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 { diff --git a/gdb/testsuite/gdb.base/setshow.exp b/gdb/testsuite/gdb.base/setshow.exp index ef32f1cecf..c360993d11 100644 --- 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 diff --git a/gdb/testsuite/gdb.base/valgrind-db-attach.exp b/gdb/testsuite/gdb.base/valgrind-db-attach.exp index 98cc07a7d1..e3199b29bd 100644 --- a/gdb/testsuite/gdb.base/valgrind-db-attach.exp +++ b/gdb/testsuite/gdb.base/valgrind-db-attach.exp @@ -41,6 +41,11 @@ pass $test # Declare GDB now as running. set gdb_spawn_id -1 +# GDB spawned by `valgrind --db-attach=yes' stops already after the startup is +# executed, like with non-extended gdbserver. It is also not correct to +# run/attach the inferior. +set use_gdb_stub 1 + set test "valgrind started" # The trailing '.' differs for different memcheck versions. gdb_test_multiple "" $test { diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 1823e006c3..1a9270d625 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -197,7 +197,7 @@ proc delete_breakpoints {} { # that is the caller's responsibility. 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"; @@ -210,7 +210,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; @@ -306,7 +306,7 @@ proc gdb_run_cmd {args} { # that is the caller's responsibility. 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"; @@ -319,7 +319,7 @@ proc gdb_start_cmd {args} { } } - if [target_info exists use_gdb_stub] { + if $use_gdb_stub { return -1 } @@ -587,7 +587,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 @@ -606,6 +606,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. @@ -1317,7 +1323,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 @@ -1326,6 +1332,15 @@ proc default_gdb_start { } { gdb_stop_suppressing_tests; + # Set the default value, it may be overriden later by specific testfile. + # + # Use `set_board_info use_gdb_stub' for the board file to 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 of the board as the testfile may force + # a specific different target protocol itself. + set use_gdb_stub [target_info exists use_gdb_stub] + verbose "Spawning $GDB $INTERNAL_GDBFLAGS $GDBFLAGS" if [info exists gdb_spawn_id] { @@ -2978,6 +2993,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 @@ -3350,7 +3369,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" @@ -3362,7 +3381,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 } @@ -3379,9 +3398,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 $"\ diff --git a/gdb/testsuite/lib/gdbserver-support.exp b/gdb/testsuite/lib/gdbserver-support.exp index ec88b66a57..22c7860830 100644 --- a/gdb/testsuite/lib/gdbserver-support.exp +++ b/gdb/testsuite/lib/gdbserver-support.exp @@ -22,6 +22,8 @@ # # 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 gdb_server_prog # This will be the path to the gdbserver program you want to test. @@ -35,6 +37,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. # # @@ -338,9 +342,18 @@ 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] + # Even if the board file is testing with target remote, our caller + # wants to test against gdbserver in extended-remote mode. Make sure to + # disable stub-like techniques. + set use_gdb_stub 0 + return [gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport] } diff --git a/gdb/testsuite/lib/mi-support.exp b/gdb/testsuite/lib/mi-support.exp index 32949fa182..e1845f6b91 100644 --- 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] } @@ -793,7 +796,7 @@ proc mi_run_cmd_full {use_mi_command 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 @@ -820,7 +823,7 @@ proc mi_run_cmd_full {use_mi_command 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 "${run_prefix}continue\n"; gdb_expect 60 {