# This test checks that IRELATIVE relocations are created for symbols that # need relocation even for static links. RUN: lld -flavor gnu -target x86_64-linux -emit-yaml -r \ RUN: %p/Inputs/ifunc.x86-64 | FileCheck %s RUN: lld -flavor gnu -target x86_64-linux -emit-yaml --noinhibit-exec \ RUN: %p/Inputs/ifunc.x86-64 %p/Inputs/ifunc.cpp.x86-64 \ RUN: | FileCheck %s --check-prefix=PLT RUN: lld -flavor gnu -target x86_64-linux -o %t %p/Inputs/ifunc.x86-64 \ RUN: -e main -static %p/Inputs/ifunc.cpp.x86-64 RUN: llvm-objdump -d -s %t| FileCheck %s --check-prefix=BIN RUN: llvm-readobj -r %t | FileCheck %s --check-prefix=RELATIVEADDEND PLT: defined-atoms: PLT: name: plt PLT: scope: global PLT: references: PLT: kind: R_X86_64_PC32 PLT: target: [[PLTNAME:[-a-zA-Z0-9_]+]] PLT: kind: layout-before PLT: target: __hey_1 PLT: name: main PLT: scope: global PLT: references: PLT: kind: R_X86_64_PC32 PLT: target: [[PLTNAME]] // Make sure the target of main's relocation is a stub with a PC32 relocation. // This relocation is to the got atom, but you can't really write that check in // FileCheck. PLT: name: PLT: type: stub PLT: references PLT: kind: R_X86_64_PC32 // Make sure there's a got entry with a IRELATIVE relocation. PLT: type: got PLT: references: PLT: kind: R_X86_64_IRELATIVE PLT: target: hey CHECK: name: hey CHECK: scope: global CHECK: type: resolver // This is a horribly brittle test. We need a way to do arithmetic on captured // variables. BIN: {{[0-9a-f]+}}: ff 25 {{[0-9a-f]+}} {{[0-9a-f]+}} 00 00 jmpq *{{[0-9]+}}(%rip) BIN: .got.plt: BIN-NEXT: {{[0-9a-f]+}} 00000000 00000000 RELATIVEADDEND: Relocations [ RELATIVEADDEND-NEXT: Section (1) .rela.plt { RELATIVEADDEND-NEXT: 0x401000 R_X86_64_IRELATIVE - 0x4000E0 RELATIVEADDEND-NEXT: } RELATIVEADDEND-NEXT: ]