Index: ELF/Symbols.cpp =================================================================== --- ELF/Symbols.cpp +++ ELF/Symbols.cpp @@ -145,9 +145,9 @@ uint64_t Symbol::getPltVA() const { if (this->IsInIplt) { - if (Config->ZRetpolineplt) - return In.Iplt->getVA() + Target->getPltEntryOffset(PltIndex); - return In.Iplt->getVA() + PltIndex * Target->PltEntrySize; + // Normal IPLT does not have a header but retpoline IPLT has one. + return In.Iplt->getVA() + + Target->getPltEntryOffset(PltIndex, Config->ZRetpolineplt); } return In.Plt->getVA() + Target->getPltEntryOffset(PltIndex); } Index: ELF/Target.h =================================================================== --- ELF/Target.h +++ ELF/Target.h @@ -45,8 +45,8 @@ virtual void addPltHeaderSymbols(InputSection &IS) const {} virtual void addPltSymbols(InputSection &IS, uint64_t Off) const {} - unsigned getPltEntryOffset(unsigned Index) const { - return Index * PltEntrySize + PltHeaderSize; + unsigned getPltEntryOffset(unsigned Index, bool Header = true) const { + return (Header ? PltHeaderSize : 0) + Index * PltEntrySize; } // Returns true if a relocation only uses the low bits of a value such that