Index: lld/trunk/ELF/Writer.cpp =================================================================== --- lld/trunk/ELF/Writer.cpp +++ lld/trunk/ELF/Writer.cpp @@ -432,9 +432,7 @@ // ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf continue; - bool Dynrel = Config->Pic && !Target->isRelRelative(Type) && - !Target->isSizeRel(Type); - if (Preemptible || Dynrel) { + if (Preemptible || Config->Pic) { uint32_t DynType; if (Body.isTls()) DynType = Target->TlsGotRel; Index: lld/trunk/test/ELF/aarch64-got-relocations.s =================================================================== --- lld/trunk/test/ELF/aarch64-got-relocations.s +++ lld/trunk/test/ELF/aarch64-got-relocations.s @@ -0,0 +1,21 @@ +# REQUIRES: aarch64 +# RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-cloudabi %s -o %t.o +# RUN: ld.lld -pie %t.o -o %t +# RUN: llvm-readobj -r %t | FileCheck %s + +# If we're addressing a global relatively through the GOT, we still need to +# emit a relocation for the entry in the GOT itself. +# CHECK: Relocations [ +# CHECK: Section (4) .rela.dyn { +# CHECK: 0x{{[0-9A-F]+}} R_AARCH64_RELATIVE - 0x{{[0-9A-F]+}} +# CHECK: } +# CHECK: ] + + .globl _start + .type _start,@function +_start: + adrp x8, :got:i + ldr x8, [x8, :got_lo12:i] + + .type i,@object + .comm i,4,4