Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Michael Snyder <msnyder@vmware.com>
To: Hui Zhu <teawater@gmail.com>
Cc: gdb-patches ml <gdb-patches@sourceware.org>,
	  shuchang zhou <shuchang.zhou@gmail.com>,
	 paawan oza <paawan1982@yahoo.com>
Subject: Re: [RFC] Add support of software single step to process record
Date: Fri, 18 Dec 2009 19:37:00 -0000	[thread overview]
Message-ID: <4B2BD97E.1020106@vmware.com> (raw)
In-Reply-To: <daef60380912180021h5d029e55k7dc4e3f4c8d33b36@mail.gmail.com>

Hui Zhu wrote:
> Hi guys,
> 
> This patch to make prec support software single step.
> I just try it with i386.  Shuchang, please help me try it on mips.  :)
> 
> BTW, There are still some other patches for record_resume and
> record_wait. And other arch patch is still not begin to be review.  So
> this patch is not very urgency.  It just help the guys that are
> working on prec arch porting.

Seems OK in principle.  Thanks for adding a nice clean API to breakpoint.


> 2009-12-18  Hui Zhu  <teawater@gmail.com>
> 
> 	* breakpoint.c (inserted_single_step_breakpoint_p): New
> 	function.
> 	* breakpoint.h (inserted_single_step_breakpoint_p): Extern.
> 	* record.c (record_resume): Add code for software single step.
> 	(record_wait): Ditto.
> 
> ---
>  breakpoint.c |   12 ++++++++++++
>  breakpoint.h |    1 +
>  record.c     |   35 ++++++++++++++++++++++++++++++-----
>  3 files changed, 43 insertions(+), 5 deletions(-)
> 
> --- a/breakpoint.c
> +++ b/breakpoint.c
> @@ -9624,6 +9624,18 @@ insert_single_step_breakpoint (struct gd
>  	     paddress (gdbarch, next_pc));
>  }
> 
> +/* Check if the breakpoints used for software single stepping
> inserted or not.  */
> +
> +int
> +inserted_single_step_breakpoint_p (void)
> +{
> +  if (single_step_breakpoints[0] != NULL
> +      || single_step_breakpoints[1] != NULL)
> +    return 1;
> +
> +  return 1;
> +}
> +
>  /* Remove and delete any breakpoints used for software single step.  */
> 
>  void
> --- a/breakpoint.h
> +++ b/breakpoint.h
> @@ -944,6 +944,7 @@ extern int remove_hw_watchpoints (void);
>     twice before remove is called.  */
>  extern void insert_single_step_breakpoint (struct gdbarch *,
>  					   struct address_space *, CORE_ADDR);
> +extern int inserted_single_step_breakpoint_p (void);
>  extern void remove_single_step_breakpoints (void);
> 
>  /* Manage manual breakpoints, separate from the normal chain of
> --- a/record.c
> +++ b/record.c
> @@ -995,6 +995,8 @@ record_resume (struct target_ops *ops, p
> 
>    if (!RECORD_IS_REPLAY)
>      {
> +      struct gdbarch *gdbarch = get_current_arch ();
> +
>        if (do_record_message (get_current_regcache (), signal))
>          {
>            record_resume_error = 0;
> @@ -1004,8 +1006,18 @@ record_resume (struct target_ops *ops, p
>            record_resume_error = 1;
>            return;
>          }
> -      record_beneath_to_resume (record_beneath_to_resume_ops, ptid, 1,
> -                                signal);
> +
> +      if (gdbarch_software_single_step_p (gdbarch))
> +        {
> +          if (!inserted_single_step_breakpoint_p ())
> +            gdbarch_software_single_step (gdbarch, get_current_frame ());
> +          record_beneath_to_resume (record_beneath_to_resume_ops,
> +                                    ptid, step, signal);
> +          record_resume_step = 0;
> +        }
> +      else
> +        record_beneath_to_resume (record_beneath_to_resume_ops, ptid, 1,
> +                                  signal);
>      }
>  }
> 
> @@ -1086,6 +1098,7 @@ record_wait (struct target_ops *ops,
>  	  /* This is not a single step.  */
>  	  ptid_t ret;
>  	  CORE_ADDR tmp_pc;
> +          struct gdbarch *gdbarch = get_current_arch ();
> 
>  	  while (1)
>  	    {
> @@ -1108,6 +1121,9 @@ record_wait (struct target_ops *ops,
>  		  tmp_pc = regcache_read_pc (regcache);
>  		  aspace = get_regcache_aspace (regcache);
> 
> +                  if (gdbarch_software_single_step_p (gdbarch))
> +                    remove_single_step_breakpoints ();
> +
>  		  if (target_stopped_by_watchpoint ())
>  		    {
>  		      /* Always interested in watchpoints.  */
> @@ -1133,9 +1149,18 @@ record_wait (struct target_ops *ops,
>  		      if (!do_record_message (regcache, TARGET_SIGNAL_0))
>  			break;
> 
> -		      record_beneath_to_resume (record_beneath_to_resume_ops,
> -						ptid, 1,
> -						TARGET_SIGNAL_0);
> +                      if (gdbarch_software_single_step_p (gdbarch))
> +                        {
> +                          gdbarch_software_single_step (gdbarch,
> +                                                        get_current_frame ());
> +                          record_beneath_to_resume
> (record_beneath_to_resume_ops,
> +                                                    ptid, 0,
> +                                                    TARGET_SIGNAL_0);
> +                        }
> +                      else
> +		        record_beneath_to_resume (record_beneath_to_resume_ops,
> +						  ptid, 1,
> +						  TARGET_SIGNAL_0);
>  		      continue;
>  		    }
>  		}


  reply	other threads:[~2009-12-18 19:37 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-18  8:21 Hui Zhu
2009-12-18 19:37 ` Michael Snyder [this message]
2009-12-20 13:48   ` Joel Brobecker
2009-12-23  6:38     ` Hui Zhu
2009-12-23  6:52       ` Joel Brobecker
2009-12-23  9:24         ` Hui Zhu
     [not found]           ` <8d62b6fe0912231751p1202294cw83430e8d53af0951@mail.gmail.com>
2009-12-24  1:54             ` Fwd: " shuchang zhou
2009-12-24 17:38           ` Pedro Alves
2010-01-04 14:23             ` Hui Zhu
2010-01-08 16:24               ` Pedro Alves
2010-05-25  5:14                 ` Hui Zhu
2010-05-27  6:51                   ` Hui Zhu
2010-06-11 13:55                     ` Pedro Alves
2010-06-20  7:29                       ` Hui Zhu
2010-06-22 10:13                         ` Pedro Alves
2010-07-19  7:58                           ` Hui Zhu
2009-12-22 18:23 ` Tom Tromey
2009-12-23  3:09   ` Hui Zhu

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=4B2BD97E.1020106@vmware.com \
    --to=msnyder@vmware.com \
    --cc=gdb-patches@sourceware.org \
    --cc=paawan1982@yahoo.com \
    --cc=shuchang.zhou@gmail.com \
    --cc=teawater@gmail.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