Index: lld/trunk/ELF/Target.cpp =================================================================== --- lld/trunk/ELF/Target.cpp +++ lld/trunk/ELF/Target.cpp @@ -1253,6 +1253,10 @@ 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: Index: lld/trunk/test/ELF/aarch64-tls-pie.s =================================================================== --- lld/trunk/test/ELF/aarch64-tls-pie.s +++ lld/trunk/test/ELF/aarch64-tls-pie.s @@ -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",@nobits + .globl i +i: + .word 0 + .size i, 4