Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Gary Benson <gbenson@redhat.com>
To: gdb-patches@sourceware.org
Subject: [PATCH 10/15] Abstract i386_dr_low access
Date: Tue, 17 Jun 2014 14:53:00 -0000	[thread overview]
Message-ID: <1403014378-4349-11-git-send-email-gbenson@redhat.com> (raw)
In-Reply-To: <1403014378-4349-1-git-send-email-gbenson@redhat.com>

This commit adds macros to abstract access to the i386_dr_low
function vector used by i386-nat.c.  The macros are named so
as to match the names of the functions that do the same work
in gdbserver.

gdb/
2014-06-17  Gary Benson  <gbenson@redhat.com>

	* i386-nat.c (i386_dr_low_can_set_addr): New macro.
	(i386_dr_low_can_set_control): Likewise.
	(i386_dr_low_set_addr): Likewise.
	(i386_dr_low_set_control): Likewise.
	(i386_dr_low_get_addr): Likewise.
	(i386_dr_low_get_status): Likewise.
	(i386_dr_low_get_control): Likewise.
	(i386_insert_aligned_watchpoint): Use new macros.
	(i386_update_inferior_debug_regs): Likewise.
	(i386_stopped_data_address): Likewise.

gdb/gdbserver/
2014-06-17  Gary Benson  <gbenson@redhat.com>

	* i386-low.c (i386_dr_low_can_set_addr): New macro.
	(i386_dr_low_can_set_control): Likewise.
	(i386_insert_aligned_watchpoint): New check.
---
 gdb/ChangeLog            |   13 +++++++++++++
 gdb/gdbserver/ChangeLog  |    6 ++++++
 gdb/gdbserver/i386-low.c |    6 ++++++
 gdb/i386-nat.c           |   25 +++++++++++++++++++------
 4 files changed, 44 insertions(+), 6 deletions(-)

diff --git a/gdb/gdbserver/i386-low.c b/gdb/gdbserver/i386-low.c
index 8c50838..8d6f26c 100644
--- a/gdb/gdbserver/i386-low.c
+++ b/gdb/gdbserver/i386-low.c
@@ -32,6 +32,9 @@
    The functions below implement debug registers sharing by reference
    counts, and allow to watch regions up to 16 bytes long.  */
 
+#define i386_dr_low_can_set_addr() 1
+#define i386_dr_low_can_set_control() 1
+
 /* Debug register size, in bytes.  */
 /* NOTE: sizeof (long) == 4 on win64.  */
 #define i386_get_debug_register_length() (sizeof (void *))
@@ -273,6 +276,9 @@ i386_insert_aligned_watchpoint (struct i386_debug_reg_state *state,
 {
   int i;
 
+  if (!i386_dr_low_can_set_addr () || !i386_dr_low_can_set_control ())
+    return -1;
+
   /* 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).  */
diff --git a/gdb/i386-nat.c b/gdb/i386-nat.c
index a64cdab..4282535 100644
--- a/gdb/i386-nat.c
+++ b/gdb/i386-nat.c
@@ -47,6 +47,19 @@ static int debug_hw_points;
 /* Low-level function vector.  */
 struct i386_dr_low_type i386_dr_low;
 
+#define i386_dr_low_can_set_addr() (i386_dr_low.set_addr != NULL)
+#define i386_dr_low_can_set_control() (i386_dr_low.set_control != NULL)
+
+#define i386_dr_low_set_addr(new_state, i) \
+  (i386_dr_low.set_addr ((i), (new_state)->dr_mirror[(i)]))
+
+#define i386_dr_low_set_control(new_state) \
+  (i386_dr_low.set_control ((new_state)->dr_control_mirror))
+
+#define i386_dr_low_get_addr(i) (i386_dr_low.get_addr ((i)))
+#define i386_dr_low_get_status() (i386_dr_low.get_status ())
+#define i386_dr_low_get_control() (i386_dr_low.get_control ())
+
 /* Debug register size, in bytes.  */
 #define i386_get_debug_register_length() \
   (i386_dr_low.debug_register_length)
@@ -379,7 +392,7 @@ i386_insert_aligned_watchpoint (struct i386_debug_reg_state *state,
 {
   int i;
 
-  if (!i386_dr_low.set_addr || !i386_dr_low.set_control)
+  if (!i386_dr_low_can_set_addr () || !i386_dr_low_can_set_control ())
     return -1;
 
   /* First, look for an occupied debug register with the same address
@@ -538,13 +551,13 @@ i386_update_inferior_debug_regs (struct i386_debug_reg_state *state,
   ALL_DEBUG_REGISTERS (i)
     {
       if (I386_DR_VACANT (new_state, i) != I386_DR_VACANT (state, i))
-	i386_dr_low.set_addr (i, new_state->dr_mirror[i]);
+	i386_dr_low_set_addr (new_state, i);
       else
 	gdb_assert (new_state->dr_mirror[i] == state->dr_mirror[i]);
     }
 
   if (new_state->dr_control_mirror != state->dr_control_mirror)
-    i386_dr_low.set_control (new_state->dr_control_mirror);
+    i386_dr_low_set_control (new_state);
 
   *state = *new_state;
 }
@@ -698,7 +711,7 @@ i386_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p)
      was running when we last changed watchpoints, the mirror no
      longer represents what was set in this thread's debug
      registers.  */
-  status = i386_dr_low.get_status ();
+  status = i386_dr_low_get_status ();
 
   ALL_DEBUG_REGISTERS (i)
     {
@@ -707,7 +720,7 @@ i386_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p)
 
       if (!control_p)
 	{
-	  control = i386_dr_low.get_control ();
+	  control = i386_dr_low_get_control ();
 	  control_p = 1;
 	}
 
@@ -718,7 +731,7 @@ i386_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p)
 	 paranoiac.  */
       if (I386_DR_GET_RW_LEN (control, i) != 0)
 	{
-	  addr = i386_dr_low.get_addr (i);
+	  addr = i386_dr_low_get_addr (i);
 	  rc = 1;
 	  if (debug_hw_points)
 	    i386_show_dr (state, "watchpoint_hit", addr, -1, hw_write);
-- 
1.7.1


  parent reply	other threads:[~2014-06-17 14:53 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-17 14:13 [PATCH 00/15] Refactor shared code in i386-{nat,low}.[ch] Gary Benson
2014-06-17 14:13 ` [PATCH 01/15] Whitespace changes Gary Benson
2014-06-17 15:23   ` Pedro Alves
2014-06-17 14:13 ` [PATCH 04/15] Comment changes Gary Benson
2014-06-17 15:45   ` Pedro Alves
2014-06-17 16:10     ` Gary Benson
2014-06-17 17:11       ` Pedro Alves
2014-06-17 14:13 ` [PATCH 03/15] Remove unused macro Gary Benson
2014-06-17 15:35   ` Pedro Alves
2014-06-17 14:40 ` [PATCH 14/15] Create nat/i386-dregs.c Gary Benson
2014-06-17 16:56   ` Pedro Alves
2014-06-18 13:43     ` Gary Benson
2014-06-17 14:40 ` [PATCH 06/15] Merge printing code Gary Benson
2014-06-17 16:01   ` Pedro Alves
2014-06-17 14:44 ` [PATCH 12/15] Create nat/i386-dregs.h Gary Benson
2014-06-17 16:48   ` Pedro Alves
2014-06-18 11:14     ` Gary Benson
2014-06-17 14:44 ` [PATCH 09/15] Merge i386_update_inferior_debug_regs Gary Benson
2014-06-17 16:06   ` Pedro Alves
2014-06-17 14:48 ` [PATCH 11/15] Rename functions and make nonstatic as necessary Gary Benson
2014-06-17 16:13   ` Pedro Alves
2014-06-18 10:25   ` Siva Chandra
2014-06-18 13:30     ` Gary Benson
2014-06-18 13:55       ` Pedro Alves
2014-06-18 14:03         ` Siva Chandra
2014-06-18 14:09         ` Gary Benson
2014-06-18 14:18           ` Pedro Alves
2014-06-17 14:48 ` [PATCH 07/15] Merge error handling Gary Benson
2014-06-17 16:02   ` Pedro Alves
2014-06-17 14:53 ` [PATCH 05/15] Add a const Gary Benson
2014-06-17 15:46   ` Pedro Alves
2014-06-17 14:53 ` Gary Benson [this message]
2014-06-17 16:10   ` [PATCH 10/15] Abstract i386_dr_low access Pedro Alves
2014-06-17 14:53 ` [PATCH 08/15] Rename maint_show_dr to debug_hw_points Gary Benson
2014-06-17 16:03   ` Pedro Alves
2014-06-17 14:53 ` [PATCH 02/15] Remove unnecessary prototypes Gary Benson
2014-06-17 15:26   ` Pedro Alves
2014-06-17 14:58 ` [PATCH 15/15] Buildsystem changes Gary Benson
2014-06-17 16:41   ` Pedro Alves
2014-06-17 14:58 ` [PATCH 13/15] Move macros from i386-{nat,low}.c to i386-{nat,low}.h Gary Benson
2014-06-17 16:54   ` Pedro Alves
2014-06-18 11:33     ` Gary Benson
2014-06-18 11:50       ` Pedro Alves
2014-06-17 17:00 ` [PATCH 00/15] Refactor shared code in i386-{nat,low}.[ch] Pedro Alves
2014-06-18 10:49   ` Gary Benson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1403014378-4349-11-git-send-email-gbenson@redhat.com \
    --to=gbenson@redhat.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox