| # REQUIRES: x86 |
| # RUN: llvm-mc -filetype=obj -relax-relocations -triple=x86_64-unknown-linux %s -o %t.o |
| # RUN: ld.lld %t.o -o %t1 |
| # RUN: llvm-readobj --symbols -r %t1 | FileCheck --check-prefix=SYMRELOC %s |
| # RUN: llvm-objdump -d --no-show-raw-insn --print-imm-hex %t1 | FileCheck --check-prefix=DISASM %s |
| |
| ## There is no relocations. |
| # SYMRELOC: Relocations [ |
| # SYMRELOC-NEXT: ] |
| # SYMRELOC: Symbols [ |
| # SYMRELOC: Symbol { |
| # SYMRELOC: Name: bar |
| # SYMRELOC-NEXT: Value: 0x203248 |
| |
| ## 2105751 = 0x202197 (bar) |
| # DISASM: Disassembly of section .text: |
| # DISASM-EMPTY: |
| # DISASM-NEXT: <_start>: |
| # DISASM-NEXT: 2011c8: adcl {{.*}}(%rip), %eax # 0x202240 |
| # DISASM-NEXT: addl {{.*}}(%rip), %ebx # 0x202240 |
| # DISASM-NEXT: andl {{.*}}(%rip), %ecx # 0x202240 |
| # DISASM-NEXT: cmpl {{.*}}(%rip), %edx # 0x202240 |
| # DISASM-NEXT: orl {{.*}}(%rip), %edi # 0x202240 |
| # DISASM-NEXT: sbbl {{.*}}(%rip), %esi # 0x202240 |
| # DISASM-NEXT: subl {{.*}}(%rip), %ebp # 0x202240 |
| # DISASM-NEXT: xorl $0x203248, %r8d |
| # DISASM-NEXT: testl $0x203248, %r15d |
| # DISASM-NEXT: 201200: adcq $0x203248, %rax |
| # DISASM-NEXT: addq $0x203248, %rbx |
| # DISASM-NEXT: andq $0x203248, %rcx |
| # DISASM-NEXT: cmpq $0x203248, %rdx |
| # DISASM-NEXT: orq $0x203248, %rdi |
| # DISASM-NEXT: sbbq $0x203248, %rsi |
| # DISASM-NEXT: subq $0x203248, %rbp |
| # DISASM-NEXT: xorq $0x203248, %r8 |
| # DISASM-NEXT: testq $0x203248, %r15 |
| |
| # RUN: ld.lld --hash-style=sysv -shared %t.o -o %t2 |
| # RUN: llvm-readobj -S -r -d %t2 | FileCheck --check-prefix=SEC-PIC %s |
| # RUN: llvm-objdump -d --no-show-raw-insn %t2 | FileCheck --check-prefix=DISASM-PIC %s |
| # SEC-PIC: Section { |
| # SEC-PIC: Index: |
| # SEC-PIC: Name: .got |
| # SEC-PIC-NEXT: Type: SHT_PROGBITS |
| # SEC-PIC-NEXT: Flags [ |
| # SEC-PIC-NEXT: SHF_ALLOC |
| # SEC-PIC-NEXT: SHF_WRITE |
| # SEC-PIC-NEXT: ] |
| # SEC-PIC-NEXT: Address: 0x2380 |
| # SEC-PIC-NEXT: Offset: 0x380 |
| # SEC-PIC-NEXT: Size: 8 |
| # SEC-PIC-NEXT: Link: |
| # SEC-PIC-NEXT: Info: |
| # SEC-PIC-NEXT: AddressAlignment: |
| # SEC-PIC-NEXT: EntrySize: |
| # SEC-PIC-NEXT: } |
| # SEC-PIC: 0x000000006FFFFFF9 RELACOUNT 1 |
| # SEC-PIC: Relocations [ |
| # SEC-PIC-NEXT: Section ({{.*}}) .rela.dyn { |
| # SEC-PIC-NEXT: 0x2380 R_X86_64_RELATIVE - 0x3388 |
| # SEC-PIC-NEXT: } |
| # SEC-PIC-NEXT: ] |
| |
| ## Check that there was no relaxation performed. All values refer to got entry. |
| # DISASM-PIC: Disassembly of section .text: |
| # DISASM-PIC-EMPTY: |
| # DISASM-PIC-NEXT: <_start>: |
| # DISASM-PIC-NEXT: 1268: adcl {{.*}}(%rip), %eax # 0x2380 |
| # DISASM-PIC-NEXT: addl {{.*}}(%rip), %ebx # 0x2380 |
| # DISASM-PIC-NEXT: andl {{.*}}(%rip), %ecx # 0x2380 |
| # DISASM-PIC-NEXT: cmpl {{.*}}(%rip), %edx # 0x2380 |
| # DISASM-PIC-NEXT: orl {{.*}}(%rip), %edi # 0x2380 |
| # DISASM-PIC-NEXT: sbbl {{.*}}(%rip), %esi # 0x2380 |
| # DISASM-PIC-NEXT: subl {{.*}}(%rip), %ebp # 0x2380 |
| # DISASM-PIC-NEXT: xorl {{.*}}(%rip), %r8d # 0x2380 |
| # DISASM-PIC-NEXT: testl %r15d, {{.*}}(%rip) # 0x2380 |
| # DISASM-PIC-NEXT: 12a0: adcq {{.*}}(%rip), %rax # 0x2380 |
| # DISASM-PIC-NEXT: addq {{.*}}(%rip), %rbx # 0x2380 |
| # DISASM-PIC-NEXT: andq {{.*}}(%rip), %rcx # 0x2380 |
| # DISASM-PIC-NEXT: cmpq {{.*}}(%rip), %rdx # 0x2380 |
| # DISASM-PIC-NEXT: orq {{.*}}(%rip), %rdi # 0x2380 |
| # DISASM-PIC-NEXT: sbbq {{.*}}(%rip), %rsi # 0x2380 |
| # DISASM-PIC-NEXT: subq {{.*}}(%rip), %rbp # 0x2380 |
| # DISASM-PIC-NEXT: xorq {{.*}}(%rip), %r8 # 0x2380 |
| # DISASM-PIC-NEXT: testq %r15, {{.*}}(%rip) # 0x2380 |
| |
| .data |
| .type bar, @object |
| bar: |
| .byte 1 |
| .size bar, .-bar |
| |
| .text |
| .globl _start |
| .type _start, @function |
| _start: |
| ## R_X86_64_GOTPCRELX |
| adcl bar@GOTPCREL(%rip), %eax |
| addl bar@GOTPCREL(%rip), %ebx |
| andl bar@GOTPCREL(%rip), %ecx |
| cmpl bar@GOTPCREL(%rip), %edx |
| orl bar@GOTPCREL(%rip), %edi |
| sbbl bar@GOTPCREL(%rip), %esi |
| subl bar@GOTPCREL(%rip), %ebp |
| xorl bar@GOTPCREL(%rip), %r8d |
| testl %r15d, bar@GOTPCREL(%rip) |
| |
| ## R_X86_64_REX_GOTPCRELX |
| adcq bar@GOTPCREL(%rip), %rax |
| addq bar@GOTPCREL(%rip), %rbx |
| andq bar@GOTPCREL(%rip), %rcx |
| cmpq bar@GOTPCREL(%rip), %rdx |
| orq bar@GOTPCREL(%rip), %rdi |
| sbbq bar@GOTPCREL(%rip), %rsi |
| subq bar@GOTPCREL(%rip), %rbp |
| xorq bar@GOTPCREL(%rip), %r8 |
| testq %r15, bar@GOTPCREL(%rip) |