[lld] r265575 - Make TLS work for PIE executables on aarch64.

Ed Schouten via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 6 10:53:32 PDT 2016


Author: ed
Date: Wed Apr  6 12:53:31 2016
New Revision: 265575

URL: http://llvm.org/viewvc/llvm-project?rev=265575&view=rev
Log:
Make TLS work for PIE executables on aarch64.

Similar to r265462, TLS related relocations aren't marked as relative,
meaning that we end up generating R_AARCH64_RELATIVE relocations for
them. This change adds TLS relocations that I've seen on my system. With
this patch applied CloudABI's unit testing binary now passes on aarch64.

Approved by:	ruiu
Differential Revision:	http://reviews.llvm.org/D18816

Added:
    lld/trunk/test/ELF/aarch64-tls-pie.s
Modified:
    lld/trunk/ELF/Target.cpp

Modified: lld/trunk/ELF/Target.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Target.cpp?rev=265575&r1=265574&r2=265575&view=diff
==============================================================================
--- lld/trunk/ELF/Target.cpp (original)
+++ lld/trunk/ELF/Target.cpp Wed Apr  6 12:53:31 2016
@@ -1253,6 +1253,10 @@ bool AArch64TargetInfo::isRelRelative(ui
   switch (Type) {
   default:
     return false;
+  case R_AARCH64_TLSLE_ADD_TPREL_HI12:
+  case R_AARCH64_TLSLE_ADD_TPREL_LO12_NC:
+  case R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21:
+  case R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC:
   case R_AARCH64_PREL32:
   case R_AARCH64_ADR_PREL_LO21:
   case R_AARCH64_ADR_PREL_PG_HI21:

Added: lld/trunk/test/ELF/aarch64-tls-pie.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/aarch64-tls-pie.s?rev=265575&view=auto
==============================================================================
--- lld/trunk/test/ELF/aarch64-tls-pie.s (added)
+++ lld/trunk/test/ELF/aarch64-tls-pie.s Wed Apr  6 12:53:31 2016
@@ -0,0 +1,28 @@
+# REQUIRES: aarch64
+# RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-cloudabi %s -o %t1.o
+# RUN: ld.lld -pie %t1.o -o %t
+# RUN: llvm-readobj -r %t | FileCheck %s
+
+# Similar to bug 27174: R_AARCH64_TLSLE_*TPREL* relocations should be
+# eliminated when building a PIE executable, as the static TLS layout is
+# fixed.
+#
+# CHECK:      Relocations [
+# CHECK-NEXT: ]
+
+	.globl	_start
+_start:
+	# Accessing the variable directly.
+	add	x11, x8, :tprel_hi12:i
+	add	x11, x11, :tprel_lo12_nc:i
+
+	# Accessing the variable through the GOT.
+	adrp	x10, :gottprel:i
+	mrs	x8, TPIDR_EL0
+	ldr	x10, [x10, :gottprel_lo12:i]
+
+	.section	.tbss.i,"awT", at nobits
+	.globl	i
+i:
+	.word	0
+	.size	i, 4




More information about the llvm-commits mailing list