* linux-low.c (get_stop_pc): Don't adjust the PC if stopped with

an extended waitstatus, or by a watchpoint.
	(cancel_breakpoints_callback): Don't cancel a breakpoint if the
	thread was stepping or has been stopped by a watchpoint.
This commit is contained in:
Pedro Alves 2010-04-01 15:31:26 +00:00
parent d3bbe7a0c8
commit bdabb07895
2 changed files with 13 additions and 10 deletions

View File

@ -1,3 +1,10 @@
2010-04-01 Pedro Alves <pedro@codesourcery.com>
* linux-low.c (get_stop_pc): Don't adjust the PC if stopped with
an extended waitstatus, or by a watchpoint.
(cancel_breakpoints_callback): Don't cancel a breakpoint if the
thread was stepping or has been stopped by a watchpoint.
2010-04-01 Pedro Alves <pedro@codesourcery.com>
* mem-break.c (struct raw_breakpoint): New field shlib_disabled.

View File

@ -511,7 +511,10 @@ get_stop_pc (struct lwp_info *lwp)
stop_pc = get_pc (lwp);
if (WSTOPSIG (lwp->last_status) == SIGTRAP && !lwp->stepping)
if (WSTOPSIG (lwp->last_status) == SIGTRAP
&& !lwp->stepping
&& !lwp->stopped_by_watchpoint
&& lwp->last_status >> 16 == 0)
stop_pc -= the_low_target.decr_pc_after_break;
if (debug_threads)
@ -1128,15 +1131,6 @@ cancel_breakpoint (struct lwp_info *lwp)
if (!supports_breakpoints ())
return 0;
if (lwp->stepping)
{
if (debug_threads)
fprintf (stderr,
"CB: [%s] is stepping\n",
target_pid_to_str (lwp->head.id));
return 0;
}
regcache = get_thread_regcache (get_lwp_thread (lwp), 1);
/* breakpoint_at reads from current inferior. */
@ -1499,6 +1493,8 @@ cancel_breakpoints_callback (struct inferior_list_entry *entry, void *data)
&& lp->status_pending_p
&& WIFSTOPPED (lp->status_pending)
&& WSTOPSIG (lp->status_pending) == SIGTRAP
&& !lp->stepping
&& !lp->stopped_by_watchpoint
&& cancel_breakpoint (lp))
/* Throw away the SIGTRAP. */
lp->status_pending_p = 0;