diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6b5de6cd9f..e50557f41a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2015-09-18 Markus Metzger + + * record-btrace.c (record_btrace_step_thread): Move breakpoint check + to ... + (record_btrace_single_step_forward): ... here and + (record_btrace_single_step_backward): ... here. + 2015-09-18 Markus Metzger * record-btrace.c (btrace_step_spurious) diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c index fdf7afba8b..5e8c1d4028 100644 --- a/gdb/record-btrace.c +++ b/gdb/record-btrace.c @@ -2038,6 +2038,10 @@ record_btrace_single_step_forward (struct thread_info *tp) if (replay == NULL) return btrace_step_no_history (); + /* Check if we're stepping a breakpoint. */ + if (record_btrace_replay_at_breakpoint (tp)) + return btrace_step_stopped (); + /* Skip gaps during replay. */ do { @@ -2089,6 +2093,18 @@ record_btrace_single_step_backward (struct thread_info *tp) } while (btrace_insn_get (replay) == NULL); + /* Check if we're stepping a breakpoint. + + For reverse-stepping, this check is after the step. There is logic in + infrun.c that handles reverse-stepping separately. See, for example, + proceed and adjust_pc_after_break. + + This code assumes that for reverse-stepping, PC points to the last + de-executed instruction, whereas for forward-stepping PC points to the + next to-be-executed instruction. */ + if (record_btrace_replay_at_breakpoint (tp)) + return btrace_step_stopped (); + return btrace_step_spurious (); } @@ -2154,9 +2170,6 @@ record_btrace_step_thread (struct thread_info *tp) target_pid_to_str (tp->ptid), core_addr_to_string_nz (insn->pc)); } - - if (record_btrace_replay_at_breakpoint (tp)) - return btrace_step_stopped (); } case BTHR_RCONT: @@ -2176,9 +2189,6 @@ record_btrace_step_thread (struct thread_info *tp) DEBUG ("reverse-stepping %d (%s) ... %s", tp->num, target_pid_to_str (tp->ptid), core_addr_to_string_nz (insn->pc)); - - if (record_btrace_replay_at_breakpoint (tp)) - return btrace_step_stopped (); } } }