From: Kevin Buettner <kevinb@redhat.com>
To: gdb-patches@sourceware.org
Cc: Simon Marchi <simon.marchi@polymtl.ca>
Subject: Re: [PATCH 1/2] Fix BZ 25065 - Ensure that physnames are computed for inherited DIEs
Date: Tue, 15 Oct 2019 16:27:00 -0000 [thread overview]
Message-ID: <20191015092743.7037f47c@f29-4.lan> (raw)
In-Reply-To: <8c073683bc0b0a8e7918fdfb346cbb03@polymtl.ca>
On Sun, 13 Oct 2019 23:02:01 -0400
Simon Marchi <simon.marchi@polymtl.ca> wrote:
> Hi Kevin,
>
> I don't really have the big picture of these advanced DWARF use cases,
> so I can't really weigh on this, but I have a question:
>
> > diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
> > index ee9df34ed2..f7ef122933 100644
> > --- a/gdb/dwarf2read.c
> > +++ b/gdb/dwarf2read.c
> > @@ -13666,6 +13666,17 @@ inherit_abstract_dies (struct die_info *die,
> > struct dwarf2_cu *cu)
> > origin_child_die = sibling_die (origin_child_die);
> > }
> > origin_cu->list_in_scope = origin_previous_list_in_scope;
> > +
> > + if (cu != origin_cu && !origin_cu->method_list.empty ())
> > + {
> > + /* Add list of methods found in origin_cu to the list in cu.
> > These
> > + methods still need to have their physnames computed in
> > + compute_delayed_physnames(). */
> > + cu->method_list.insert (cu->method_list.end (),
> > + origin_cu->method_list.begin (),
> > + origin_cu->method_list.end ());
> > + origin_cu->method_list.clear ();
> > + }
>
> So, this effectively makes the inheriting CU steal the method_list
> content from the inherited from CU? Is it possible for a CU to be
> inherited from multiple times? If so, what happens the second time we
> process something that inherits from this CU, the method_list vector
> will then be empty? Is it that we want?
Hi Simon,
You raise some good questions. I modified the test associated with
this bug so that two different CUs attempt to inherit a third CU.
This has turned up another bug in GDB which I spent the rest of the
day looking at. (GDB goes into an infinite loop!)
I'll make the following observations, however...
- method_list is used solely for keeping track of C++ methods for
delayed physname computations.
- method_list is cleared in process_full_comp_unit(),
process_full_type_unit(), and compute_delayed_physnames().
That latter function(), compute_delayed_physnames(), is called
after DIE processing in the first two functions. So method_list
is made to be empty prior to DIE processing and then made empty
(as a result of delayed physname computation) again after DIE
processing (in the above mentioned functions).
So, what is the right thing to do with regard to method_list for
inherit_abstract_dies()?
Yesterday, as part of my investigations, I made inherit_abstract_dies()
call compute_delayed_physnames in place of the code in my posted
patch. That also works, at least for my test case. I'll note that
for my original (posted) patch, compute_delayed_physnames will be
called with the inheriting CU. In the alternate approach (in which
compute_delayed_physnames is called from inherit_abstract_dies),
compute_delayed_physnames is called with the origin CU. I don't
yet know which is more correct or if there are cases where it'll
make a difference.
So... I'm continuing my investigations and will let you know when
I have some answers. In the interim, if anyone has some insights
about these matters, I'd very much like to hear them.
Kevin
next prev parent reply other threads:[~2019-10-15 16:27 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-14 0:19 [PATCH 0/2] Fix BZ 25065 (LTO related GDB segfault) Kevin Buettner
2019-10-14 0:19 ` [PATCH 2/2] Test case for BZ 25065 Kevin Buettner
2019-12-08 10:29 ` [committed] Fix inter-CU references using intra-CU form in imported-unit Tom de Vries
2019-10-14 0:19 ` [PATCH 1/2] Fix BZ 25065 - Ensure that physnames are computed for inherited DIEs Kevin Buettner
2019-10-14 3:02 ` Simon Marchi
2019-10-15 16:27 ` Kevin Buettner [this message]
2019-10-17 3:54 ` Simon Marchi
2019-10-17 5:30 ` Simon Marchi
2019-10-18 1:08 ` Kevin Buettner
2019-10-18 15:07 ` Simon Marchi
2019-10-21 20:05 ` Keith Seitz
2019-10-22 22:23 ` Kevin Buettner
2019-11-04 20:42 ` Kevin Buettner
2019-11-04 20:49 ` Simon Marchi
2019-11-27 20:17 ` Kevin Buettner
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=20191015092743.7037f47c@f29-4.lan \
--to=kevinb@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=simon.marchi@polymtl.ca \
/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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).