* i386-nat.c (i386_insert_hw_breakpoint): Call
authorMaciej W. Rozycki <macro@linux-mips.org>
Mon, 14 Nov 2011 13:11:58 +0000 (13:11 +0000)
committerMaciej W. Rozycki <macro@linux-mips.org>
Mon, 14 Nov 2011 13:11:58 +0000 (13:11 +0000)
i386_update_inferior_debug_regs.
(i386_remove_hw_breakpoint): Likewise.

gdb/ChangeLog
gdb/i386-nat.c

index ac9de9d9132c011060be3526dfd2f7d0f180d703..d77e92d206d8d4940b739ee6ca778fd5e1ce2217 100644 (file)
@@ -1,3 +1,9 @@
+2011-11-14  Maciej W. Rozycki  <macro@codesourcery.com>
+
+       * i386-nat.c (i386_insert_hw_breakpoint): Call
+       i386_update_inferior_debug_regs.
+       (i386_remove_hw_breakpoint): Likewise.
+
 2011-11-14  Yao Qi  <yao@codesourcery.com>
 
        * breakpoint.c (init_raw_breakpoint): Call
index e27a1a042412a6f959004ed039368f04bc8fe90a..568b79bfced5d040f705d48de730539d41519f8e 100644 (file)
@@ -684,9 +684,15 @@ i386_insert_hw_breakpoint (struct gdbarch *gdbarch,
 {
   unsigned len_rw = i386_length_and_rw_bits (1, hw_execute);
   CORE_ADDR addr = bp_tgt->placed_address;
-  int retval = i386_insert_aligned_watchpoint (&dr_mirror,
+  /* Work on a local copy of the debug registers, and on success,
+     commit the change back to the inferior.  */
+  struct i386_debug_reg_state local_state = dr_mirror;
+  int retval = i386_insert_aligned_watchpoint (&local_state,
                                               addr, len_rw) ? EBUSY : 0;
 
+  if (retval == 0)
+    i386_update_inferior_debug_regs (&local_state);
+
   if (maint_show_dr)
     i386_show_dr (&dr_mirror, "insert_hwbp", addr, 1, hw_execute);
 
@@ -702,9 +708,15 @@ i386_remove_hw_breakpoint (struct gdbarch *gdbarch,
 {
   unsigned len_rw = i386_length_and_rw_bits (1, hw_execute);
   CORE_ADDR addr = bp_tgt->placed_address;
-  int retval = i386_remove_aligned_watchpoint (&dr_mirror,
+  /* Work on a local copy of the debug registers, and on success,
+     commit the change back to the inferior.  */
+  struct i386_debug_reg_state local_state = dr_mirror;
+  int retval = i386_remove_aligned_watchpoint (&local_state,
                                               addr, len_rw);
 
+  if (retval == 0)
+    i386_update_inferior_debug_regs (&local_state);
+
   if (maint_show_dr)
     i386_show_dr (&dr_mirror, "remove_hwbp", addr, 1, hw_execute);