public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Cary Coutant <ccoutant@gmail.com>
To: Alan Modra <amodra@gmail.com>
Cc: Joe Groff <jgroff@apple.com>, "H.J. Lu" <hjl.tools@gmail.com>,
		Binutils <binutils@sourceware.org>
Subject: Re: Preventing preemption of 'protected' symbols in GNU ld 2.26
Date: Tue, 29 Mar 2016 00:29:00 -0000	[thread overview]
Message-ID: <CAJimCsEttS7AMfqhJ+Fy3WRvL-UTzDKbmBqKgjSedXCX3_g-Jg@mail.gmail.com> (raw)
In-Reply-To: <20160328232105.GA15812@bubble.grove.modra.org>

>> > Wouldn't references to the symbol from within the .so need to be relocated to reference the now-canonical copy in the executable?
>>
>> No, references from within the .so would have always used the GOT.
>> Non-protected global symbols in a shared library are still
>> pre-emptible, so they are always indirect, and there's always a
>> dynamic relocation for the GOT entry. Whether the prevailing
>> definition winds up in the executable or the shared library, the
>> dynamic loader still has to bind the symbol and apply the relocation.
>
> HJ's changes to protected visibility meant compiler changes so that
> protected visibility in shared libraries is no longer seen as local.
> So yes, protected visibility symbols in shared libraries now go
> through the GOT.  Prior to his changes, they were optimized to a
> pc-relative access.  Joe is correct in pointing out that shared
> libraries needed a change.  Bad luck if you're using an older
> compiler.  Also bad luck if you want to use protected visibility to
> optimize your shared library.
>
> HJ also made glibc ld.so changes to ensure the semantics of protected
> visibility symbols remain unchanged when multiple shared libraries
> define the same protected visibility symbol.
>
> Apparently most people in the gcc and glibc communities saw these
> toolchain modifications as fiendishly clever.

I may have misunderstood the context of Joe's question, but I read it
as asking about the effect of Sri's changes to use direct references
to all symbols in PIE mode, rather than the effect of HJ's changes to
use indirect references to protected symbols in PIC mode.

In the former context, we're talking about code where protected
symbols are not often used, references from the executable to shared
library data is infrequent, and the intersection of the two is
exceedingly rare. There was a clear benefit to changing PIE code to
use GOT-relative, rather than GOT-indirect, references to data. It was
only necessary to tweak the linker to allow COPY relocations from a
PIE executable so that the infrequent references from the executable
to (non-protected) shared library data symbols would still work. Any
non-PIC references to protected symbols would have already failed
because the code had already successfully built as a non-PIE
application.

In the latter context, we're talking about penalizing access to
protected symbols within a shared library in order to support that
exceedingly rare case that already didn't work for non-PIE code. I
just don't see the value.

It's too bad that Sri's PIE changes pre-dated HJ's mov-to-lea
link-time optimization. I suspect that that optimization, all by
itself, would have reclaimed most of the lost performance that Sri
observed when turning on -fPIE, and we may never have descended into
this morass.

-cary

  reply	other threads:[~2016-03-29  0:29 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-24  0:00 Joe Groff
2016-03-24  0:45 ` H.J. Lu
2016-03-24  0:52   ` Joe Groff
2016-03-24  1:25     ` H.J. Lu
2016-03-24 15:01 ` Cary Coutant
2016-03-24 15:07   ` H.J. Lu
2016-03-24 16:06     ` Cary Coutant
2016-03-24 16:42       ` H.J. Lu
2016-03-24 16:56         ` Cary Coutant
2016-03-24 17:05           ` H.J. Lu
2016-03-24 17:06             ` Joe Groff
2016-03-24 17:09               ` H.J. Lu
2016-03-24 18:31                 ` Cary Coutant
2016-03-27 16:26                   ` Rafael Espíndola
2016-03-28 12:12                   ` H.J. Lu
     [not found]                     ` <BC969B3B-87A2-4238-90C8-DA2E166707AF@apple.com>
2016-03-28 17:03                       ` Joe Groff
2016-03-28 17:17                       ` H.J. Lu
2016-03-28 22:22                       ` Cary Coutant
2016-03-28 22:24                         ` Joe Groff
2016-03-28 22:38                           ` Cary Coutant
2016-03-28 22:41                             ` Joe Groff
2016-03-28 23:21                             ` Alan Modra
2016-03-29  0:29                               ` Cary Coutant [this message]
2016-03-29 15:44                               ` H.J. Lu
2016-03-28 22:12                     ` Cary Coutant
2016-03-29 12:40                   ` Maciej W. Rozycki
     [not found] <AB592ABD-D6D7-4D2F-A0D6-45738F168DC4@apple.com>
2016-03-29 19:31 ` Fwd: " Joe Groff
2016-03-29 19:33   ` H.J. Lu
2016-03-29 19:36     ` Joe Groff
2016-03-29 19:43       ` H.J. Lu
2016-03-29 19:51         ` Joe Groff
2016-03-29 19:54           ` H.J. Lu
2016-03-29 22:05             ` H.J. Lu
2016-03-30  1:44             ` Alan Modra
2016-03-30  1:46             ` Cary Coutant
2016-03-30  4:04               ` Jeff Law
2016-03-30  7:20                 ` Cary Coutant
2016-03-30  7:34                   ` Cary Coutant
2016-03-30 14:44                 ` Alan Modra
2016-03-31  0:45                   ` Cary Coutant
2016-03-31  0:40                 ` Cary Coutant
2016-03-31  0:53                   ` Jeff Law
2016-03-31 13:27                     ` Ramana Radhakrishnan
2016-03-31 15:05                       ` H.J. Lu
2016-04-15 16:10                       ` Szabolcs Nagy
2016-04-01 19:51                   ` Jeff Law
2016-04-02  2:53                     ` Alan Modra
2016-04-15 16:16 H.J. Lu
2016-04-15 16:36 ` Jeff Law
2016-04-15 16:45   ` H.J. Lu
2016-04-15 16:43 ` Szabolcs Nagy
2016-04-15 23:59   ` Maciej W. Rozycki
2016-04-16  1:08     ` Szabolcs Nagy

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=CAJimCsEttS7AMfqhJ+Fy3WRvL-UTzDKbmBqKgjSedXCX3_g-Jg@mail.gmail.com \
    --to=ccoutant@gmail.com \
    --cc=amodra@gmail.com \
    --cc=binutils@sourceware.org \
    --cc=hjl.tools@gmail.com \
    --cc=jgroff@apple.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).