public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: Gary Benson <gbenson@redhat.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH 14/15] Create nat/i386-dregs.c
Date: Tue, 17 Jun 2014 16:56:00 -0000	[thread overview]
Message-ID: <53A0731C.70202@redhat.com> (raw)
In-Reply-To: <1403014378-4349-15-git-send-email-gbenson@redhat.com>

On 06/17/2014 03:12 PM, Gary Benson wrote:
> @@ -596,34 +172,8 @@ i386_remove_watchpoint (struct target_ops *self,
>  {
>    struct i386_debug_reg_state *state
>      = i386_debug_reg_state (ptid_get_pid (inferior_ptid));
> -  int retval;
> -  /* 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 = *state;
> -
> -  if (((len != 1 && len != 2 && len != 4)
> -       && !(TARGET_HAS_DR_LEN_8 && len == 8))
> -      || addr % len != 0)
> -    {
> -      retval = i386_handle_nonaligned_watchpoint (&local_state,
> -						  WP_REMOVE,
> -						  addr, len, type);
> -    }
> -  else
> -    {
> -      unsigned len_rw = i386_dr_length_and_rw_bits (len, type);
> -
> -      retval = i386_dr_remove_aligned_watchpoint (&local_state,
> -					       addr, len_rw);
> -    }
> -
> -  if (retval == 0)
> -    i386_dr_update_inferior_debug_regs (state, &local_state);
> -
> -  if (debug_hw_points)
> -    i386_dr_show (state, "remove_watchpoint", addr, len, type);
>  
> -  return retval;
> +  return i386_dr_remove_watchpoint (state, type, addr, len);

Hmm, there's still one remaining difference in gdb vs gdbserver,
after this, in hw breakpoints.

i386_insert_hw_breakpoint and i386_remove_hw_breakpoint on
the GDB side still have the "work on a local copy"
bits, and the i386_dr_update_inferior_debug_regs and
i386_dr_show calls:

/* Insert a hardware-assisted breakpoint at BP_TGT->placed_address.
   Return 0 on success, EBUSY on failure.  */
static int
i386_insert_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
			   struct bp_target_info *bp_tgt)
{
  struct i386_debug_reg_state *state
    = i386_debug_reg_state (ptid_get_pid (inferior_ptid));
  unsigned len_rw = i386_dr_length_and_rw_bits (1, hw_execute);
  CORE_ADDR addr = bp_tgt->placed_address;
  /* 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 = *state;
  int retval = i386_dr_insert_aligned_watchpoint (&local_state,
						  addr,
						  len_rw) ? EBUSY : 0;

  if (retval == 0)
    i386_dr_update_inferior_debug_regs (state, &local_state);

  if (debug_hw_points)
    i386_dr_show (state, "insert_hwbp", addr, 1, hw_execute);

  return retval;
}

While on the gdbserver side, we just call i386_dr_insert_watchpoint:

static int
x86_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
		  int size, struct raw_breakpoint *bp)
{
  switch (type)
    {
    case raw_bkpt_type_hw:
...
      {
...
	return i386_dr_insert_watchpoint (state, hw_type, addr, size);

Any reason GDB can't do the same?

-- 
Pedro Alves

  reply	other threads:[~2014-06-17 16:56 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 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 01/15] Whitespace changes Gary Benson
2014-06-17 15:23   ` 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 06/15] Merge printing code Gary Benson
2014-06-17 16:01   ` Pedro Alves
2014-06-17 14:40 ` [PATCH 14/15] Create nat/i386-dregs.c Gary Benson
2014-06-17 16:56   ` Pedro Alves [this message]
2014-06-18 13:43     ` 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: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:48 ` [PATCH 07/15] Merge error handling Gary Benson
2014-06-17 16:02   ` 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:53 ` [PATCH 02/15] Remove unnecessary prototypes Gary Benson
2014-06-17 15:26   ` 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 05/15] Add a const Gary Benson
2014-06-17 15:46   ` Pedro Alves
2014-06-17 14:53 ` [PATCH 10/15] Abstract i386_dr_low access Gary Benson
2014-06-17 16:10   ` 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 14:58 ` [PATCH 15/15] Buildsystem changes Gary Benson
2014-06-17 16:41   ` 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=53A0731C.70202@redhat.com \
    --to=palves@redhat.com \
    --cc=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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).