gdb/infrun: enable/disable thread events of all targets in stop_all_threads
authorTankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Thu, 14 May 2020 11:59:54 +0000 (13:59 +0200)
committerTankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Thu, 14 May 2020 11:59:54 +0000 (13:59 +0200)
In stop_all_threads, the thread events of the current top target are
enabled at the beginning of the function and then disabled at the end
(at scope exit time).  Because there may be multiple targets whose
thread lists will be updated and whose threads are stopped,
enable/disable thread events for all targets.

This update caused a change in the annotations.  In particular, a
"frames-invalid" annotation is printed one more time due to switching
the current inferior.  Hence, gdb.base/annota1.exp and
gdb.cp/annota2.exp tests are also updated.

Regression-tested on X86_64 Linux using the default board file and the
native-extended-gdbserver board file.

gdb/ChangeLog:
2020-05-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

* infrun.c (stop_all_threads): Enable/disable thread events of all
targets.  Move a debug message denoting the end of the function
into the SCOPED_EXIT block.

gdb/testsuite/ChangeLog:
2020-05-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

* gdb.base/annota1.exp: Update the expected output.
* gdb.cp/annota2.exp: Ditto.

gdb/ChangeLog
gdb/infrun.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/annota1.exp
gdb/testsuite/gdb.cp/annota2.exp

index 9f93948d803127ca4f88d9f8903f60559b159566..6d56c04bc37d12c663a5abb534a26d85a12ff2ff 100644 (file)
@@ -1,3 +1,9 @@
+2020-05-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+       * infrun.c (stop_all_threads): Enable/disable thread events of all
+       targets.  Move a debug message denoting the end of the function
+       into the SCOPED_EXIT block.
+
 2020-05-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
 
        * process-stratum-target.h: Include <set>.
index c5bf2d0ad741b7c6ea5da06daf3cfa391a44db12..2a8e73c1111ced78f9dd74a80d83af45a0ad05b6 100644 (file)
@@ -4769,8 +4769,25 @@ stop_all_threads (void)
 
   scoped_restore_current_thread restore_thread;
 
-  target_thread_events (1);
-  SCOPE_EXIT { target_thread_events (0); };
+  /* Enable thread events of all targets.  */
+  for (auto *target : all_non_exited_process_targets ())
+    {
+      switch_to_target_no_thread (target);
+      target_thread_events (true);
+    }
+
+  SCOPE_EXIT
+    {
+      /* Disable thread events of all targets.  */
+      for (auto *target : all_non_exited_process_targets ())
+       {
+         switch_to_target_no_thread (target);
+         target_thread_events (false);
+       }
+
+      if (debug_infrun)
+       fprintf_unfiltered (gdb_stdlog, "infrun: stop_all_threads done\n");
+    };
 
   /* Request threads to stop, and then wait for the stops.  Because
      threads we already know about can spawn more threads while we're
@@ -4961,9 +4978,6 @@ stop_all_threads (void)
            }
        }
     }
-
-  if (debug_infrun)
-    fprintf_unfiltered (gdb_stdlog, "infrun: stop_all_threads done\n");
 }
 
 /* Handle a TARGET_WAITKIND_NO_RESUMED event.  */
index 98cff4690333b1fdfde65a1084a954cfb3ac38df..3ce59bc1c56c790e0617e8c5882621ba9f6d29e7 100644 (file)
@@ -1,3 +1,8 @@
+2020-05-14  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
+
+       * gdb.base/annota1.exp: Update the expected output.
+       * gdb.cp/annota2.exp: Ditto.
+
 2020-05-12  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * lib/check-test-names.exp: Disable when testing is being run in
index 9d3bf73431c9160ba873a374be6af95f2aaaafd8..829d144cc207afbf18c614a38e0a2390462d8e66 100644 (file)
@@ -223,7 +223,7 @@ gdb_test_multiple "break printf" "break printf" {
 #
 # get to printf
 #
-set pat_begin "\r\n\032\032post-prompt\r\nContinuing.\r\n\r\n\032\032starting\r\n\r\n\032\032frames-invalid\r\n${breakpoints_invalid}"
+set pat_begin "\r\n\032\032post-prompt\r\nContinuing.\r\n\r\n\032\032starting\r\n\r\n\032\032frames-invalid\r\n${breakpoints_invalid}\r\n\032\032frames-invalid\r\n"
 set pat_adjust "warning: Breakpoint 3 address previously adjusted from $hex to $hex.\r\n"
 set pat_end "\r\n\032\032breakpoint 3\r\n\r\nBreakpoint 3, \r\n\032\032frame-begin 0 $hex\r\n\r\n(\032\032frame-address\r\n$hex\r\n\032\032frame-address-end\r\n in \r\n)*.*\032\032frame-function-name\r\n.*printf(@.*)?\r\n\032\032frame-args\r\n.*\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$"
 
index dd3a0a5d6de741bdea6effe793a9170e3589117d..1b4f04bb44570e04b27668105f6efe2fb279b38b 100644 (file)
@@ -218,7 +218,7 @@ set pat [multi_line "" \
             "\032\032post-prompt" \
             "" \
             "\032\032starting" \
-            "\(${frames_invalid}\)*${breakpoints_invalid}" \
+            "\(${frames_invalid}\)*${breakpoints_invalid}\(${frames_invalid}\)*" \
             "\032\032watchpoint 3" \
             ".*atchpoint 3: a.x" \
             "" \