Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Corinna Vinschen <vinschen@redhat.com>
To: gdb-patches@sources.redhat.com
Subject: Re: [RFA] breakpoint.c, scanning epilogue if frame chain is invalid
Date: Wed, 03 Sep 2003 11:18:00 -0000	[thread overview]
Message-ID: <20030903111828.GT1859@cygbert.vinschen.de> (raw)
In-Reply-To: <uwucq1578.fsf@elta.co.il>

On Wed, Sep 03, 2003 at 01:28:43PM +0200, Eli Zaretskii wrote:
> > Date: Wed, 3 Sep 2003 11:38:15 +0200
> > From: Corinna Vinschen <vinschen@redhat.com>
> > 
> > -      if (within_current_scope && fr == get_current_frame ()
> > +      if ((!within_current_scope || fr == get_current_frame ())
> >            && gdbarch_in_function_epilogue_p (current_gdbarch, read_pc ()))
> >  	return WP_VALUE_NOT_CHANGED;
> >        if (within_current_scope)
> > [...]
> > The above patch is basically this:  If we couldn't find the watchpoint
> > frame, at least try to find out if PC is just in an epilogue.  If so,
> > it's probably the cause of failing to find the watchpoint frame so just
> > leave the watchpoint alone until we're on firmer ground again.
> 
> I'm not sure I understand why did you change
> 
>     within_current_scope && fr == get_current_frame ()
> 
> into
> 
>     (!within_current_scope || fr == get_current_frame ())
> 
> It doesn't seem to follow from the verbal description of the decision
> you'd like the code to make.  Perhaps I'm missing something, so could
> you please elaborate how the verbal description translates into the
> code?

The lines before this code are

  fr = frame_find_by_id (b->watchpoint_frame);
  within_current_scope = (fr != NULL);

So "within_current_scope" actually means "Couldn't find watchpoint frame".
Being out of scope is one possible cause, being in an epilogue another.

  if (!within_current_scope ||     <==     fr == NULL
      fr == get_current_frame ())  <==  or fr != NULL and
                                           current frame == watchpoint frame
  then call gdbarch_in_function_epilogue_p(current pc).

So after the change gdbarch_in_function_epilogue_p() is also called if the
watchpoint frame couldn't be found because the frame chain is temporarily
broken.  Since this is very likely occuring in an epilogue, it's pretty
naturally to call gdbarch_in_function_epilogue_p().

Corinna

-- 
Corinna Vinschen
Cygwin Developer
Red Hat, Inc.


  reply	other threads:[~2003-09-03 11:18 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-09-03  9:38 Corinna Vinschen
2003-09-03 10:27 ` Eli Zaretskii
2003-09-03 11:18   ` Corinna Vinschen [this message]
2003-09-04 17:04     ` Eli Zaretskii
2003-09-04 17:21       ` Andrew Cagney
2003-09-04 17:33         ` Corinna Vinschen
2003-09-04 17:25       ` Corinna Vinschen

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=20030903111828.GT1859@cygbert.vinschen.de \
    --to=vinschen@redhat.com \
    --cc=gdb-patches@sources.redhat.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