Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Joel Brobecker <brobecker@adacore.com>
To: Jan Kratochvil <jan.kratochvil@redhat.com>
Cc: Pedro Alves <palves@redhat.com>, Tom Tromey <tromey@redhat.com>,
	gdb-patches@sourceware.org
Subject: Re: RFC for: "Re: Regression for gdb.fortran/library-module.exp [Re: [RFA] choose symbol from given block's objfile first.]"
Date: Mon, 28 May 2012 14:27:00 -0000	[thread overview]
Message-ID: <20120528142727.GH5492@adacore.com> (raw)
In-Reply-To: <20120518164815.GA11883@host2.jankratochvil.net>

> I see a bit problem this function is objfile based and not solib
> based, as the solib order from svr4_current_sos() is completely lost
> here.
> 
> That is if we have two shared libraries with global variable X ld.so
> defines which one gets used depending on their dlopen order.
> 
> so_list_head already has wrong order due to update_solib_list.  Maybe
> update_solib_list should be fixed to keep both so_list_head order and
> also properly ensure matching objfiles order.
> 
> If someone does some add-symbol-file by hand the order gets lost
> anyway.
> 
> Maybe we could ensure just so_list_head order, place this "correct
> order search" to elf_lookup_lib_symbol and fall back to the old
> unfixed objfiles search in arbitrary order to keep add-symbol-file
> working.
> 
> Sure there should be some exceptions for hidden symbols but this
> should be implementable on top of your CONTEXT_OBJFILE being there
> probably for this purpose.  Plus weak symbols.

I just want to make sure that we do not get carried away trying to
implement the perfect solution, because I don't have the time in
the next few weeks to implement it, and I don't even know how to
do that at the moment.

What I am trying to do is to fix the regression that you observed
in the Fortran testsuite, which somewhat also affects all languages
as well.

> > +  if (context_objfile && !(context_objfile->flags & OBJF_MAINLINE))
> > +    {
> > +      stop = cb (context_objfile, cb_data);
> > +      if (stop)
> > +	return;
> > +    }
> > +
> > +  ALL_OBJFILES (objfile)
> > +    {
> > +      if (!(objfile->flags & OBJF_MAINLINE) && objfile != context_objfile)
> > +	{
> > +	  stop = cb (objfile, cb_data);
> > +	  if (stop)
> > +	    return;
> > +	}
> > +    }
> > +}
> 
> I do not see why to use the OBJF_MAINLINE exceptions here.  I see the
> correct order is just the most simple ALL_OBJFILES loop.

You have to start with the MAINLINE objfiles first, as you demonstrated
with your Fortran program.

What the code above does, in practice, is trying to go through
the ALL_OBJFILES list in the same order as before, except that
we try the "context" objfile file first.  But, to make things
even more interesting, having a "context" objfile does not mean
that it should be checked ahead of any MAINLINE objfile, because
otherwise we break your Fortran test.  Another way of expressing
the intent of my patch is to say: Try the "context" objfile first,
unless it's not a MAINLINE objfile, in which case we try the
MAINLINE objfiles, and then our "context" objfile.

> Maybe you could re-state the case you were trying to fix as your testcase
> 	gdb.base/print-file-var.exp false PASS [Re: [RFA] choose symbol from given block's objfile first.]
> 	http://sourceware.org/ml/gdb-patches/2012-05/msg00692.html
> is wrong.

Actually, I prefer target-dependent, since I showed that it is not
wrong for x86-windows.

I definitely feel like I've opened a can of worms that I will not have
time and energy to fix (actual linking behavior is target dependent,
and getting the correct search order is also target dependent). This
was also meant as a cheap improvement while I work on extending the
expression parser(s) [I plan on enhancing C and Ada only, not the
other languages]

So, we have two options, at this point:

  (1) Revert my original patch;

  (2) Enhance the heuristics in my patch. This second patch is an
      attempt at this.

I think it would be a loss to revert, but if we cannot converge on
the heuristics for the search, then we'll just go to the previous
search order (which may also be arbitrary in some ways).

In the end, I think the current heuristics are not perfect but more
helpful in some situations, without hopefully be worse for some
other situations. If we can't agree on that, then I think the best
option at this point is to revert my patch, as it obviously had
some unintended and unwanted side effects.

Which way do we want to go?

-- 
Joel

PS: Just a reminder that we are also potentially one week away from
    branching.


  reply	other threads:[~2012-05-28 14:27 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-07 22:43 [RFC] choose symbol from given block's objfile first Joel Brobecker
2012-05-08 17:19 ` Tom Tromey
2012-05-09 19:05   ` [RFA] " Joel Brobecker
2012-05-09 19:08     ` Joel Brobecker
2012-05-09 20:15       ` Tom Tromey
2012-05-09 20:40         ` Joel Brobecker
2012-05-09 20:57           ` Tom Tromey
2012-05-09 21:06             ` Joel Brobecker
2012-05-10 13:42               ` Tom Tromey
2012-05-10 16:27                 ` checked in: " Joel Brobecker
2012-05-10 17:19               ` Joel Brobecker
2012-05-09 21:48       ` Joel Brobecker
2012-05-09 21:49         ` Joel Brobecker
2012-05-18 16:10           ` gdb.base/print-file-var.exp false PASS [Re: [RFA] choose symbol from given block's objfile first.] Jan Kratochvil
2012-05-18 17:17             ` Joel Brobecker
2012-05-18 17:37               ` Jan Kratochvil
2012-05-09 20:08     ` [RFA] choose symbol from given block's objfile first Tom Tromey
2012-05-11  7:26     ` Regression for gdb.fortran/library-module.exp [Re: [RFA] choose symbol from given block's objfile first.] Jan Kratochvil
2012-05-11 12:25       ` Joel Brobecker
2012-05-14 14:39       ` Joel Brobecker
2012-05-14 14:52         ` Jan Kratochvil
2012-05-14 15:06           ` Joel Brobecker
2012-05-14 15:15             ` Jan Kratochvil
2012-05-14 16:57               ` Joel Brobecker
2012-05-14 17:05                 ` Jan Kratochvil
2012-05-14 17:49           ` Pedro Alves
2012-05-14 17:59             ` Joel Brobecker
2012-05-14 18:07               ` Jan Kratochvil
2012-05-15 13:09                 ` Joel Brobecker
2012-05-16 19:57                   ` RFC for: "Re: Regression for gdb.fortran/library-module.exp [Re: [RFA] choose symbol from given block's objfile first.]" Joel Brobecker
2012-05-18 17:46                     ` Jan Kratochvil
2012-05-28 14:27                       ` Joel Brobecker [this message]
2012-05-28 16:12                         ` Jan Kratochvil
2012-05-29 15:44                           ` Joel Brobecker
2012-05-29 15:49                             ` Joel Brobecker
2012-05-29 15:56                             ` Jan Kratochvil
2012-05-29 16:02                               ` Joel Brobecker
2012-05-29 16:12                                 ` Jan Kratochvil
2012-05-29 16:31                                   ` Pedro Alves
2012-05-10 14:14 ` [RFC] choose symbol from given block's objfile first Pedro Alves
2012-05-10 14:32   ` Tom Tromey
2012-05-10 14:50     ` Matt Rice
2012-05-10 15:07       ` Pedro Alves

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=20120528142727.GH5492@adacore.com \
    --to=brobecker@adacore.com \
    --cc=gdb-patches@sourceware.org \
    --cc=jan.kratochvil@redhat.com \
    --cc=palves@redhat.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