Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: "Maciej W. Rozycki" <macro@codesourcery.com>
To: Yao Qi <yao@codesourcery.com>
Cc: <gdb-patches@sourceware.org>
Subject: Re: [PATCH 5/5] MIPS GDBserver watchpoint
Date: Wed, 24 Jul 2013 00:35:00 -0000	[thread overview]
Message-ID: <alpine.DEB.1.10.1307232257170.32382@tp.orcam.me.uk> (raw)
In-Reply-To: <1372475427-24862-6-git-send-email-yao@codesourcery.com>

On Sat, 29 Jun 2013, Yao Qi wrote:

> gdb/gdbserver:
> 
> 2013-06-29  Jie Zhang  <jie@codesourcery.com>
> 	    Daniel Jacobowitz  <dan@codesourcery.com>
> 	    Yao Qi  <yao@codesourcery.com>
> 
> 	* Makefile.in (SFILES): Add common/mips-linux-watch.c.
> 	(mips_linux_watch_h): New.
> 	(mips-linux-watch.o): New rule.
> 	* configure.srv <mips*-*-linux*>: Add mips-linux-watch.o to
> 	srv_tgtobj.
> 	* linux-mips-low.c: Include mips-linux-watch.h.
> 	(struct arch_process_info, struct arch_lwp_info): New.
> 	(update_watch_registers_callback): New.
> 	(mips_linux_new_process, mips_linux_new_thread) New.
> 	(mips_linux_prepare_to_resume, mips_insert_point): New.
> 	(mips_remove_point, mips_stopped_by_watchpoint): New.
> 	(rsp_bp_type_to_target_hw_bp_type): New.
> 	(mips_stopped_data_address): New.
> 	(the_low_target): Add watchpoint support functions.
> 
> gdb:
> 
> 2013-06-29  Yao Qi  <yao@codesourcery.com>
> 
> 	* NEWS: Mention it.
> ---
>  gdb/NEWS                       |    3 +
>  gdb/gdbserver/Makefile.in      |    7 +-
>  gdb/gdbserver/configure.srv    |    1 +
>  gdb/gdbserver/linux-mips-low.c |  366 ++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 376 insertions(+), 1 deletions(-)
> 
> diff --git a/gdb/gdbserver/linux-mips-low.c b/gdb/gdbserver/linux-mips-low.c
> index 1010528..6e6e3e0 100644
> --- a/gdb/gdbserver/linux-mips-low.c
> +++ b/gdb/gdbserver/linux-mips-low.c
> @@ -257,6 +291,328 @@ mips_breakpoint_at (CORE_ADDR where)
>    return 0;
>  }
>  
> +/* Mark the watch registers of lwp, represented by ENTRY, as changed,
> +   if the lwp's process id is *PID_P.  */
> +
> +static int
> +update_watch_registers_callback (struct inferior_list_entry *entry,
> +				 void *pid_p)
> +{
> +  struct lwp_info *lwp = (struct lwp_info *) entry;
> +  int pid = *(int *) pid_p;
> +
> +  /* Only update the threads of this process.  */
> +  if (pid_of (lwp) == pid)
> +    {
> +      /* The actual update is done later just before resuming the lwp,
> +	 we just mark that the registers need updating.  */
> +      lwp->arch_private->watch_registers_changed = 1;
> +
> +      /* If the lwp isn't stopped, force it to momentarily pause, so
> +	 we can update its watch registers.  */
> +      if (!lwp->stopped)
> +	linux_stop_lwp (lwp);
> +    }
> +
> +  return 0;
> +}
> +
> +/* This is the implementation of linux_target_ops method
> +   new_process.  */
> +
> +static struct arch_process_info *
> +mips_linux_new_process (void)
> +{
> +  struct arch_process_info *info = xcalloc (1, sizeof (*info));
> +
> +  return info;
> +}
> +
> +/* This is the implementation of linux_target_ops method new_thread.
> +   Mark the watch registers as changed, so the threads' copies will
> +   be updated.  */
> +
> +static struct arch_lwp_info *
> +mips_linux_new_thread (void)
> +{
> +  struct arch_lwp_info *info = xcalloc (1, sizeof (*info));
> +
> +  info->watch_registers_changed = 1;
> +
> +  return info;
> +}
> +
> +/* This is the implementation of linux_target_ops method
> +   prepare_to_resume.  If the watch regs have changed, update the
> +   thread's copies.  */
> +
> +static void
> +mips_linux_prepare_to_resume (struct lwp_info *lwp)
> +{
> +  ptid_t ptid = ptid_of (lwp);
> +  struct process_info *proc = find_process_pid (ptid_get_pid (ptid));
> +  struct arch_process_info *private = proc->private->arch_private;
> +
> +  if (lwp->arch_private->watch_registers_changed)
> +    {
> +      /* Only update the watch registers if we have set or unset a
> +	 watchpoint already.  */
> +      if (mips_linux_watch_get_num_valid (&private->watch_mirror) > 0)
> +	{
> +	  /* Write the mirrored watch register values.  */
> +	  int tid = ptid_get_lwp (ptid);
> +
> +	  if (-1 == ptrace (PTRACE_SET_WATCH_REGS, tid,
> +			    &private->watch_mirror))
> +	    perror_with_name ("Couldn't write watch register");
> +	}
> +
> +      lwp->arch_private->watch_registers_changed = 0;
> +    }
> +}
> +
> +/* Translate breakpoint type TYPE in rsp to 'enum target_hw_bp_type'.  Return
> +   -1 if translation failed.  */
> +
> +static enum target_hw_bp_type
> +rsp_bp_type_to_target_hw_bp_type (char type)
> +{
> +  switch (type)
> +    {
> +    case '2':
> +      return hw_write;
> +    case '3':
> +      return hw_read;
> +    case '4':
> +      return hw_access;
> +    }
> +
> +  return -1;

 This looks unclean to me, you're returning a value that's outside the 
valid range of the enum type used.  By the structure of the callers this 
code is expected to be dead though, so please use gdb_assert_not_reached.

 Thanks for going ahead and adding rsp_bp_type_to_target_hw_bp_type, 
however in the future please try to name in the patch description any 
changes you've made (non-trivial ones that is, obvious typo fixes, 
formatting adjustments, etc. need no mention, although there'll be no harm 
from making an overall statement that you've made such clean-ups) beyond 
ones requested in the review.  This will make the review process easier 
for me as otherwise I may assume proposed changes I have already accepted 
will have remained the same in the updated patch.

 Please resend with the adjustment requested, the change looks otherwise 
OK to me.

  Maciej


  parent reply	other threads:[~2013-07-24  0:35 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-30  2:44 [PATCH 0/3] mips hardware watchpoint support in gdbserver Yao Qi
2013-05-30  2:44 ` [PATCH 1/3] Include asm/ptrace.h in mips-linux-nat.c Yao Qi
2013-06-13 17:49   ` Maciej W. Rozycki
2013-06-14  6:53     ` Yao Qi
2013-06-14 12:53       ` Maciej W. Rozycki
2013-06-20 19:40         ` Pedro Alves
2013-06-20 20:45           ` Maciej W. Rozycki
2013-06-21 14:58             ` Pedro Alves
2013-06-17 16:04     ` Maciej W. Rozycki
2013-05-30  2:44 ` [PATCH 3/3] MIPS h/w watchpoint in GDBserver Yao Qi
2013-06-13  8:20   ` Yao Qi
2013-06-13 13:09     ` Eli Zaretskii
2013-06-13 16:56     ` Pedro Alves
2013-06-19 22:22     ` Maciej W. Rozycki
2013-06-21 15:00       ` Pedro Alves
2013-05-30  2:44 ` [PATCH 2/3] Move mips hardware watchpoint stuff to common/ Yao Qi
2013-06-13  4:12   ` Yao Qi
2013-06-19 22:05     ` Maciej W. Rozycki
2013-06-20 14:21       ` Yao Qi
2013-06-20 15:27         ` Maciej W. Rozycki
2013-06-20 17:50           ` Joel Brobecker
2013-06-21  8:03             ` Maciej W. Rozycki
2013-06-21 15:55               ` Joel Brobecker
2013-05-30 12:29 ` [PATCH 0/3] mips hardware watchpoint support in gdbserver Maciej W. Rozycki
2013-05-30 18:06 ` Pedro Alves
2013-05-30 18:08   ` Pedro Alves
2013-06-29  3:11 ` [PATCH v2 0/5] " Yao Qi
2013-06-29  3:11   ` [PATCH 1/5] Share 'enum target_hw_bp_type' in GDB and GDBserver Yao Qi
2013-07-24  0:26     ` Maciej W. Rozycki
2013-07-24 14:04       ` Tom Tromey
2013-07-28  0:41         ` Yao Qi
2013-06-29  3:11   ` [PATCH 5/5] MIPS GDBserver watchpoint Yao Qi
2013-06-29 15:20     ` Eli Zaretskii
2013-07-24  0:35     ` Maciej W. Rozycki [this message]
2013-07-25  0:17       ` Yao Qi
2013-07-25 21:20         ` Maciej W. Rozycki
2013-07-28  0:49           ` Yao Qi
2013-07-24 18:11     ` Pedro Alves
2013-06-29  3:11   ` [PATCH 2/5] Include asm/ptrace.h in mips-linux-nat.c Yao Qi
2013-07-24  0:26     ` Maciej W. Rozycki
2013-07-28  0:43       ` Yao Qi
2013-06-29  3:11   ` [PATCH 3/5] Refactor " Yao Qi
2013-07-24  0:27     ` Maciej W. Rozycki
2013-07-28  0:44       ` Yao Qi
2013-06-29  8:01   ` [PATCH 4/5] Move mips hardware watchpoint stuff to common/ Yao Qi
2013-07-24  0:31     ` Maciej W. Rozycki
2013-07-24  2:08       ` Yao Qi
2013-07-24 18:09         ` Pedro Alves
2013-07-25  0:07       ` Yao Qi
2013-07-25 21:17         ` Maciej W. Rozycki
2013-07-28  0:47           ` Yao Qi
2013-07-22  1:11   ` [PATCH v2 0/5] mips hardware watchpoint support in gdbserver Yao Qi

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=alpine.DEB.1.10.1307232257170.32382@tp.orcam.me.uk \
    --to=macro@codesourcery.com \
    --cc=gdb-patches@sourceware.org \
    --cc=yao@codesourcery.com \
    /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