x86 debug address register clarifications
authorGary Benson <gbenson@redhat.com>
Wed, 3 Sep 2014 11:05:50 +0000 (12:05 +0100)
committerGary Benson <gbenson@redhat.com>
Wed, 3 Sep 2014 11:40:49 +0000 (12:40 +0100)
The loop macro ALL_DEBUG_REGISTERS does not iterate over the status or
control registers, so its name is misleading.  This commit renames it
as ALL_DEBUG_ADDRESS_REGISTERS and updates all uses.  This commit also
updates its loop conditions to an equivalent but better form, and
makes two functions use it that had previously hardwired the loop.
A comment on a related field in the x86_debug_reg_state structure is
also updated to reflect that the field refers specifically to address
registers only.

gdb/ChangeLog:

* nat/x86-dregs.h (ALL_DEBUG_REGISTERS): Renamed as...
(ALL_DEBUG_ADDRESS_REGISTERS): New macro.  All uses updated.
Loop conditions changed to equivalent form.
(struct x86_debug_reg_state): Updated dr_ref_count comment.
* x86-linux-nat.c (x86_linux_prepare_to_resume): Use
ALL_DEBUG_ADDRESS_REGISTERS.

gdb/gdbserver/ChangeLog:

* linux-x86-low.c (x86_linux_prepare_to_resume): Use
ALL_DEBUG_ADDRESS_REGISTERS.

gdb/ChangeLog
gdb/gdbserver/ChangeLog
gdb/gdbserver/linux-x86-low.c
gdb/gdbserver/x86-low.c
gdb/nat/x86-dregs.c
gdb/nat/x86-dregs.h
gdb/x86-linux-nat.c

index f4059d9198c481228b879c93cb8597a2785e6cf3..80961d6fc24877ad3623e9ab026e8c0d77a15c8c 100644 (file)
@@ -1,3 +1,12 @@
+2014-09-03  Gary Benson  <gbenson@redhat.com>
+
+       * nat/x86-dregs.h (ALL_DEBUG_REGISTERS): Renamed as...
+       (ALL_DEBUG_ADDRESS_REGISTERS): New macro.  All uses updated.
+       Loop conditions changed to equivalent form.
+       (struct x86_debug_reg_state): Updated dr_ref_count comment.
+       * x86-linux-nat.c (x86_linux_prepare_to_resume): Use
+       ALL_DEBUG_ADDRESS_REGISTERS.
+
 2014-09-03  Joel Brobecker  <brobecker@adacore.com>
 
        * dwarf2loc.h (dwarf2_evaluate_property): Minor function
index c2c86df890560dd8f6ac3771db0ae2088d025129..a47ef49229336ea10f7e3f1621c703921f2e696a 100644 (file)
@@ -1,3 +1,8 @@
+2014-09-03  Gary Benson  <gbenson@redhat.com>
+
+       * linux-x86-low.c (x86_linux_prepare_to_resume): Use
+       ALL_DEBUG_ADDRESS_REGISTERS.
+
 2014-09-02  Gary Benson  <gbenson@redhat.com>
 
        * i386-low.h: Renamed as...
index 6b73886b021c9cfa2e7fbb4359cca7da8124b391..a66f61edc1c004deb266d2f817ce5c896f8630ef 100644 (file)
@@ -787,7 +787,7 @@ x86_linux_prepare_to_resume (struct lwp_info *lwp)
 
       x86_linux_dr_set (ptid, DR_CONTROL, 0);
 
-      for (i = DR_FIRSTADDR; i <= DR_LASTADDR; i++)
+      ALL_DEBUG_ADDRESS_REGISTERS (i)
        if (state->dr_ref_count[i] > 0)
          {
            x86_linux_dr_set (ptid, i, state->dr_mirror[i]);
index aaa110e3aaef13d02977ad9c2d6a0e230419e7b7..b48a15d23b5486a1280f960255b11226ceb2df40 100644 (file)
@@ -28,7 +28,7 @@ x86_low_init_dregs (struct x86_debug_reg_state *state)
 {
   int i;
 
-  ALL_DEBUG_REGISTERS (i)
+  ALL_DEBUG_ADDRESS_REGISTERS (i)
     {
       state->dr_mirror[i] = 0;
       state->dr_ref_count[i] = 0;
index 5381c77c7868fbb91a130481e9eae6056d9df475..fbb24263e331d80273232052119cec19fe958b5d 100644 (file)
@@ -205,7 +205,7 @@ x86_show_dr (struct x86_debug_reg_state *state,
   debug_printf ("\tCONTROL (DR7): %s          STATUS (DR6): %s\n",
                phex (state->dr_control_mirror, 8),
                phex (state->dr_status_mirror, 8));
-  ALL_DEBUG_REGISTERS (i)
+  ALL_DEBUG_ADDRESS_REGISTERS (i)
     {
       debug_printf ("\
 \tDR%d: addr=0x%s, ref.count=%d  DR%d: addr=0x%s, ref.count=%d\n",
@@ -291,7 +291,7 @@ x86_insert_aligned_watchpoint (struct x86_debug_reg_state *state,
   /* First, look for an occupied debug register with the same address
      and the same RW and LEN definitions.  If we find one, we can
      reuse it for this watchpoint as well (and save a register).  */
-  ALL_DEBUG_REGISTERS (i)
+  ALL_DEBUG_ADDRESS_REGISTERS (i)
     {
       if (!X86_DR_VACANT (state, i)
          && state->dr_mirror[i] == addr
@@ -303,7 +303,7 @@ x86_insert_aligned_watchpoint (struct x86_debug_reg_state *state,
     }
 
   /* Next, look for a vacant debug register.  */
-  ALL_DEBUG_REGISTERS (i)
+  ALL_DEBUG_ADDRESS_REGISTERS (i)
     {
       if (X86_DR_VACANT (state, i))
        break;
@@ -346,7 +346,7 @@ x86_remove_aligned_watchpoint (struct x86_debug_reg_state *state,
   int i, retval = -1;
   int all_vacant = 1;
 
-  ALL_DEBUG_REGISTERS (i)
+  ALL_DEBUG_ADDRESS_REGISTERS (i)
     {
       if (!X86_DR_VACANT (state, i)
          && state->dr_mirror[i] == addr
@@ -461,7 +461,7 @@ x86_update_inferior_debug_regs (struct x86_debug_reg_state *state,
 {
   int i;
 
-  ALL_DEBUG_REGISTERS (i)
+  ALL_DEBUG_ADDRESS_REGISTERS (i)
     {
       if (X86_DR_VACANT (new_state, i) != X86_DR_VACANT (state, i))
        x86_dr_low_set_addr (new_state, i);
@@ -620,7 +620,7 @@ x86_dr_stopped_data_address (struct x86_debug_reg_state *state,
      registers.  */
   status = x86_dr_low_get_status ();
 
-  ALL_DEBUG_REGISTERS (i)
+  ALL_DEBUG_ADDRESS_REGISTERS (i)
     {
       if (!X86_DR_WATCH_HIT (status, i))
        continue;
index fb179a594fa709473388b98e03405216202f7f5b..aebcbce5a617bc7f01d3239e8f39f180db6c91c7 100644 (file)
@@ -85,12 +85,13 @@ struct x86_debug_reg_state
   CORE_ADDR dr_mirror[DR_NADDR];
   unsigned dr_status_mirror, dr_control_mirror;
 
-  /* Reference counts for each debug register.  */
+  /* Reference counts for each debug address register.  */
   int dr_ref_count[DR_NADDR];
 };
 
-/* A macro to loop over all debug registers.  */
-#define ALL_DEBUG_REGISTERS(i) for (i = 0; i < DR_NADDR; i++)
+/* A macro to loop over all debug address registers.  */
+#define ALL_DEBUG_ADDRESS_REGISTERS(i) \
+  for (i = DR_FIRSTADDR; i <= DR_LASTADDR; i++)
 
 /* Insert a watchpoint to watch a memory region which starts at
    address ADDR and whose length is LEN bytes.  Watch memory accesses
index 5340dfe24003f7b6411735f88d2c5775f11e99ae..0d070dda9fec8af79302516562b5a45619c862bf 100644 (file)
@@ -195,7 +195,7 @@ x86_linux_prepare_to_resume (struct lwp_info *lwp)
         results in EINVAL.  */
       x86_linux_dr_set (lwp->ptid, DR_CONTROL, 0);
 
-      for (i = DR_FIRSTADDR; i <= DR_LASTADDR; i++)
+      ALL_DEBUG_ADDRESS_REGISTERS (i)
        if (state->dr_ref_count[i] > 0)
          {
            x86_linux_dr_set (lwp->ptid, i, state->dr_mirror[i]);