2007-12-22 Pierre Muller <muller@ics.u-strasbg.fr>
authorPierre Muller <muller@sourceware.org>
Sat, 22 Dec 2007 22:09:56 +0000 (22:09 +0000)
committerPierre Muller <muller@sourceware.org>
Sat, 22 Dec 2007 22:09:56 +0000 (22:09 +0000)
* win32-nat.c: Fix PR/2388.
(do_win32_fetch_inferior_registers): Do not overwrite debug register
array dr if debug_registers_changed variable is set.

gdb/ChangeLog
gdb/win32-nat.c
gdb/windows-nat.c

index b5c6508..966013c 100644 (file)
@@ -1,3 +1,9 @@
+2007-12-22  Pierre Muller  <muller@ics.u-strasbg.fr>
+
+       * win32-nat.c: Fix PR gdb/2388.
+       (do_win32_fetch_inferior_registers): Do not overwrite debug register
+       array dr if debug_registers_changed variable is set.
+
 2007-12-22  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        * dwarf2read.c (scan_partial_symbols partial_die_parent_scope)
index 07ebef9..3e242a4 100644 (file)
@@ -382,13 +382,17 @@ do_win32_fetch_inferior_registers (struct regcache *regcache, int r)
          thread_info *th = current_thread;
          th->context.ContextFlags = CONTEXT_DEBUGGER_DR;
          GetThreadContext (th->h, &th->context);
-         /* Copy dr values from that thread.  */
-         dr[0] = th->context.Dr0;
-         dr[1] = th->context.Dr1;
-         dr[2] = th->context.Dr2;
-         dr[3] = th->context.Dr3;
-         dr[6] = th->context.Dr6;
-         dr[7] = th->context.Dr7;
+         /* Copy dr values from that thread. 
+            But only if there were not modified since last stop. PR gdb/2388 */
+         if (!debug_registers_changed)
+           {
+             dr[0] = th->context.Dr0;
+             dr[1] = th->context.Dr1;
+             dr[2] = th->context.Dr2;
+             dr[3] = th->context.Dr3;
+             dr[6] = th->context.Dr6;
+             dr[7] = th->context.Dr7;
+           }
        }
       current_thread->reload_context = 0;
     }
index 07ebef9..3e242a4 100644 (file)
@@ -382,13 +382,17 @@ do_win32_fetch_inferior_registers (struct regcache *regcache, int r)
          thread_info *th = current_thread;
          th->context.ContextFlags = CONTEXT_DEBUGGER_DR;
          GetThreadContext (th->h, &th->context);
-         /* Copy dr values from that thread.  */
-         dr[0] = th->context.Dr0;
-         dr[1] = th->context.Dr1;
-         dr[2] = th->context.Dr2;
-         dr[3] = th->context.Dr3;
-         dr[6] = th->context.Dr6;
-         dr[7] = th->context.Dr7;
+         /* Copy dr values from that thread. 
+            But only if there were not modified since last stop. PR gdb/2388 */
+         if (!debug_registers_changed)
+           {
+             dr[0] = th->context.Dr0;
+             dr[1] = th->context.Dr1;
+             dr[2] = th->context.Dr2;
+             dr[3] = th->context.Dr3;
+             dr[6] = th->context.Dr6;
+             dr[7] = th->context.Dr7;
+           }
        }
       current_thread->reload_context = 0;
     }