public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Alan Modra <amodra@gmail.com>
To: Richard Biener <richard.guenther@gmail.com>
Cc: "H.J. Lu" <hjl.tools@gmail.com>, Jeff Law <law@redhat.com>,
	Cary Coutant <ccoutant@gmail.com>, Joe Groff <jgroff@apple.com>,
	Binutils <binutils@sourceware.org>, GCC <gcc@gcc.gnu.org>
Subject: Re: Preventing preemption of 'protected' symbols in GNU ld 2.26 [aka should we revert the fix for 65248]
Date: Tue, 19 Apr 2016 15:46:00 -0000	[thread overview]
Message-ID: <20160419154618.GA20119@bubble.grove.modra.org> (raw)
In-Reply-To: <CAFiYyc1NJD0LAW2Mxe+xdgizTd3j7A9gwHEzHJA3A+hWpDO+Ew@mail.gmail.com>

On Tue, Apr 19, 2016 at 10:20:23AM +0200, Richard Biener wrote:
> On Tue, Apr 19, 2016 at 7:08 AM, Alan Modra <amodra@gmail.com> wrote:
> > On Mon, Apr 18, 2016 at 07:59:50AM -0700, H.J. Lu wrote:
> >> On Mon, Apr 18, 2016 at 7:49 AM, Alan Modra <amodra@gmail.com> wrote:
> >> > On Mon, Apr 18, 2016 at 11:01:48AM +0200, Richard Biener wrote:
> >> >> To summarize: there is currently no testcase for a wrong-code issue
> >> >> because there is no wrong-code issue.
> >
> > I've added a testcase at
> > https://sourceware.org/bugzilla/show_bug.cgi?id=19965#c3
> > that shows the address problem (&x != x) with older gcc *or* older
> > glibc, and shows the program behaviour problem with current
> > binutils+gcc+glibc.
> 
> Thanks.
> 
> So with all this it sounds that current protected visibility is just broken
> and we should forgo with it, making it equal to default visibility?

Well, using protected visibility variables makes no sense in
executables.  They really are only useful in shared libraries, but
have been of limited use on architectures like x86 for a long time
due to non-PIC executable copying shared library variables into
.dynbss.  The concepts of copying variables into .dynbss, and
protected visibility, are fundamentally incompatible.

HJ's changes addressed the program level semantic issues, but in the
process lost the main reason to use protected visibility variables,
which is to tell a compiler that a global variable cannot be preempted
(and therefore can use faster code for access, typically pc or GOT
pointer relative rather than GOT indirect.)  So IMO, "of limited use"
has now become "not much use at all" on x86_64 and other architectures
that have blindly followed suit.

> At least I couldn't decipher a solution that solves all of the issues
> with protected visibility apart from trying to error at link-time
> (or runtime?) for the cases that are tricky (impossible?) to solve.

I described the problem and solutions in
https://sourceware.org/ml/binutils/2016-03/msg00431.html.  A followup
by Cary pointed out that one of the solutions, emitting text dynamic
relocations, won't work on some architectures (of which x86_64 is
one).

> glibc uses "protected visibility" via its using of local aliases, correct?

Yes, glibc defines a hidden visibility symbol for internal use, with
an exported alias.

> But it doesn't use anything like that for data symbols?

I believe it does.  See occurrences of libc_hidden_data_def.

-- 
Alan Modra
Australia Development Lab, IBM

  parent reply	other threads:[~2016-04-19 15:46 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <AB592ABD-D6D7-4D2F-A0D6-45738F168DC4@apple.com>
2016-03-29 19:31 ` Fwd: Preventing preemption of 'protected' symbols in GNU ld 2.26 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-04-15 21:49                   ` Preventing preemption of 'protected' symbols in GNU ld 2.26 [aka should we revert the fix for 65248] Jeff Law
2016-04-15 21:56                     ` H.J. Lu
2016-04-18  9:02                       ` Richard Biener
2016-04-18 14:49                         ` Alan Modra
2016-04-18 14:59                           ` H.J. Lu
2016-04-18 17:04                             ` Maciej W. Rozycki
2016-04-18 17:09                               ` H.J. Lu
2016-04-18 17:24                                 ` Michael Matz
2016-04-18 17:27                                   ` H.J. Lu
2016-04-18 18:52                                     ` Jakub Jelinek
2016-04-18 19:28                                       ` H.J. Lu
2016-04-18 17:55                                   ` Cary Coutant
2016-04-25 17:24                                     ` Jeff Law
2016-04-25 17:31                                       ` H.J. Lu
2016-04-18 17:57                                   ` Maciej W. Rozycki
2016-04-19  5:08                             ` Alan Modra
2016-04-19  8:20                               ` Richard Biener
2016-04-19  9:53                                 ` Szabolcs Nagy
2016-04-19 14:06                                 ` Michael Matz
2016-04-19 15:37                                   ` Cary Coutant
2016-04-19 15:44                                     ` H.J. Lu
2016-04-19 15:52                                       ` H.J. Lu
2016-04-19 15:54                                         ` H.J. Lu
2016-04-19 15:58                                           ` Cary Coutant
2016-04-19 16:00                                             ` H.J. Lu
2016-04-19 15:54                                       ` Cary Coutant
2016-04-19 19:11                                   ` H.J. Lu
2016-04-19 20:17                                     ` Rich Felker
2016-04-19 21:03                                       ` Cary Coutant
2016-04-20 17:45                                     ` anonymous
2016-04-19 15:46                                 ` Alan Modra [this message]
2016-04-25 17:35                                 ` Jeff Law
2016-04-26  5:55                                   ` Alan Modra
2016-04-26  8:13                                     ` Jakub Jelinek
2016-04-18 17:05                         ` Cary Coutant
2016-03-31  0:40                 ` Preventing preemption of 'protected' symbols in GNU ld 2.26 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-19 19:47   ` Fwd: " Rich Felker

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=20160419154618.GA20119@bubble.grove.modra.org \
    --to=amodra@gmail.com \
    --cc=binutils@sourceware.org \
    --cc=ccoutant@gmail.com \
    --cc=gcc@gcc.gnu.org \
    --cc=hjl.tools@gmail.com \
    --cc=jgroff@apple.com \
    --cc=law@redhat.com \
    --cc=richard.guenther@gmail.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).