mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 10:34:21 +08:00
[gdb] Fix assert in remote_async_get_pending_events_handler
Occassionally I run into the following assert: ... (gdb) PASS: gdb.multi/multi-target-continue.exp: inferior 5 Remote debugging from host ::1, port 49990^M Process multi-target-continue created; pid = 31241^M src/gdb/remote-notif.c:113: internal-error: \ void remote_async_get_pending_events_handler(gdb_client_data): \ Assertion `target_is_non_stop_p ()' failed.^M ... The assert checks target_is_non_stop_p, which is related to the current target. Fix this by changing the assert such that it checks non-stopness related to the event it's handling. Tested on x86_64-linux. gdb/ChangeLog: 2021-04-22 Simon Marchi <simon.marchi@polymtl.ca> Tom de Vries <tdevries@suse.de> PR remote/27710 * remote.c (remote_target_is_non_stop_p): New function. * remote.h (remote_target_is_non_stop_p): Declare. * remote-notif.c (remote_async_get_pending_events_handler): Fix assert to check non-stopness using notif_state->remote rather current target.
This commit is contained in:
@ -1,3 +1,12 @@
|
|||||||
|
2021-04-22 Simon Marchi <simon.marchi@polymtl.ca>
|
||||||
|
Tom de Vries <tdevries@suse.de>
|
||||||
|
|
||||||
|
PR remote/27710
|
||||||
|
* remote.c (remote_target_is_non_stop_p): New function.
|
||||||
|
* remote.h (remote_target_is_non_stop_p): Declare.
|
||||||
|
* remote-notif.c (remote_async_get_pending_events_handler): Fix assert
|
||||||
|
to check non-stopness using notif_state->remote rather current target.
|
||||||
|
|
||||||
2021-04-22 Tom Tromey <tom@tromey.com>
|
2021-04-22 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* rust-parse.c (rust_parser::parse_sizeof): Remove KW_MUT code.
|
* rust-parse.c (rust_parser::parse_sizeof): Remove KW_MUT code.
|
||||||
|
@ -110,7 +110,7 @@ remote_async_get_pending_events_handler (gdb_client_data data)
|
|||||||
{
|
{
|
||||||
remote_notif_state *notif_state = (remote_notif_state *) data;
|
remote_notif_state *notif_state = (remote_notif_state *) data;
|
||||||
clear_async_event_handler (notif_state->get_pending_events_token);
|
clear_async_event_handler (notif_state->get_pending_events_token);
|
||||||
gdb_assert (target_is_non_stop_p ());
|
gdb_assert (remote_target_is_non_stop_p (notif_state->remote));
|
||||||
remote_notif_process (notif_state, NULL);
|
remote_notif_process (notif_state, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
11
gdb/remote.c
11
gdb/remote.c
@ -14730,6 +14730,17 @@ remote_target::store_memtags (CORE_ADDR address, size_t len,
|
|||||||
return packet_check_result (rs->buf.data ()) == PACKET_OK;
|
return packet_check_result (rs->buf.data ()) == PACKET_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return true if remote target T is non-stop. */
|
||||||
|
|
||||||
|
bool
|
||||||
|
remote_target_is_non_stop_p (remote_target *t)
|
||||||
|
{
|
||||||
|
scoped_restore_current_thread restore_thread;
|
||||||
|
switch_to_target_no_thread (t);
|
||||||
|
|
||||||
|
return target_is_non_stop_p ();
|
||||||
|
}
|
||||||
|
|
||||||
#if GDB_SELF_TEST
|
#if GDB_SELF_TEST
|
||||||
|
|
||||||
namespace selftests {
|
namespace selftests {
|
||||||
|
@ -77,4 +77,5 @@ extern int remote_register_number_and_offset (struct gdbarch *gdbarch,
|
|||||||
|
|
||||||
extern void remote_notif_get_pending_events (remote_target *remote,
|
extern void remote_notif_get_pending_events (remote_target *remote,
|
||||||
struct notif_client *np);
|
struct notif_client *np);
|
||||||
|
extern bool remote_target_is_non_stop_p (remote_target *t);
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user