From b9a881c2d200e0e2920f9d307817400f2bdbefac Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Tue, 23 Mar 2010 18:00:57 +0000 Subject: [PATCH] * linux-x86-low.c (x86_linux_prepare_to_resume): Clear DR6 if the lwp had been stopped by a watchpoint. --- gdb/gdbserver/ChangeLog | 5 +++++ gdb/gdbserver/linux-x86-low.c | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 29444894dd..552c83d5ee 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,8 @@ +2010-03-23 Pedro Alves + + * linux-x86-low.c (x86_linux_prepare_to_resume): Clear DR6 if the + lwp had been stopped by a watchpoint. + 2010-03-16 Pedro Alves * server.h (internal_error): Declare. diff --git a/gdb/gdbserver/linux-x86-low.c b/gdb/gdbserver/linux-x86-low.c index 496baa280d..fe5d46ef40 100644 --- a/gdb/gdbserver/linux-x86-low.c +++ b/gdb/gdbserver/linux-x86-low.c @@ -507,10 +507,11 @@ x86_linux_new_thread (void) static void x86_linux_prepare_to_resume (struct lwp_info *lwp) { + ptid_t ptid = ptid_of (lwp); + if (lwp->arch_private->debug_registers_changed) { int i; - ptid_t ptid = ptid_of (lwp); int pid = ptid_get_pid (ptid); struct process_info *proc = find_process_pid (pid); struct i386_debug_reg_state *state = &proc->private->arch_private->debug_reg_state; @@ -522,6 +523,9 @@ x86_linux_prepare_to_resume (struct lwp_info *lwp) lwp->arch_private->debug_registers_changed = 0; } + + if (lwp->stopped_by_watchpoint) + x86_linux_dr_set (ptid, DR_STATUS, 0); } /* When GDBSERVER is built as a 64-bit application on linux, the -- 2.34.1