Index: lld/trunk/ELF/Target.cpp =================================================================== --- lld/trunk/ELF/Target.cpp +++ lld/trunk/ELF/Target.cpp @@ -56,7 +56,7 @@ } bool X86TargetInfo::relocNeedsPlt(uint32_t Type, const SymbolBody &S) const { - return Type == R_386_PLT32; + return Type == R_386_PLT32 || (Type == R_386_PC32 && S.isShared()); } static void add32le(uint8_t *L, int32_t V) { write32le(L, read32le(L) + V); } Index: lld/trunk/test/elf2/relocation-i686.s =================================================================== --- lld/trunk/test/elf2/relocation-i686.s +++ lld/trunk/test/elf2/relocation-i686.s @@ -62,7 +62,7 @@ call bar+4 // CHECK: Disassembly of section .dynamic_reloc: // CHECK-NEXT: .dynamic_reloc: -// CHECK-NEXT: 12019: e8 00 00 00 00 calll 0 +// CHECK-NEXT: 12019: e8 16 00 00 00 calll 22 .section .R_386_GOT32,"ax",@progbits .global R_386_GOT32