Index: ELF/Writer.cpp =================================================================== --- ELF/Writer.cpp +++ ELF/Writer.cpp @@ -774,7 +774,7 @@ // need these symbols, since IRELATIVE relocs are resolved through GOT // and PLT. For details, see http://www.airs.com/blog/archives/403. template void Writer::addRelIpltSymbols() { - if (InX::DynSymTab) + if (!Config->Static) return; StringRef S = Config->IsRela ? "__rela_iplt_start" : "__rel_iplt_start"; addOptionalRegular(S, In::RelaIplt, 0, STV_HIDDEN, STB_WEAK); Index: test/ELF/gnu-ifunc-dynsym.s =================================================================== --- /dev/null +++ test/ELF/gnu-ifunc-dynsym.s @@ -0,0 +1,19 @@ +// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o +// RUN: ld.lld -static -export-dynamic %t.o -o %tout +// RUN: llvm-nm -U %tout | FileCheck %s +// REQUIRES: x86 + +// CHECK: __rela_iplt_end +// CHECK: __rela_iplt_start + +.text +.type foo STT_GNU_IFUNC +.globl foo +foo: + ret + +.globl _start +_start: + call foo + movl $__rela_iplt_start,%edx + movl $__rela_iplt_end,%edx