public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Mike Hearn <mike@plan99.net>
To: gcc@gcc.gnu.org
Subject: Re: Symbol versions for inlined symbols
Date: Sun, 31 Jul 2005 13:52:00 -0000	[thread overview]
Message-ID: <pan.2005.07.31.14.53.41.42156@plan99.net> (raw)
In-Reply-To: <20050731045749.GA17880@nevyn.them.org>

On Sun, 31 Jul 2005 00:57:49 -0400, Daniel Jacobowitz wrote:
> You may wish to read the proceedings from this year's GCC summit, where
> another solution was presented by some gentlemen from Intel.  For various
> reasons, symbol versioning is not a useful solution to this problem.

I hadn't seen that, thanks. It's an interesting approach but a bit
confusing to somebody like me who doesn't use C++ very often: it sounded
from their writeup like you'd have to modify application code, and then in
other parts it sounded like actually only the libstdc++ headers would need
to be modified and apps would do the right thing transparently.

From my perspective the most convenient solution would be a way to modify
ELF symbol scoping (which is what symbol versioning does, in a complicated
sort of way). Instead of starting lookup for a symbol in libC from app,
going on through libstdc++.so.5, libA, libB, libC, libstdc++.so.6, libD:

app
 libstdc++.so.5
 libA,
 libB,
 libC,
   libstdc++.so.6
   libD

something more similar to Windows where a symbol lookup starting in libC
checks libC, libstdc++.so.6, libD, app, libstdc++,so.5, libA, libB would
work.

That way, the GLOBAL WEAK symbols in the std namespace would always
resolve to what you'd intuitively expect: the dependencies of that object.
ELF compatibility would mostly be preserved as symbols could still be
resolved to the parent and other objects in the image, but the chance of
cross-wiring would be reduced.

I think this is what the DT_1_GROUP flag is supposed to do, but for some
reason it was never implemented in the glibc linker. Does anybody know why?

Last time I talked about this with Michael Meeks at Novell, he seemed to
think the semantics of the DT_1_GROUP flag would mess up C++
exception handling, which relies on the current ordering. Is that so?

Oh, final thing - the GCC summit paper made it sound like only
rare proprietary apps need the ability to mix multiple libstdc++ versions
in the same image, but it's a very common thing to do for open source
programs too: specifically, games. Games are why I'm asking, actually :)

We already have nasty workarounds for this issue in place for NetPanzer,
Lincity and a few other projects that distribute binaries and may be
linked against other C++ libraries already on the system. The classic
example is "C++ Game -> SDL -> SDL_audio -> libArts (for KDE audio) ->
mismatched libstdc++ version -> crash in std::string".

thanks -mike

  reply	other threads:[~2005-07-31 13:52 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-30 23:00 Mike Hearn
2005-07-31  4:57 ` Daniel Jacobowitz
2005-07-31 13:52   ` Mike Hearn [this message]
2005-07-31 15:34     ` Daniel Jacobowitz
2005-07-31  6:04 dank

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=pan.2005.07.31.14.53.41.42156@plan99.net \
    --to=mike@plan99.net \
    --cc=gcc@gcc.gnu.org \
    /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).