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().
This commit is contained in:
Pedro Alves 2019-03-07 16:35:06 +00:00
parent 7584bb30cf
commit fe72666741
2 changed files with 7 additions and 1 deletions

View File

@ -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...

View File

@ -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);