[PATCH] D19995: Optimize access to global variable references in PIE mode when linker supports copy relocations for PIE

Xinliang David Li via llvm-commits llvm-commits at lists.llvm.org
Sun May 8 18:15:34 PDT 2016


On Sun, May 8, 2016 at 5:26 PM, John McCall <rjmccall at gmail.com> wrote:

> rjmccall added a comment.
>
> It seems reasonable to me to have an option enabling the use of copy
> relocations for globals, and I agree with David that that option should
> logically be applicable to PIE.  I would also tend to agree with Joerg that
> that option should default to off, even in non-PIC modes, but it's not my
> call.
>
> RE: the performance impact of relying on the linker to optimize accesses:
> it certainly can increase register pressure, but it shouldn't in the most
> common cases where the access sequence ends in putting a new value in a GPR
> anyway (usually either the address of the variable or something loaded from
> it).


Also that linker rewrite may only works for limited simple cases -- after
CSE and instruction scheduling, it can be hard to undo the damage already
made.



>   More importantly, I don't really understand how you can avoid this
> without compiling code assuming that all globals can be copy-relocated,
> since the *compiler* doesn't know whether an external symbol is defined as
> protected or default.  (Unless that's exactly what we're doing — are people
> really this fast-and-loose in ELF land?)
>

Unfortunately it seems that the assumption is made by the compiler (gcc,
clang)  that external symbol has default visibility.


>
> RE: the semantic problems with copy relocations exposing the layout of
> globals: yes, binary compatibility problems usually don't exist when you
> recompile all the dependent code.  I can understand why system maintainers
> wouldn't be thrilled with the idea that certain kinds of updates to system
> libraries can't be made without recompiling the entire user space, though.
>

 If the library write exposes layout of a global in any way to the client
programs, it becomes part of the ABI -- so recompilation is needed
regardless of copyreloc --except for one special case -- the size of the
global remain the same.

David

>
>
> http://reviews.llvm.org/D19995
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160508/fc39a734/attachment.html>


More information about the llvm-commits mailing list