summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/Writer.cpp4
-rw-r--r--lld/test/ELF/aarch64-got-relocations.s21
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
OpenPOWER on IntegriCloud