From: Joel Brobecker <brobecker@adacore.com>
To: Mark Wielaard <mjw@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [RFA/DWARF] constant class of DW_AT_high_pc is offset for version >=4 only.
Date: Tue, 18 Feb 2014 18:49:00 -0000 [thread overview]
Message-ID: <20140218184906.GB15835@adacore.com> (raw)
In-Reply-To: <1392739369.21975.145.camel@bordewijk.wildebeest.org>
Hi Mark,
First of all, thanks for the comments!
On Tue, Feb 18, 2014 at 05:02:49PM +0100, Mark Wielaard wrote:
> On Tue, 2014-02-18 at 14:30 +0100, Joel Brobecker wrote:
> > 1. The introduction of attr_value_as_address, to be used
> > in place of DW_ADDR when dealing with address attributes.
> > I left a few uses of this macro in the situations where
> > we actually know that the form is an address form.
>
> This accepts any form as address/unsigned. I would at least check that
> it is either DW_FORM_data4 or DW_FORM_data8 (even better would be to
> check the CU address width too, although that would require to pass
> around cu too, which might not be practical).
I don't mind adding that, but the real question is what would we do
if we found an unexpected size? We could emit a complaint, but
I wouldn't necessarily stop processing the unit's debugging info.
I think the guideline here is that we should try to do our best
within reasonable constraints. I think adding a complaint, here,
is of marginal value as presumably the address read in the odd
format might be correct. On the other hand, any dump of the debugging
info should quickly reveal the format used for those addresses.
> Also I would add a comment
> that this is really to work around buggy producers.
I will definitely add a comment saying something about some compiler
producing odd debugging info. It seems logical to me that address
attributes would naturally be encoded using an address form, but is
a constant form clearly forbidden by the (older) standard(s)?
I would therefore just label the format chosen as unusual. :-).
> > @@ -4201,7 +4217,7 @@ dwarf2_find_base_address (struct die_info *die, struct dwarf2_cu *cu)
> > attr = dwarf2_attr (die, DW_AT_entry_pc, cu);
> > if (attr)
> > {
> > - cu->base_address = DW_ADDR (attr);
> > + cu->base_address = attr_value_as_address (attr);
> > cu->base_known = 1;
> > }
>
> Note that this might break for DWARF5. See http://dwarfstd.org/ShowIssue.php?issue=120719.1
Interesting. I am curious why you would handle this attribute as
an offset even when the value is encoded in address form? Would
that not help improve backward compatibility with older versions
of DWARF?
But regardless, I think my change doesn't break the current behavior;
and to support the DWARF5 standard, the behavior implemented by
the function is still correct (reading the data from the correct
union field). You will need to add some code right after the call,
regardless, which adds the base address if version >= 5.
> In general I would only use attr_value_as_address for attributes (low_pc
> and high_pc) which you know a buggy producer might encode with
> DW_FORM_data[48].
I think this suggestion goes against the spirit of trying to do our
best. Not using the function means reading the attribute value from
the wrong field of the attribute union, which means increasing our
chances of getting it wrong. On the other hand, using the function
might allow us to read the correct address and get things to actually
work.
Also, I don't have acces to said compiler, so I can't try to study
its output and list the attributes using this constant form. But
if the low/hi pc attributes use a constant form, why not the
entry_pc?
--
Joel
next prev parent reply other threads:[~2014-02-18 18:49 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-15 15:40 Joel Brobecker
2014-02-16 19:19 ` Mark Wielaard
2014-02-17 9:19 ` Joel Brobecker
2014-02-18 13:30 ` Joel Brobecker
2014-02-18 16:03 ` Mark Wielaard
2014-02-18 18:49 ` Joel Brobecker [this message]
2014-02-18 20:29 ` Doug Evans
2014-02-18 21:52 ` Mark Wielaard
2014-02-19 7:23 ` Joel Brobecker
2014-02-19 13:44 ` Mark Wielaard
2014-02-21 18:42 ` Joel Brobecker
2014-02-26 10:53 ` Mark Wielaard
2014-02-26 19:45 ` pushed: " Joel Brobecker
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=20140218184906.GB15835@adacore.com \
--to=brobecker@adacore.com \
--cc=gdb-patches@sourceware.org \
--cc=mjw@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