1# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o 2# RUN: llvm-readobj -r %t.o | FileCheck %s --check-prefixes=CHECK,COMMON 3# RUN: llvm-mc -filetype=obj -triple=x86_64 -relax-relocations=false %s -o %t1.o 4# RUN: llvm-readobj -r %t1.o | FileCheck %s --check-prefixes=NORELAX,COMMON 5 6# COMMON: Relocations [ 7# COMMON-NEXT: Section ({{.*}}) .rela.text { 8# CHECK-NEXT: R_X86_64_GOTPCRELX mov 9# CHECK-NEXT: R_X86_64_GOTPCRELX test 10# CHECK-NEXT: R_X86_64_GOTPCRELX adc 11# CHECK-NEXT: R_X86_64_GOTPCRELX add 12# CHECK-NEXT: R_X86_64_GOTPCRELX and 13# CHECK-NEXT: R_X86_64_GOTPCRELX cmp 14# CHECK-NEXT: R_X86_64_GOTPCRELX or 15# CHECK-NEXT: R_X86_64_GOTPCRELX sbb 16# CHECK-NEXT: R_X86_64_GOTPCRELX sub 17# CHECK-NEXT: R_X86_64_GOTPCRELX xor 18# CHECK-NEXT: R_X86_64_GOTPCRELX call 19# CHECK-NEXT: R_X86_64_GOTPCRELX jmp 20# CHECK-NEXT: } 21 22# NORELAX-NEXT: R_X86_64_GOTPCREL mov 23# NORELAX-NEXT: R_X86_64_GOTPCREL test 24# NORELAX-NEXT: R_X86_64_GOTPCREL adc 25# NORELAX-NEXT: R_X86_64_GOTPCREL add 26# NORELAX-NEXT: R_X86_64_GOTPCREL and 27# NORELAX-NEXT: R_X86_64_GOTPCREL cmp 28# NORELAX-NEXT: R_X86_64_GOTPCREL or 29# NORELAX-NEXT: R_X86_64_GOTPCREL sbb 30# NORELAX-NEXT: R_X86_64_GOTPCREL sub 31# NORELAX-NEXT: R_X86_64_GOTPCREL xor 32# NORELAX-NEXT: R_X86_64_GOTPCREL call 33# NORELAX-NEXT: R_X86_64_GOTPCREL jmp 34# NORELAX-NEXT: } 35 36movl mov@GOTPCREL(%rip), %eax 37test %eax, test@GOTPCREL(%rip) 38adc adc@GOTPCREL(%rip), %eax 39add add@GOTPCREL(%rip), %eax 40and and@GOTPCREL(%rip), %eax 41cmp cmp@GOTPCREL(%rip), %eax 42or or@GOTPCREL(%rip), %eax 43sbb sbb@GOTPCREL(%rip), %eax 44sub sub@GOTPCREL(%rip), %eax 45xor xor@GOTPCREL(%rip), %eax 46call *call@GOTPCREL(%rip) 47jmp *jmp@GOTPCREL(%rip) 48 49# COMMON-NEXT: Section ({{.*}}) .rela.norelax { 50# COMMON-NEXT: R_X86_64_GOTPCREL mov 0x0 51# COMMON-NEXT: R_X86_64_GOTPCREL mov 0xFFFFFFFFFFFFFFFC 52# COMMON-NEXT: } 53# COMMON-NEXT: ] 54 55.section .norelax,"ax",@progbits 56## Clang may emit this expression to load the high 32-bit of the GOT entry. 57## Don't emit R_X86_64_GOTPCRELX. 58movl mov@GOTPCREL+4(%rip), %eax 59## We could emit R_X86_64_GOTPCRELX, but it is probably unnecessary. 60movl mov@GOTPCREL+0(%rip), %eax 61