| ## For a target defined in the same section, create a relocation if the |
| ## symbol is not local, otherwise resolve the fixup statically. |
| # RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t |
| # RUN: llvm-readobj -r %t | FileCheck --check-prefix=RELOC %s |
| # RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck %s |
| |
| # RELOC: .rela.text { |
| # RELOC-NEXT: 0x5 R_X86_64_PLT32 global 0xFFFFFFFFFFFFFFFC |
| # RELOC-NEXT: 0xA R_X86_64_PLT32 weak 0xFFFFFFFFFFFFFFFC |
| # RELOC-NEXT: 0x19 R_X86_64_PLT32 global 0xFFFFFFFFFFFFFFFC |
| # RELOC-NEXT: 0x1E R_X86_64_PLT32 weak 0xFFFFFFFFFFFFFFFC |
| # RELOC-NEXT: 0x23 R_X86_64_PLT32 ifunc 0xFFFFFFFFFFFFFFFC |
| # RELOC-NEXT: } |
| |
| # CHECK: 0: jmp |
| # CHECK-NEXT: 2: jmp |
| # CHECK-NEXT: 4: jmp |
| # CHECK-NEXT: 9: jmp |
| # CHECK-NEXT: e: callq |
| # CHECK-NEXT: 13: callq |
| # CHECK-NEXT: 18: callq |
| # CHECK-NEXT: 1d: callq |
| # CHECK-NEXT: 22: callq |
| # CHECK-NEXT: 27: retq |
| |
| .globl global |
| .weak weak |
| .type ifunc,@gnu_indirect_function |
| global: |
| weak: |
| local: |
| .set var,global |
| ifunc: |
| jmp var |
| jmp local |
| jmp global |
| jmp weak |
| |
| call var |
| call local |
| call global |
| call weak |
| |
| call ifunc |
| ret |