diff options
-rw-r--r-- | lld/ELF/Writer.cpp | 4 | ||||
-rw-r--r-- | lld/test/ELF/aarch64-got-relocations.s | 21 |
2 files changed, 22 insertions, 3 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index e6806c79697..f0ad5f6b115 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -432,9 +432,7 @@ void Writer<ELFT>::scanRelocs(InputSectionBase<ELFT> &C, ArrayRef<RelTy> Rels) { // 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; diff --git a/lld/test/ELF/aarch64-got-relocations.s b/lld/test/ELF/aarch64-got-relocations.s new file mode 100644 index 00000000000..13ee09a892e --- /dev/null +++ b/lld/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 |