infrun: switch to NO_HISTORY thread
A thread that runs out of its execution history is stopped. We already set stop_pc and call stop_waiting. But we do not switch to the stopped thread. In normal_stop, we call finish_thread_state_cleanup to set a thread's running state. In all-stop mode, we call it with minus_one_ptid; in non-stop mode, we only call it for inferior_ptid. If in non-stop mode normal_stop is called on behalf of a thread that is not inferior_ptid, that other thread will still be reported as running. If it is actually stopped it can't be resumed again. Record targets traditionally don't support non-stop and only resume inferior_ptid. So this has not been a problem, so far. Switch to the eventing thread for NO_HISTORY events as preparation to support non-stop for the record btrace target. gdb/ * infrun.c (handle_inferior_event_1): Switch to the eventing thread in the TARKET_WAITKIND_NO_HISTORY case.
This commit is contained in:
parent
a6b5be76f9
commit
d1988021e3
|
@ -1,3 +1,8 @@
|
||||||
|
2015-09-18 Markus Metzger <markus.t.metzger@intel.com>
|
||||||
|
|
||||||
|
* infrun.c (handle_inferior_event_1): Switch to the eventing thread
|
||||||
|
in the TARKET_WAITKIND_NO_HISTORY case.
|
||||||
|
|
||||||
2015-09-18 Markus Metzger <markus.t.metzger@intel.com>
|
2015-09-18 Markus Metzger <markus.t.metzger@intel.com>
|
||||||
|
|
||||||
* record-btrace.c (record_btrace_maybe_mark_async_event): New.
|
* record-btrace.c (record_btrace_maybe_mark_async_event): New.
|
||||||
|
|
|
@ -5126,8 +5126,14 @@ Cannot fill $_exitsignal with the correct signal number.\n"));
|
||||||
fprintf_unfiltered (gdb_stdlog, "infrun: TARGET_WAITKIND_NO_HISTORY\n");
|
fprintf_unfiltered (gdb_stdlog, "infrun: TARGET_WAITKIND_NO_HISTORY\n");
|
||||||
/* Reverse execution: target ran out of history info. */
|
/* Reverse execution: target ran out of history info. */
|
||||||
|
|
||||||
|
/* Switch to the stopped thread. */
|
||||||
|
if (!ptid_equal (ecs->ptid, inferior_ptid))
|
||||||
|
context_switch (ecs->ptid);
|
||||||
|
if (debug_infrun)
|
||||||
|
fprintf_unfiltered (gdb_stdlog, "infrun: stopped\n");
|
||||||
|
|
||||||
delete_just_stopped_threads_single_step_breakpoints ();
|
delete_just_stopped_threads_single_step_breakpoints ();
|
||||||
stop_pc = regcache_read_pc (get_thread_regcache (ecs->ptid));
|
stop_pc = regcache_read_pc (get_thread_regcache (inferior_ptid));
|
||||||
observer_notify_no_history ();
|
observer_notify_no_history ();
|
||||||
stop_waiting (ecs);
|
stop_waiting (ecs);
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue