diff --git a/lld/ELF/InputSection.h b/lld/ELF/InputSection.h index 50558e7332d8..1482feaa2628 100644 --- a/lld/ELF/InputSection.h +++ b/lld/ELF/InputSection.h @@ -261,15 +261,18 @@ private: llvm::DenseSet LiveOffsets; }; -struct EhSectionPiece : public SectionPiece { +struct EhSectionPiece { EhSectionPiece(size_t Off, InputSectionBase *ID, uint32_t Size, unsigned FirstRelocation) - : SectionPiece(Off, false), ID(ID), Size(Size), + : InputOff(Off), ID(ID), Size(Size), FirstRelocation(FirstRelocation) {} - InputSectionBase *ID; - uint32_t Size; ArrayRef data() { return {ID->Data.data() + this->InputOff, Size}; } + + size_t InputOff; + ssize_t OutputOff = -1; + InputSectionBase *ID; + uint32_t Size; unsigned FirstRelocation; }; diff --git a/lld/ELF/SyntheticSections.cpp b/lld/ELF/SyntheticSections.cpp index 0da314de9bbd..51be52ee1385 100644 --- a/lld/ELF/SyntheticSections.cpp +++ b/lld/ELF/SyntheticSections.cpp @@ -609,7 +609,7 @@ template void EhFrameSection::writeTo(uint8_t *Buf) { if (In::EhFrameHdr) { for (CieRecord *Cie : Cies) { uint8_t Enc = getFdeEncoding(Cie->Piece); - for (SectionPiece *Fde : Cie->FdePieces) { + for (EhSectionPiece *Fde : Cie->FdePieces) { uint64_t Pc = getFdePc(Buf, Fde->OutputOff, Enc); uint64_t FdeVA = getParent()->Addr + Fde->OutputOff; In::EhFrameHdr->addFde(Pc, FdeVA);