Add "info connections" command, "info inferiors" connection number/string
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.threads / fork-plus-threads.exp
index 8a503ec6c84f714367c236a0dbadea371837339e..8d36b96810ba6bb69f564437ea7f26b955e87b09 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2015 Free Software Foundation, Inc.
+# Copyright (C) 2015-2020 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 #
 # See https://sourceware.org/bugzilla/show_bug.cgi?id=18600
 
+# In remote mode, we cannot continue debugging after all
+# inferiors have terminated, and this test requires that.
+if { [target_info exists gdb_protocol]
+     && [target_info gdb_protocol] == "remote" } {
+    continue
+}
+
 standard_testfile
 
 proc do_test { detach_on_fork } {
@@ -39,7 +46,7 @@ proc do_test { detach_on_fork } {
     set GDBFLAGS $saved_gdbflags
 
     if ![runto_main] then {
-       fail "Can't run to main"
+       fail "can't run to main"
        return 0
     }
 
@@ -51,18 +58,58 @@ proc do_test { detach_on_fork } {
        }
     }
 
+    # gdbserver had a bug that resulted in reporting the fork child's
+    # initial stop to gdb, which gdb does not expect, in turn
+    # resulting in a broken session, like:
+    #
+    #  [Thread 31536.31536] #16 stopped.                                <== BAD
+    #  [New Thread 31547.31547]
+    #  [Inferior 10 (process 31536) exited normally]
+    #  [New Thread 31547.31560]
+    #
+    #  [Thread 31547.31547] #18 stopped.                                <== BAD
+    #  Cannot remove breakpoints because program is no longer writable. <== BAD
+    #  Further execution is probably impossible.                        <== BAD
+    #  [Inferior 11 (process 31547) exited normally]
+    #  [Inferior 1 (process 31454) exited normally]
+    #
+    # These variables track whether we see such broken behavior.
+    set saw_cannot_remove_breakpoints 0
+    set saw_thread_stopped 0
+
     set test "inferior 1 exited"
     gdb_test_multiple "" $test {
+       -re "Cannot remove breakpoints" {
+           set saw_cannot_remove_breakpoints 1
+           exp_continue
+       }
+       -re "Thread \[^\r\n\]+ stopped\\." {
+           set saw_thread_stopped 1
+           exp_continue
+       }
+       -re "Thread \[^\r\n\]+ exited" {
+           # Avoid timeout with check-read1
+           exp_continue
+       }
+       -re "New Thread \[^\r\n\]+" {
+           # Avoid timeout with check-read1
+           exp_continue
+       }
        -re "Inferior 1 \(\[^\r\n\]+\) exited normally" {
            pass $test
        }
     }
 
+    gdb_assert !$saw_cannot_remove_breakpoints \
+       "no failure to remove breakpoints"
+    gdb_assert !$saw_thread_stopped \
+       "no spurious thread stop"
+
     gdb_test "info threads" "No threads\." \
        "no threads left"
 
     gdb_test "info inferiors" \
-       "Num\[ \t\]+Description\[ \t\]+Executable\[ \t\]+\r\n\\* 1 \[^\r\n\]+" \
+       "Num\[ \t\]+Description\[ \t\]+Connection\[ \t\]+Executable\[ \t\]+\r\n\\* 1 \[^\r\n\]+" \
        "only inferior 1 left"
 }
 
This page took 0.026457 seconds and 4 git commands to generate.