From: "Maciej W. Rozycki" <macro@imgtec.com>
To: Cary Coutant <ccoutant@gmail.com>
Cc: "H.J. Lu" <hjl.tools@gmail.com>, Joe Groff <jgroff@apple.com>,
Binutils <binutils@sourceware.org>
Subject: Re: Preventing preemption of 'protected' symbols in GNU ld 2.26
Date: Tue, 29 Mar 2016 12:40:00 -0000 [thread overview]
Message-ID: <alpine.DEB.2.00.1603291312440.9427@tp.orcam.me.uk> (raw)
In-Reply-To: <CAJimCsFffshMvsDoRq_33Ss8u9Y_Z4y2NKsqDbxJQuO6SyJNbg@mail.gmail.com>
On Thu, 24 Mar 2016, Cary Coutant wrote:
> - Arguing that protected means that the definition is in the same
> module but its address might be external is absurd. The *only* reason
> for the gABI to make that guarantee is so the compilers can optimize
> the code based on the knowledge that the symbol can't be pre-empted.
For the record, SGI's original 64-bit MIPS psABI document[1], which is
where the concept of symbol's export class aka visibility came from first,
before having been adopted by the gABI, has these notes on the semantics
of protected symbols:
"References to protected symbols (and hence to hidden or internal symbols)
may be optimized by using absolute addresses in executables or by assuming
addresses to be relatively nearby."
and:
"An R_MIPS_JALR relocation is intended for optimization of jumps to
protected symbols, i.e. symbols which may not be preempted. The word to
be relocated is a jump (typically a JALR) to the indicated symbol. If it
is not a preemptible symbol (and therefore defined in the current
executable/DSO) the relocation is a request to the linker to convert it to
a direct branch (typically a JAL in the main executable, or a BGEZAL in
DSOs if the target symbol is close enough). The linker must check that
the symbol is not preemptible before performing the relocation, but no
action is required for correctness -- this is strictly an optimization
hint."
which clearly indicate the intent for protected symbols to be defined
locally, in the same way as hidden and internal symbols are, with the
exception of additionally being exported. You can't use a BGEZAL
instruction (which is a direct branch with a limited signed 18-bit range)
if its target is moved outside the DSO it's in.
References:
[1] "64-bit ELF Object File Specification, Draft Version 2.5"
<http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf>
Maciej
next prev parent reply other threads:[~2016-03-29 12:40 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
2016-03-29 15:44 ` H.J. Lu
2016-03-28 22:12 ` Cary Coutant
2016-03-29 12:40 ` Maciej W. Rozycki [this message]
[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=alpine.DEB.2.00.1603291312440.9427@tp.orcam.me.uk \
--to=macro@imgtec.com \
--cc=binutils@sourceware.org \
--cc=ccoutant@gmail.com \
--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).