mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-09 04:21:49 +08:00
btrace: async
The record btrace target runs synchronous with GDB. That is, GDB steps resumed threads in record btrace's to_wait method. Without GDB calling to_wait, nothing happens 'on the target'. Check for further expected events in to_wait before reporting the current event and mark record btrace's async event handler in async mode. gdb/ * record-btrace.c (record_btrace_maybe_mark_async_event): New. (record_btrace_wait): Call record_btrace_maybe_mark_async_event.
This commit is contained in:
parent
ec71cc2fc6
commit
a6b5be76f9
@ -1,3 +1,8 @@
|
||||
2015-09-18 Markus Metzger <markus.t.metzger@intel.com>
|
||||
|
||||
* record-btrace.c (record_btrace_maybe_mark_async_event): New.
|
||||
(record_btrace_wait): Call record_btrace_maybe_mark_async_event.
|
||||
|
||||
2015-09-18 Markus Metzger <markus.t.metzger@intel.com>
|
||||
|
||||
* record-btrace.c (get_thread_current_frame): New.
|
||||
|
@ -2240,6 +2240,29 @@ record_btrace_step_thread (struct thread_info *tp)
|
||||
typedef struct thread_info * tp_t;
|
||||
DEF_VEC_P (tp_t);
|
||||
|
||||
/* Announce further events if necessary. */
|
||||
|
||||
static void
|
||||
record_btrace_maybe_mark_async_event (const VEC (tp_t) *moving,
|
||||
const VEC (tp_t) *no_history)
|
||||
{
|
||||
int more_moving, more_no_history;
|
||||
|
||||
more_moving = !VEC_empty (tp_t, moving);
|
||||
more_no_history = !VEC_empty (tp_t, no_history);
|
||||
|
||||
if (!more_moving && !more_no_history)
|
||||
return;
|
||||
|
||||
if (more_moving)
|
||||
DEBUG ("movers pending");
|
||||
|
||||
if (more_no_history)
|
||||
DEBUG ("no-history pending");
|
||||
|
||||
mark_async_event_handler (record_btrace_async_inferior_event_handler);
|
||||
}
|
||||
|
||||
/* The to_wait method of target record-btrace. */
|
||||
|
||||
static ptid_t
|
||||
@ -2355,6 +2378,10 @@ record_btrace_wait (struct target_ops *ops, ptid_t ptid,
|
||||
ALL_NON_EXITED_THREADS (tp)
|
||||
record_btrace_cancel_resume (tp);
|
||||
|
||||
/* In async mode, we need to announce further events. */
|
||||
if (target_is_async_p ())
|
||||
record_btrace_maybe_mark_async_event (moving, no_history);
|
||||
|
||||
/* Start record histories anew from the current position. */
|
||||
record_btrace_clear_histories (&eventing->btrace);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user