diff options
author | Pedro Alves <palves@redhat.com> | 2019-03-07 16:35:06 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2019-03-07 16:35:06 +0000 |
commit | fe7266674110f34eacf2e9d2b308f76d33ce50ed (patch) | |
tree | 3fbd535992b05f1586534c519f0989c48e7d857a /gdb/infrun.c | |
parent | 7584bb30cf380cff9cc3914b1b523c5a1a5b4302 (diff) | |
download | gdb-fe7266674110f34eacf2e9d2b308f76d33ce50ed.zip gdb-fe7266674110f34eacf2e9d2b308f76d33ce50ed.tar.gz gdb-fe7266674110f34eacf2e9d2b308f76d33ce50ed.tar.bz2 |
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().
Diffstat (limited to 'gdb/infrun.c')
-rw-r--r-- | gdb/infrun.c | 3 |
1 files changed, 2 insertions, 1 deletions
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); |