gdb/testsuite/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Sat, 3 Dec 2011 20:20:29 +0000 (20:20 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Sat, 3 Dec 2011 20:20:29 +0000 (20:20 +0000)
* 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.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/break-entry.exp
gdb/testsuite/gdb.base/default.exp
gdb/testsuite/gdb.base/display.exp
gdb/testsuite/gdb.base/ending-run.exp
gdb/testsuite/gdb.base/list.exp
gdb/testsuite/gdb.base/setshow.exp
gdb/testsuite/gdb.base/valgrind-db-attach.exp
gdb/testsuite/lib/gdb.exp
gdb/testsuite/lib/gdbserver-support.exp
gdb/testsuite/lib/mi-support.exp

index a2c160ce422f6b78cc9dd477f5a1be57d8bae9b6..860201c35b8ada834758643a071731cfcb2514b8 100644 (file)
@@ -1,3 +1,30 @@
+2011-12-03  Jan Kratochvil  <jan.kratochvil@redhat.com>
+           Pedro Alves  <pedro@codesourcery.com>
+
+       * 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  <dje@google.com>
 
        * lib/gdb.exp (gdb_run_cmd, gdb_start_cmd, run_to_main): Add comments.
index 9e1a14c6b39476b6b8792021bbd5e2b1b44bd268..d748ad299a7089960ed1affc6918fb6128a2fbfb 100644 (file)
 # 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 {
index 4b7a8f5c1b4fc068269db3cb890381971e95bbeb..e23ac21835070846a194ac80f09fafa8dd8646b8 100644 (file)
@@ -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" ".*" "" 
index fcf8511912290802b8d9cdf560bb788e3dd3f52f..fc3c47eacc66ba3693b5ebb09d06cfef48160aa7 100644 (file)
@@ -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" ".*"
index 0098f046278efa92e59c34edec34a63e4bc35a85..1de1ed008b3b9544a44e1d62457238e2bfa35a50 100644 (file)
@@ -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]} {
index 5b9fe15b57ee66086bc2d14824868c2ae3ac9c9a..d967dd2384d4a507a11dfc74b9c89771432fdd78 100644 (file)
@@ -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 {
index ef32f1cecf963a423f92cc2a3db7d6c6cab474ad..c360993d11fb872146218b161a84d17634e54803 100644 (file)
@@ -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
index 98cc07a7d12f8f38008fb8a2a4e87d2ffbd79e0d..e3199b29bd3b496abb7fad339c3e6005378716b5 100644 (file)
@@ -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 {
index 1823e006c3f7c33500f271f28bc19d864c6a7910..1a9270d62570601f1eb2f88c60000de50fe46b87 100644 (file)
@@ -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 $"\
index ec88b66a57a5246d7cc38b6e1aaa2ad9a980d526..22c786083001e480f789f6b932ea077f62a8f2e7 100644 (file)
@@ -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]
 }
index 32949fa18220c4309fb49288d2aebba86313e575..e1845f6b91c8783a277eb1c101321fdfa8c07bee 100644 (file)
@@ -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 {