From fe7266674110f34eacf2e9d2b308f76d33ce50ed Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Thu, 7 Mar 2019 16:35:06 +0000 Subject: [PATCH] Fix normal_stop latent bug TARGET_WAITKIND_NO_RESUMED doesn't have an associated event thread, so we shouldn't be referring to inferior_thread() assuming it points to one. This was caught on the multi-target branch, where we always switch to no-thread-selected whenever we start handling an event, exactly to catch places that incorrectly use "inferior_ptid/inferior_thread()" without switching to the right event thread / target. Here, on the branch, we assert in inferior_thread() because TARGET_WAITKIND_NO_RESUMED doesn't have an associated event thread, so inferior_ptid is still null_ptid. gdb/ChangeLog: 2019-03-07 Pedro Alves * infrun.c (normal_stop): Also check for TARGET_WAITKIND_NO_RESUMED before referring to inferior_thread(). --- gdb/ChangeLog | 5 +++++ gdb/infrun.c | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d3d6e5b..5614e78 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2019-03-07 Pedro Alves + + * infrun.c (normal_stop): Also check for + TARGET_WAITKIND_NO_RESUMED before referring to inferior_thread(). + 2019-03-07 Andrew Burgess * f-lang.c (value_from_host_double): Moved to... diff --git a/gdb/infrun.c b/gdb/infrun.c index 61467be..33e5d43 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -8146,7 +8146,8 @@ normal_stop (void) if (target_has_execution) { if (last.kind != TARGET_WAITKIND_SIGNALLED - && last.kind != TARGET_WAITKIND_EXITED) + && last.kind != TARGET_WAITKIND_EXITED + && last.kind != TARGET_WAITKIND_NO_RESUMED) /* Delete the breakpoint we stopped at, if it wants to be deleted. Delete any breakpoint that is to be deleted at the next stop. */ breakpoint_auto_delete (inferior_thread ()->control.stop_bpstat); -- 2.7.4