aboutsummaryrefslogtreecommitdiff
path: root/test/ELF/ppc64-got-off.s
diff options
context:
space:
mode:
Diffstat (limited to 'test/ELF/ppc64-got-off.s')
-rw-r--r--test/ELF/ppc64-got-off.s67
1 files changed, 67 insertions, 0 deletions
diff --git a/test/ELF/ppc64-got-off.s b/test/ELF/ppc64-got-off.s
new file mode 100644
index 000000000000..d3dff2262502
--- /dev/null
+++ b/test/ELF/ppc64-got-off.s
@@ -0,0 +1,67 @@
+# REQUIRES: ppc
+
+# RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %s -o %t.o
+# RUN: ld.lld -shared --no-toc-optimize %t.o -o %t
+# RUN: llvm-objdump -d %t | FileCheck %s
+
+# RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %t.o
+# RUN: ld.lld -shared --no-toc-optimize %t.o -o %t
+# RUN: llvm-objdump -d %t | FileCheck %s
+
+# RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %s -o %t.o
+# RUN: ld.lld -shared %t.o -o %t
+# RUN: llvm-objdump -d %t | FileCheck --check-prefix=OPT %s
+
+# RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-linux %s -o %t.o
+# RUN: ld.lld -shared %t.o -o %t
+# RUN: llvm-objdump -d %t | FileCheck --check-prefix=OPT %s
+
+ .abiversion 2
+ .section ".text"
+
+ .p2align 2
+ .global func
+ .type func, @function
+func:
+.Lfunc_gep:
+ addis 2, 12, .TOC.-.Lfunc_gep@ha
+ addi 2, 2, .TOC.-.Lfunc_gep@l
+.Lfunc_lep:
+ .localentry func, .-func
+ addis 3, 2, a@got@ha
+ ld 3, a@got@l(3)
+ ld 4, a@got(2)
+ lis 5, a@got@h
+ ori 5, 5, a@got@l
+ li 6, 0
+ ori 6, 6, a@got
+ blr
+
+# CHECK-LABEL: func
+# CHECK: addis 3, 2, 0
+# CHECK-NEXT: ld 3, -32760(3)
+# CHECK-NEXT: ld 4, -32760(2)
+# CHECK-NEXT: lis 5, -1
+# CHECK-NEXT: ori 5, 5, 32776
+# CHECK-NEXT: li 6, 0
+# CHECK-NEXT: ori 6, 6, 32776
+
+# OPT-LABEL: func
+# OPT: nop
+# OPT-NEXT: ld 3, -32760(2)
+# OPT-NEXT: ld 4, -32760(2)
+# OPT-NEXT: lis 5, -1
+# OPT-NEXT: ori 5, 5, 32776
+# OPT-NEXT: li 6, 0
+# OPT-NEXT: ori 6, 6, 32776
+
+# Since the got entry for a is .got[1] and the TOC base points to
+# .got + 0x8000, the offset for a@got is -0x7FF8 --> -32760
+
+ .section ".data"
+ .global a
+ .type a, @object
+ .size a, 4
+ .p2align 2
+a:
+ .long 0x1000