From: Pedro Alves <pedro@codesourcery.com>
To: "Maciej W. Rozycki" <macro@codesourcery.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH] remote: Fix hw watchpoint address matching
Date: Fri, 09 Dec 2011 14:34:00 -0000 [thread overview]
Message-ID: <201112091415.08804.pedro@codesourcery.com> (raw)
In-Reply-To: <alpine.DEB.1.10.1112072227440.6710@tp.orcam.me.uk>
On Wednesday 07 December 2011 23:18:21, Maciej W. Rozycki wrote:
> On Wed, 7 Dec 2011, Pedro Alves wrote:
>
> > > +static int
> > > +remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
> > > + CORE_ADDR start, int length)
> > > +{
> > > + CORE_ADDR diff = remote_address_masked (addr - start);
> > > +
> > > + return diff >= 0 && diff < length;
> > > +}
> >
> > CORE_ADDR is unsigned. `>= 0' is always true.
>
> Umm...
>
> > Wouldn't it be much more readable to:
> >
> > {
> > CORE_ADDR start = remote_address_masked (start);
> >
> > return start <= addr && addr < start + length;
> > }
> >
> > ?
> >
> > (assuming addr is already masked, since that was the address
> > the target reported.)
>
> This makes me nervous. I think we should be liberal on what we accept.
> In particular ILP32 ABIs on 64-bit targets may be affected. An example is
> the MIPS n64 ABI where the width of general registers is 64 bits and
> addresses are sign-extended 32 bits. When bit #31 is set in the address,
> the remote stub may possibly report the value as truncated to 32 bits or
> as a properly sign-extended 64-bit value. Not that I observed this
> anywhere, but I think we should accept both.
If such thing were possible, then wouldn't breakpoints break?
We store the (masked) address of where we ended up putting
the breakpoint in bp_tgt->placed_address (remote_insert_breakpoint),
and if the target reported an address not exactly bp_tgt->placed_address,
we wouldn't be able to match it up, resulting in spurious SIGTRAPs.
Hmm, actually, it looks like breakpoint.c:bkpt_breakpoint_hit is broken
in that it should be using bl->target_info.placed_address instead
of bl->address ? How is this not breaking on cases that need
breakpoint adjustment? I'm probably missing something.
> Here's an updated version; I have annotated the function now too per
> Joel's suggestion elsewhere even though these are rather scarce throughout
> remote.c.
Actually, for implementations of defined interfaces, such as the
target vector or gdbarch callbacks, we prefer to leave the explanation
of the interface to where the interface is defined, and, write something
like
/* Implementation of target method FOO. */
This prevents comment bit rot whenever the main comment in the
interface declaration changes, but implementations' comments
are forgotten.
I see that target_watchpoint_addr_within_range is unfortunately
undocumented in target.h. Fortunately, you've already written
the necessary comment. :-) Could you place it there instead
please? Okay with that change. Thanks.
--
Pedro Alves
next prev parent reply other threads:[~2011-12-09 14:15 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-30 18:24 Maciej W. Rozycki
2011-12-07 17:55 ` Pedro Alves
2011-12-07 23:36 ` Maciej W. Rozycki
2011-12-09 14:34 ` Pedro Alves [this message]
2012-02-25 1:54 ` Maciej W. Rozycki
2012-03-06 18:56 ` Pedro Alves
2012-03-06 20:20 ` Maciej W. Rozycki
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=201112091415.08804.pedro@codesourcery.com \
--to=pedro@codesourcery.com \
--cc=gdb-patches@sourceware.org \
--cc=macro@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