Index: ELF/Symbols.cpp =================================================================== --- ELF/Symbols.cpp +++ ELF/Symbols.cpp @@ -144,12 +144,8 @@ } 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; - } - return In.Plt->getVA() + Target->getPltEntryOffset(PltIndex); + PltSection *Plt = IsInIplt ? In.Iplt : In.Plt; + return Plt->getVA() + Plt->HeaderSize + PltIndex * Target->PltEntrySize; } uint64_t Symbol::getPltOffset() const { Index: ELF/SyntheticSections.h =================================================================== --- ELF/SyntheticSections.h +++ ELF/SyntheticSections.h @@ -662,10 +662,11 @@ template void addEntry(Symbol &Sym); + size_t HeaderSize; + private: unsigned getPltRelocOff() const; std::vector> Entries; - size_t HeaderSize; bool IsIplt; }; Index: ELF/Target.h =================================================================== --- ELF/Target.h +++ ELF/Target.h @@ -46,7 +46,7 @@ virtual void addPltSymbols(InputSection &IS, uint64_t Off) const {} unsigned getPltEntryOffset(unsigned Index) const { - return Index * PltEntrySize + PltHeaderSize; + return PltHeaderSize + Index * PltEntrySize; } // Returns true if a relocation only uses the low bits of a value such that