summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2016-05-28 15:51:38 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2016-05-28 15:51:38 +0000
commit52bd330500339e9c176d1fec7c2733f34ac0aa85 (patch)
treed2eb804be1fbd94f88c9d8ce14cffdac1beec55d /llvm/test
parentf49c7b157001dfd83f02e596c57577cfc0c08d17 (diff)
downloadbcm5719-llvm-52bd330500339e9c176d1fec7c2733f34ac0aa85.tar.gz
bcm5719-llvm-52bd330500339e9c176d1fec7c2733f34ac0aa85.zip
Fix production of R_X86_64_GOTPCRELX/R_X86_64_REX_GOTPCRELX.
We were producing R_X86_64_GOTPCRELX for invalid instructions and sometimes producing R_X86_64_GOTPCRELX instead of R_X86_64_REX_GOTPCRELX. llvm-svn: 271118
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/MC/ELF/got-relaxed-no-relax.s15
-rw-r--r--llvm/test/MC/ELF/got-relaxed-rex.s29
-rw-r--r--llvm/test/MC/ELF/got-relaxed.s21
3 files changed, 51 insertions, 14 deletions
diff --git a/llvm/test/MC/ELF/got-relaxed-no-relax.s b/llvm/test/MC/ELF/got-relaxed-no-relax.s
new file mode 100644
index 00000000000..008481a035a
--- /dev/null
+++ b/llvm/test/MC/ELF/got-relaxed-no-relax.s
@@ -0,0 +1,15 @@
+// RUN: llvm-mc -filetype=obj -relax-relocations -triple x86_64-pc-linux %s -o - | llvm-readobj -r | FileCheck %s
+
+// these should not produce relaxable relocations
+
+ movq foo@GOT, %rax
+ mulq foo@GOTPCREL(%rip)
+ .long foo@GOTPCREL
+
+// CHECK: Relocations [
+// CHECK: Section ({{.*}}) .rela.text {
+// CHECK-NEXT: R_X86_64_GOT32 foo
+// CHECK-NEXT: R_X86_64_GOTPCREL foo
+// CHECK-NEXT: R_X86_64_GOTPCREL foo
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
diff --git a/llvm/test/MC/ELF/got-relaxed-rex.s b/llvm/test/MC/ELF/got-relaxed-rex.s
new file mode 100644
index 00000000000..7ea3ba03f6a
--- /dev/null
+++ b/llvm/test/MC/ELF/got-relaxed-rex.s
@@ -0,0 +1,29 @@
+// RUN: llvm-mc -filetype=obj -relax-relocations -triple x86_64-pc-linux %s -o - | llvm-readobj -r | FileCheck %s
+
+// these should produce R_X86_64_REX_GOTPCRELX
+
+ movq mov@GOTPCREL(%rip), %rax
+ test %rax, test@GOTPCREL(%rip)
+ adc adc@GOTPCREL(%rip), %rax
+ add add@GOTPCREL(%rip), %rax
+ and and@GOTPCREL(%rip), %rax
+ cmp cmp@GOTPCREL(%rip), %rax
+ or or@GOTPCREL(%rip), %rax
+ sbb sbb@GOTPCREL(%rip), %rax
+ sub sub@GOTPCREL(%rip), %rax
+ xor xor@GOTPCREL(%rip), %rax
+
+// CHECK: Relocations [
+// CHECK-NEXT: Section ({{.*}}) .rela.text {
+// CHECK-NEXT: R_X86_64_REX_GOTPCRELX mov
+// CHECK-NEXT: R_X86_64_REX_GOTPCRELX test
+// CHECK-NEXT: R_X86_64_REX_GOTPCRELX adc
+// CHECK-NEXT: R_X86_64_REX_GOTPCRELX add
+// CHECK-NEXT: R_X86_64_REX_GOTPCRELX and
+// CHECK-NEXT: R_X86_64_REX_GOTPCRELX cmp
+// CHECK-NEXT: R_X86_64_REX_GOTPCRELX or
+// CHECK-NEXT: R_X86_64_REX_GOTPCRELX sbb
+// CHECK-NEXT: R_X86_64_REX_GOTPCRELX sub
+// CHECK-NEXT: R_X86_64_REX_GOTPCRELX xor
+// CHECK-NEXT: }
+// CHECK-NEXT: ]
diff --git a/llvm/test/MC/ELF/got-relaxed.s b/llvm/test/MC/ELF/got-relaxed.s
index bce49548339..89b22657ac6 100644
--- a/llvm/test/MC/ELF/got-relaxed.s
+++ b/llvm/test/MC/ELF/got-relaxed.s
@@ -1,20 +1,13 @@
-// RUN: llvm-mc -filetype=obj -relax-relocations -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -r -t | FileCheck %s
+// RUN: llvm-mc -filetype=obj -relax-relocations -triple x86_64-pc-linux %s -o - | llvm-readobj -r | FileCheck %s
-// Test that this produces the correct relaxed relocations.
+// these should produce R_X86_64_GOTPCRELX
- movl foo@GOT, %eax
- movl foo@GOTPCREL(%rip), %eax
- movq foo@GOTPCREL(%rip), %rax
- .long zed@GOTPCREL
+ call *call@GOTPCREL(%rip)
+ jmp *jmp@GOTPCREL(%rip)
// CHECK: Relocations [
-// CHECK: Section ({{[^ ]+}}) .rela.text {
-// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_GOT32 foo 0x{{[^ ]+}}
-// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_GOTPCRELX foo 0x{{[^ ]+}}
-// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_REX_GOTPCRELX foo 0x{{[^ ]+}}
-// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_GOTPCREL zed 0x{{[^ ]+}}
+// CHECK-NEXT: Section ({{.*}}) .rela.text {
+// CHECK-NEXT: R_X86_64_GOTPCRELX call
+// CHECK-NEXT: R_X86_64_GOTPCRELX jmp
// CHECK-NEXT: }
// CHECK-NEXT: ]
-
-// CHECK: Symbols [
-// CHECK-NOT: _GLOBAL_OFFSET_TABLE_
OpenPOWER on IntegriCloud