Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: "Ulrich Weigand" <uweigand@de.ibm.com>
To: pedro@codesourcery.com (Pedro Alves)
Cc: gdb-patches@sourceware.org,
	brobecker@adacore.com (Joel Brobecker),
	       tromey@redhat.com (Tom Tromey)
Subject: Re: RFC: remove gdbarch from struct breakpoint
Date: Tue, 08 Nov 2011 16:22:00 -0000	[thread overview]
Message-ID: <201111081622.pA8GMAfm019242@d06av02.portsmouth.uk.ibm.com> (raw)
In-Reply-To: <201111071609.39862.pedro@codesourcery.com> from "Pedro Alves" at Nov 07, 2011 04:09:39 PM

Pedro Alves wrote:
> On Monday 07 November 2011 15:20:58, Joel Brobecker wrote:
> > I think that makes sense. I am trying to figure out how a breakpoint
> > could have a gdbarch that made some sort of sense when the breakpoint
> > has two locations and each location had a different gdbarch from
> > the other....
> 
> History behind the fields:
>  http://sourceware.org/ml/gdb-patches/2009-06/msg00215.html
> and:
>  http://sourceware.org/ml/gdb-patches/2009-07/msg00075.html
> 
> Reading the first url, I was wondering if we'd indeed need the
> breakpoint's gdbarch for reparsing conditions and watchpoint
> expressions (or anything that uses expressions instead of linespecs),
> but I can't find such dependency in the code.  Maybe Ulrich can
> take a look at this.  The Cell combined debugger can maybe
> reveal hidden dependencies with the gdbarch fallbacks we do.

Ahh.  That seems to be one of the "open ends" of multi-arch support
that has never been addressed so far.  Currently, expression parsing
always takes place in the "current" architecture context; see the
get_current_arch call in parse_exp_in_context.  This is really a bug;
the parse routines probably ought to take a gdbarch parameter instead.

(The reasons why expression parsing is dependent on the architecture
are basically those Stan described; things like how to interpret register
names, struct layout ABI, and predefined types like "long".)

Having a gdbarch field in "struct breakpoint" was in part a preparation
for this: once expression parsing is -properly- done specifically in an
architecture context, we need to decide which arch to pass when parsing
(and re-parsing) breakpoint conditions and expressions.  My thought was
that the right way to do that would be to remember and re-use the
architecture that was current at the time the expression was initially
entered; just like is currently done with the language and input radix
used when reparsing conditions and watchpoint expressions.

Most other architecture-dependent things in breakpoint.c etc really
should use a per-location architecture.  However, the way the per-
location arch is currently chosen is to either determine it from
the location --but this works only if we find a symtab!-- or else
fall back to the main breakpoint architecture.  If we remove that
fall back, there will be cases where breakpoints are set at locations
with no symtab (e.g. in generated code, stack trampolines, etc.)
and we will not find any associated architecture.

Now maybe it is not really correct to use the same field both for the
architecture to parse a breakpoint expression, and as the fall-back
location arch for locations without symtab.  Maybe the fall-back could
instead be a per-program_space default gdbarch ... or we could add a
gdbarch field to the SAL, and require all users to fill it ...

> > In most cases, it is sufficient to replace the use of this field with
> > the location's gdbarch instead.  In fact, I think the cases in
> > tracepoint.c where this is not done are probably latent bugs.
> 
> Yeah.

Agreed about the tracepoint.c uses.

Bye,
Ulrich

-- 
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  Ulrich.Weigand@de.ibm.com


  parent reply	other threads:[~2011-11-08 16:22 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-27 15:21 Tom Tromey
2011-11-07 15:21 ` Joel Brobecker
2011-11-07 16:10   ` Pedro Alves
2011-11-07 16:52     ` Stan Shebs
2011-11-08 16:22     ` Ulrich Weigand [this message]
2011-11-08 17:00       ` Tom Tromey
2011-11-08 17:19         ` Ulrich Weigand
2011-11-08 18:10           ` Tom Tromey
2011-11-09 18:22             ` Tom Tromey
2011-11-14 16:10             ` FYI: tracepoints and multi-arch (Was: RFC: remove gdbarch from struct breakpoint) Tom Tromey

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=201111081622.pA8GMAfm019242@d06av02.portsmouth.uk.ibm.com \
    --to=uweigand@de.ibm.com \
    --cc=brobecker@adacore.com \
    --cc=gdb-patches@sourceware.org \
    --cc=pedro@codesourcery.com \
    --cc=tromey@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