[llvm-dev] [PPC] Linker fails on -fstack-protector

Joerg Sonnenberger via llvm-dev llvm-dev at lists.llvm.org
Tue Feb 23 04:49:55 PST 2016


On Tue, Feb 23, 2016 at 12:26:54AM +0000, Tim Shen wrote:
> On Mon, Feb 22, 2016 at 3:32 PM Joerg Sonnenberger via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
> 
> > On Mon, Jan 25, 2016 at 07:57:43PM +0000, Tim Shen via llvm-dev wrote:
> > > A cleaner solution could be adding an IR intrinsic llvm.get_tcb_address()
> > > and hard code the offset of stack_guard member, since they aren't
> > supposed
> > > to change.
> >
> > It would also be inefficient on architectures that can directly access
> > TLS variables. I.e. on x86, it is effectively a statically allocated TLS
> > variable with fixed offset. That can be accessed by a single load --
> > whereas introducing get_tcb_address first would require a second load.
> 
> 
> Guess I used the wrong intrinsic name - it should be
> llvm.global_tls_address(), and it should be directly lowered to
> ISD::GlobalTLSAddress, which is currently used by both x86 and ppc, and
> ultimately it's referencing fs register on x86_64 and r13 on ppc64le.

You can get the TCB address from %fs:0 or %gs:0 on x86. But that's
suboptimal for the purpose here as you need to do a second load with the
resulting pointer, when you could have gotten it from %fs:$magic_offset
or %gs:$magic_offset in first place.

Joerg


More information about the llvm-dev mailing list