diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2016-05-28 15:51:38 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2016-05-28 15:51:38 +0000 |
| commit | 52bd330500339e9c176d1fec7c2733f34ac0aa85 (patch) | |
| tree | d2eb804be1fbd94f88c9d8ce14cffdac1beec55d /llvm/test | |
| parent | f49c7b157001dfd83f02e596c57577cfc0c08d17 (diff) | |
| download | bcm5719-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.s | 15 | ||||
| -rw-r--r-- | llvm/test/MC/ELF/got-relaxed-rex.s | 29 | ||||
| -rw-r--r-- | llvm/test/MC/ELF/got-relaxed.s | 21 |
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_ |

