gdb/infrun: enable/disable thread events of all targets in stop_all_threads

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.
This commit is contained in:
Tankut Baris Aktemur 2020-05-14 13:59:54 +02:00
parent d890404b63
commit 6ad8291970
5 changed files with 32 additions and 7 deletions

View 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>.

View 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. */

View 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

View 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$"

View 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" \
"" \