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

John McCall via llvm-commits llvm-commits at lists.llvm.org
Sun May 8 17:26:04 PDT 2016


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).  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?)

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.


http://reviews.llvm.org/D19995





More information about the llvm-commits mailing list