| # RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o |
| # RUN: llvm-readobj -r %t.o | FileCheck %s --check-prefixes=CHECK,COMMON |
| # RUN: llvm-mc -filetype=obj -triple=x86_64 -x86-relax-relocations=false %s -o %t1.o |
| # RUN: llvm-readobj -r %t1.o | FileCheck %s --check-prefixes=NORELAX,COMMON |
| |
| # COMMON: Relocations [ |
| # COMMON-NEXT: Section ({{.*}}) .rela.text { |
| # CHECK-NEXT: R_X86_64_GOTPCRELX mov |
| # CHECK-NEXT: R_X86_64_GOTPCRELX test |
| # CHECK-NEXT: R_X86_64_GOTPCRELX adc |
| # CHECK-NEXT: R_X86_64_GOTPCRELX add |
| # CHECK-NEXT: R_X86_64_GOTPCRELX and |
| # CHECK-NEXT: R_X86_64_GOTPCRELX cmp |
| # CHECK-NEXT: R_X86_64_GOTPCRELX or |
| # CHECK-NEXT: R_X86_64_GOTPCRELX sbb |
| # CHECK-NEXT: R_X86_64_GOTPCRELX sub |
| # CHECK-NEXT: R_X86_64_GOTPCRELX xor |
| # CHECK-NEXT: R_X86_64_GOTPCRELX call |
| # CHECK-NEXT: R_X86_64_GOTPCRELX jmp |
| # 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: 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: R_X86_64_CODE_4_GOTPCRELX mov |
| # CHECK-NEXT: R_X86_64_CODE_4_GOTPCRELX test |
| # CHECK-NEXT: R_X86_64_CODE_4_GOTPCRELX adc |
| # CHECK-NEXT: R_X86_64_CODE_4_GOTPCRELX add |
| # CHECK-NEXT: R_X86_64_CODE_4_GOTPCRELX and |
| # CHECK-NEXT: R_X86_64_CODE_4_GOTPCRELX cmp |
| # CHECK-NEXT: R_X86_64_CODE_4_GOTPCRELX or |
| # CHECK-NEXT: R_X86_64_CODE_4_GOTPCRELX sbb |
| # CHECK-NEXT: R_X86_64_CODE_4_GOTPCRELX sub |
| # CHECK-NEXT: R_X86_64_CODE_4_GOTPCRELX xor |
| # CHECK-NEXT: } |
| |
| # NORELAX-NEXT: R_X86_64_GOTPCREL mov |
| # NORELAX-NEXT: R_X86_64_GOTPCREL test |
| # NORELAX-NEXT: R_X86_64_GOTPCREL adc |
| # NORELAX-NEXT: R_X86_64_GOTPCREL add |
| # NORELAX-NEXT: R_X86_64_GOTPCREL and |
| # NORELAX-NEXT: R_X86_64_GOTPCREL cmp |
| # NORELAX-NEXT: R_X86_64_GOTPCREL or |
| # NORELAX-NEXT: R_X86_64_GOTPCREL sbb |
| # NORELAX-NEXT: R_X86_64_GOTPCREL sub |
| # NORELAX-NEXT: R_X86_64_GOTPCREL xor |
| # NORELAX-NEXT: R_X86_64_GOTPCREL call |
| # NORELAX-NEXT: R_X86_64_GOTPCREL jmp |
| # NORELAX-NEXT: R_X86_64_GOTPCREL mov |
| # NORELAX-NEXT: R_X86_64_GOTPCREL test |
| # NORELAX-NEXT: R_X86_64_GOTPCREL adc |
| # NORELAX-NEXT: R_X86_64_GOTPCREL add |
| # NORELAX-NEXT: R_X86_64_GOTPCREL and |
| # NORELAX-NEXT: R_X86_64_GOTPCREL cmp |
| # NORELAX-NEXT: R_X86_64_GOTPCREL or |
| # NORELAX-NEXT: R_X86_64_GOTPCREL sbb |
| # NORELAX-NEXT: R_X86_64_GOTPCREL sub |
| # NORELAX-NEXT: R_X86_64_GOTPCREL xor |
| # NORELAX-NEXT: R_X86_64_GOTPCREL mov |
| # NORELAX-NEXT: R_X86_64_GOTPCREL test |
| # NORELAX-NEXT: R_X86_64_GOTPCREL adc |
| # NORELAX-NEXT: R_X86_64_GOTPCREL add |
| # NORELAX-NEXT: R_X86_64_GOTPCREL and |
| # NORELAX-NEXT: R_X86_64_GOTPCREL cmp |
| # NORELAX-NEXT: R_X86_64_GOTPCREL or |
| # NORELAX-NEXT: R_X86_64_GOTPCREL sbb |
| # NORELAX-NEXT: R_X86_64_GOTPCREL sub |
| # NORELAX-NEXT: R_X86_64_GOTPCREL xor |
| # NORELAX-NEXT: R_X86_64_GOTPCREL mov |
| # NORELAX-NEXT: R_X86_64_GOTPCREL test |
| # NORELAX-NEXT: R_X86_64_GOTPCREL adc |
| # NORELAX-NEXT: R_X86_64_GOTPCREL add |
| # NORELAX-NEXT: R_X86_64_GOTPCREL and |
| # NORELAX-NEXT: R_X86_64_GOTPCREL cmp |
| # NORELAX-NEXT: R_X86_64_GOTPCREL or |
| # NORELAX-NEXT: R_X86_64_GOTPCREL sbb |
| # NORELAX-NEXT: R_X86_64_GOTPCREL sub |
| # NORELAX-NEXT: R_X86_64_GOTPCREL xor |
| # NORELAX-NEXT: } |
| |
| movl mov@GOTPCREL(%rip), %eax |
| test %eax, test@GOTPCREL(%rip) |
| adc adc@GOTPCREL(%rip), %eax |
| add add@GOTPCREL(%rip), %eax |
| and and@GOTPCREL(%rip), %eax |
| cmp cmp@GOTPCREL(%rip), %eax |
| or or@GOTPCREL(%rip), %eax |
| sbb sbb@GOTPCREL(%rip), %eax |
| sub sub@GOTPCREL(%rip), %eax |
| xor xor@GOTPCREL(%rip), %eax |
| call *call@GOTPCREL(%rip) |
| jmp *jmp@GOTPCREL(%rip) |
| |
| movl mov@GOTPCREL(%rip), %r8d |
| test %r8d, test@GOTPCREL(%rip) |
| adc adc@GOTPCREL(%rip), %r8d |
| add add@GOTPCREL(%rip), %r8d |
| and and@GOTPCREL(%rip), %r8d |
| cmp cmp@GOTPCREL(%rip), %r8d |
| or or@GOTPCREL(%rip), %r8d |
| sbb sbb@GOTPCREL(%rip), %r8d |
| sub sub@GOTPCREL(%rip), %r8d |
| xor xor@GOTPCREL(%rip), %r8d |
| |
| 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 |
| |
| movq mov@GOTPCREL(%rip), %r16 |
| test %r16, test@GOTPCREL(%rip) |
| adc adc@GOTPCREL(%rip), %r16 |
| add add@GOTPCREL(%rip), %r16 |
| and and@GOTPCREL(%rip), %r16 |
| cmp cmp@GOTPCREL(%rip), %r16 |
| or or@GOTPCREL(%rip), %r16 |
| sbb sbb@GOTPCREL(%rip), %r16 |
| sub sub@GOTPCREL(%rip), %r16 |
| xor xor@GOTPCREL(%rip), %r16 |
| |
| # COMMON-NEXT: Section ({{.*}}) .rela.norelax { |
| # COMMON-NEXT: R_X86_64_GOTPCREL mov 0x0 |
| # COMMON-NEXT: R_X86_64_GOTPCREL mov 0xFFFFFFFFFFFFFFFD |
| # COMMON-NEXT: R_X86_64_GOTPCREL mov 0xFFFFFFFFFFFFFFFC |
| # COMMON-NEXT: R_X86_64_GOTPCREL mov 0xFFFFFFFFFFFFFFFD |
| # COMMON-NEXT: } |
| # COMMON-NEXT: ] |
| |
| .section .norelax,"ax",@progbits |
| ## Clang may emit this expression to load the high 32-bit of the GOT entry. |
| ## Don't emit R_X86_64_GOTPCRELX. |
| movl mov@GOTPCREL+4(%rip), %eax |
| ## Don't emit R_X86_64_GOTPCRELX. |
| movq mov@GOTPCREL+1(%rip), %rax |
| ## We could emit R_X86_64_GOTPCRELX, but it is probably unnecessary. |
| movl mov@GOTPCREL+0(%rip), %eax |
| ## Don't emit R_X86_64_GOTPCRELX. |
| movq mov@GOTPCREL+1(%rip), %r16 |