This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[pushed] Fix normal_stop latent bug
- From: Pedro Alves <palves at redhat dot com>
- To: gdb-patches at sourceware dot org
- Date: Thu, 7 Mar 2019 17:46:28 +0000
- Subject: [pushed] 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 <palves@redhat.com>
* 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 d3d6e5b4ee..5614e7887d 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2019-03-07 Pedro Alves <palves@redhat.com>
+
+ * infrun.c (normal_stop): Also check for
+ TARGET_WAITKIND_NO_RESUMED before referring to inferior_thread().
+
2019-03-07 Andrew Burgess <andrew.burgess@embecosm.com>
* f-lang.c (value_from_host_double): Moved to...
diff --git a/gdb/infrun.c b/gdb/infrun.c
index 61467be029..33e5d434b3 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.14.4