Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <pedro@codesourcery.com>
To: Yao Qi <yao@codesourcery.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [patch] XFAIL gdb.cp/mb-inline.exp conditionaly
Date: Thu, 23 Jun 2011 10:28:00 -0000	[thread overview]
Message-ID: <201106231128.14335.pedro@codesourcery.com> (raw)
In-Reply-To: <4E030591.6040709@codesourcery.com>

On Thursday 23 June 2011 10:21:21, Yao Qi wrote:
> On 06/22/2011 11:38 PM, Pedro Alves wrote:

> > The breakpoint was set by line number, and we're reloading
> > the session the same both times.  Why does breakpoint 1.2 become
> > enabled (and I'm guessing that breakpoint 1.1 becomes disabled)?
> > 
> 
> No, in my case, both 1.1 and 1.2 becomes enabled.
> info break^M
> Num     Type           Disp Enb Address    What^M
> 1       breakpoint     keep y   <MULTIPLE> ^M
>         breakpoint already hit 3 times^M
> 1.1                         y     0xe78c90a8 in foo(int) at
> gdb/testsuite/gdb.cp/mb-inline.h:26^M
> 1.2                         y     0xe78c91a8 in foo(int) at
> gdb/testsuite/gdb.cp/mb-inline.h:26^M
> 
> During breakpoint updates (when inferior is re-created), GDB will
> iterate list of breakpoint locations, to look for breakpoint locations
> for a certain address in new inferior, and assign found breakpoint
> locations to that breakpoint.  The state of breakpoint location
> (enabled/disabled) is kept, and this test will pass.
> 
> If gdb is unable to find any breakpoint location for a given address,
> gdb will create new breakpoint locations, and remove old breakpoint
> location.  Then, the state of breakpoint location of previous inferior
> is lost, and new created breakpoint location is enabled in default.

Okay, that happens when the locations have ambiguous names, at the
end of update_breakpoint_locations.

You're just re-running the same binary, and the breakpoints are even
all set in the same objfile.  Nothing changed from the user's
perpective.  It's reasonable to expect gdb manages to not lose track
of the disable state.  I think we can and should improve the heuristic
to handle this scenario.  

Instead of comparing
absolute addresses, normalize them before comparing.  E.g.,

Before             After
0x400010           0x800010
0x401000           0x801000
0x410000           0x810000
0x400100           0x800100

For each list, find some common base and subtract it from
each entry, and _then_ compare the locations:

Before             After
0x000010           0x000010
0x001000           0x001000
0x010000           0x010000
0x000100           0x000100

The common base might be the lowest address in each list,
or something else, like the objfile's lowest address, or
some such.  If we had some sort of unique symbol hash id,
we could use that instead, and it'd be more reliable, me
thinks.

-- 
Pedro Alves


  reply	other threads:[~2011-06-23 10:28 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-16  6:17 Yao Qi
2011-06-22 15:38 ` Pedro Alves
2011-06-23  9:21   ` Yao Qi
2011-06-23 10:28     ` Pedro Alves [this message]
2011-06-23 13:40       ` Yao Qi
2011-06-23 14:00         ` Pedro Alves
2011-06-23 10:37     ` Pedro Alves
2011-06-23 14:41       ` 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=201106231128.14335.pedro@codesourcery.com \
    --to=pedro@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