diff options
Diffstat (limited to 'gdb/breakpoint.c')
-rw-r--r-- | gdb/breakpoint.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index bccdeeef45..a6a5f4f03a 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -2155,7 +2155,8 @@ bpstat_stop_status (pc, not_a_breakpoint) char message[sizeof (message1) + 30 /* slop */ ]; /* Get the address where the breakpoint would have been. */ - bp_addr = *pc - DECR_PC_AFTER_BREAK; + bp_addr = *pc - (not_a_breakpoint && !SOFTWARE_SINGLE_STEP_P ? + 0 : DECR_PC_AFTER_BREAK); ALL_BREAKPOINTS_SAFE (b, temp) { @@ -2184,13 +2185,6 @@ bpstat_stop_status (pc, not_a_breakpoint) && b->address != (*pc - DECR_PC_AFTER_HW_BREAK)) continue; - if (b->type != bp_watchpoint - && b->type != bp_hardware_watchpoint - && b->type != bp_read_watchpoint - && b->type != bp_access_watchpoint - && not_a_breakpoint) - continue; - /* Is this a catchpoint of a load or unload? If so, did we get a load or unload of the specified library? If not, ignore it. */ @@ -4757,7 +4751,7 @@ until_break_command (arg, from_tty) breakpoint = set_momentary_breakpoint (sal, selected_frame, bp_until); - if (!async_p || !target_has_async) + if (!event_loop_p || !target_can_async_p ()) old_chain = make_cleanup ((make_cleanup_func) delete_breakpoint, breakpoint); else @@ -4770,7 +4764,7 @@ until_break_command (arg, from_tty) where we get a chance to do that is in fetch_inferior_event, so we must set things up for that. */ - if (async_p && target_has_async) + if (event_loop_p && target_can_async_p ()) { /* In this case we don't need args for the continuation, because all it needs to do is do the cleanups in the @@ -4786,7 +4780,7 @@ until_break_command (arg, from_tty) sal = find_pc_line (prev_frame->pc, 0); sal.pc = prev_frame->pc; breakpoint = set_momentary_breakpoint (sal, prev_frame, bp_until); - if (!async_p || !target_has_async) + if (!event_loop_p || !target_can_async_p ()) make_cleanup ((make_cleanup_func) delete_breakpoint, breakpoint); else make_exec_cleanup ((make_cleanup_func) delete_breakpoint, breakpoint); @@ -4795,7 +4789,7 @@ until_break_command (arg, from_tty) proceed (-1, TARGET_SIGNAL_DEFAULT, 0); /* Do the cleanups now, anly if we are not running asynchronously, of if we are, but the target is still synchronous. */ - if (!async_p || !target_has_async) + if (!event_loop_p || !target_can_async_p ()) do_cleanups (old_chain); } |