mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-25 02:53:48 +08:00
btrace: extract the breakpoint check from record_btrace_step_thread
There are two places where record_btrace_step_thread checks for a breakpoint at the current replay position. Move this code into its own function. gdb/ * record-btrace.c (record_btrace_replay_at_breakpoint): New. (record_btrace_step_thread): Call record_btrace_replay_at_breakpoint.
This commit is contained in:
parent
987e68b1a3
commit
3c615f99d3
@ -1,3 +1,8 @@
|
||||
2015-09-18 Markus Metzger <markus.t.metzger@intel.com>
|
||||
|
||||
* record-btrace.c (record_btrace_replay_at_breakpoint): New.
|
||||
(record_btrace_step_thread): Call record_btrace_replay_at_breakpoint.
|
||||
|
||||
2015-09-18 Markus Metzger <markus.t.metzger@intel.com>
|
||||
|
||||
* record-btrace.c (btrace_thread_flag_to_str)
|
||||
|
@ -1983,6 +1983,34 @@ record_btrace_clear_histories (struct btrace_thread_info *btinfo)
|
||||
btinfo->call_history = NULL;
|
||||
}
|
||||
|
||||
/* Check whether TP's current replay position is at a breakpoint. */
|
||||
|
||||
static int
|
||||
record_btrace_replay_at_breakpoint (struct thread_info *tp)
|
||||
{
|
||||
struct btrace_insn_iterator *replay;
|
||||
struct btrace_thread_info *btinfo;
|
||||
const struct btrace_insn *insn;
|
||||
struct inferior *inf;
|
||||
|
||||
btinfo = &tp->btrace;
|
||||
replay = btinfo->replay;
|
||||
|
||||
if (replay == NULL)
|
||||
return 0;
|
||||
|
||||
insn = btrace_insn_get (replay);
|
||||
if (insn == NULL)
|
||||
return 0;
|
||||
|
||||
inf = find_inferior_ptid (tp->ptid);
|
||||
if (inf == NULL)
|
||||
return 0;
|
||||
|
||||
return record_check_stopped_by_breakpoint (inf->aspace, insn->pc,
|
||||
&btinfo->stop_reason);
|
||||
}
|
||||
|
||||
/* Step a single thread. */
|
||||
|
||||
static struct target_waitstatus
|
||||
@ -1990,8 +2018,6 @@ record_btrace_step_thread (struct thread_info *tp)
|
||||
{
|
||||
struct btrace_insn_iterator *replay, end;
|
||||
struct btrace_thread_info *btinfo;
|
||||
struct address_space *aspace;
|
||||
struct inferior *inf;
|
||||
enum btrace_thread_flag flags;
|
||||
unsigned int steps;
|
||||
|
||||
@ -2067,9 +2093,6 @@ record_btrace_step_thread (struct thread_info *tp)
|
||||
if (replay == NULL)
|
||||
return btrace_step_no_history ();
|
||||
|
||||
inf = find_inferior_ptid (tp->ptid);
|
||||
aspace = inf->aspace;
|
||||
|
||||
/* Determine the end of the instruction trace. */
|
||||
btrace_insn_end (&end, btinfo);
|
||||
|
||||
@ -2102,8 +2125,7 @@ record_btrace_step_thread (struct thread_info *tp)
|
||||
target_pid_to_str (tp->ptid),
|
||||
core_addr_to_string_nz (insn->pc));
|
||||
|
||||
if (record_check_stopped_by_breakpoint (aspace, insn->pc,
|
||||
&btinfo->stop_reason))
|
||||
if (record_btrace_replay_at_breakpoint (tp))
|
||||
return btrace_step_stopped ();
|
||||
}
|
||||
|
||||
@ -2112,9 +2134,6 @@ record_btrace_step_thread (struct thread_info *tp)
|
||||
if (replay == NULL)
|
||||
replay = record_btrace_start_replaying (tp);
|
||||
|
||||
inf = find_inferior_ptid (tp->ptid);
|
||||
aspace = inf->aspace;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
const struct btrace_insn *insn;
|
||||
@ -2135,8 +2154,7 @@ record_btrace_step_thread (struct thread_info *tp)
|
||||
target_pid_to_str (tp->ptid),
|
||||
core_addr_to_string_nz (insn->pc));
|
||||
|
||||
if (record_check_stopped_by_breakpoint (aspace, insn->pc,
|
||||
&btinfo->stop_reason))
|
||||
if (record_btrace_replay_at_breakpoint (tp))
|
||||
return btrace_step_stopped ();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user