summaryrefslogtreecommitdiff
path: root/lld/test/ELF/ppc32-reloc-pltrel.s
diff options
context:
space:
mode:
Diffstat (limited to 'lld/test/ELF/ppc32-reloc-pltrel.s')
-rw-r--r--lld/test/ELF/ppc32-reloc-pltrel.s35
1 files changed, 35 insertions, 0 deletions
diff --git a/lld/test/ELF/ppc32-reloc-pltrel.s b/lld/test/ELF/ppc32-reloc-pltrel.s
new file mode 100644
index 000000000000..17418482871c
--- /dev/null
+++ b/lld/test/ELF/ppc32-reloc-pltrel.s
@@ -0,0 +1,35 @@
+# REQUIRES: ppc
+
+## Ensure R_PPC_PLTREL retains .got even in the absence of
+## .got/_GLOBAL_OFFSET_TABLE_ references.
+
+# RUN: llvm-mc -filetype=obj -triple=powerpc %s -o %t.o
+# RUN: ld.lld -shared %t.o -o %t.so
+# RUN: llvm-readobj -Sdr %t.so | FileCheck %s
+
+.section .got2,"aw",@progbits
+.set .LTOC, .+0x8000
+
+.text
+.L0:
+addis 30,30,.LTOC-.L0@ha
+addi 30,30,.LTOC-.L0@l
+bl baz+0x8000@plt
+
+## DT_PPC_GOT must point to .got, which must have the 12-byte header.
+## The only relocation is an R_PPC_JMP_SLOT.
+
+# CHECK: Sections [
+# CHECK: Name: .got (
+# CHECK: Address:
+# CHECK-SAME: {{ }}[[#%x,GOT:]]
+# CHECK: Size:
+# CHECK-SAME: {{ 12$}}
+# CHECK: DynamicSection [
+# CHECK-NEXT: Tag Type Name/Value
+# CHECK: 0x70000000 PPC_GOT [[#GOT]]
+# CHECK: Relocations [
+# CHECK-NEXT: Section ([[#]]) .rela.plt {
+# CHECK-NEXT: 0x[[#%x,]] R_PPC_JMP_SLOT baz 0x0
+# CHECK-NEXT: }
+# CHECK-NEXT: ]