From e5b9b39f8872fa01efb9c7f8ce7283fb9cd5122d Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Mon, 22 Feb 2021 00:18:10 +0000 Subject: target_is_non_stop_p and sync targets gdb.base/maint-target-async-off.exp fails if you test against gdbserver with "maint set target-non-stop on" forced. (gdb) run Starting program: build/gdb/testsuite/outputs/gdb.base/maint-target-async-off/maint-target-async-off Breakpoint 1, main () at src/gdb/testsuite/gdb.base/maint-target-async-off.c:21 21 return 0; (gdb) FAIL: gdb.base/maint-target-async-off.exp: continue until exit (timeout) Above, GDB just stopped listening to stdin. Basically, GDB assumes that a target working in non-stop mode operation also supports async mode; it's a requirement. GDB misbehaves badly otherwise, and even hits failed assertions. Fix this by making target_is_non_stop_p return false if async is off. gdb/ChangeLog: * target.c (target_always_non_stop_p): Also check whether the target can async. Change-Id: I7e52e1061396a5b9b02ada462f68a14b76d68974 --- gdb/target.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'gdb/target.c') diff --git a/gdb/target.c b/gdb/target.c index 3653a7a..51832c5 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -4370,10 +4370,11 @@ target_always_non_stop_p (void) bool target_is_non_stop_p () { - return (non_stop - || target_non_stop_enabled == AUTO_BOOLEAN_TRUE - || (target_non_stop_enabled == AUTO_BOOLEAN_AUTO - && target_always_non_stop_p ())); + return ((non_stop + || target_non_stop_enabled == AUTO_BOOLEAN_TRUE + || (target_non_stop_enabled == AUTO_BOOLEAN_AUTO + && target_always_non_stop_p ())) + && target_can_async_p ()); } /* See target.h. */ -- cgit v1.1