Index: lld/trunk/ELF/Symbols.h =================================================================== --- lld/trunk/ELF/Symbols.h +++ lld/trunk/ELF/Symbols.h @@ -218,7 +218,7 @@ Verdef(Verdef), ElfSym(ElfSym) { // IFuncs defined in DSOs are treated as functions by the static linker. if (isGnuIFunc()) - Type = llvm::ELF::STT_FUNC; + this->Type = llvm::ELF::STT_FUNC; this->File = File; } Index: lld/trunk/test/ELF/Inputs/gnu-ifunc-dso.s =================================================================== --- lld/trunk/test/ELF/Inputs/gnu-ifunc-dso.s +++ lld/trunk/test/ELF/Inputs/gnu-ifunc-dso.s @@ -0,0 +1,3 @@ +.type foo STT_GNU_IFUNC +.globl foo +foo: Index: lld/trunk/test/ELF/gnu-ifunc-dso.s =================================================================== --- lld/trunk/test/ELF/gnu-ifunc-dso.s +++ lld/trunk/test/ELF/gnu-ifunc-dso.s @@ -0,0 +1,13 @@ +# REQUIRES: x86 +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %S/Inputs/gnu-ifunc-dso.s -o %t1.o +# RUN: ld.lld -shared %t1.o -o %t.so +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t2.o +# RUN: ld.lld -shared %t2.o %t.so -o %t +# RUN: llvm-readobj -dyn-relocations %t | FileCheck %s + +# CHECK: Dynamic Relocations { +# CHECK-NEXT: 0x1000 R_X86_64_64 foo 0x0 +# CHECK-NEXT: } + +.data + .quad foo