Make getFdeEncoding a non-member function.

This function does not depend on EhOutputSection class.

llvm-svn: 270522
This commit is contained in:
Rui Ueyama 2016-05-24 02:08:38 +00:00
parent 819fb787ce
commit 6de2e6829d
2 changed files with 3 additions and 8 deletions

View File

@ -963,8 +963,7 @@ template <class ELFT> static void skipAugP(ArrayRef<uint8_t> &D) {
D = D.slice(Size);
}
template <class ELFT>
uint8_t EhOutputSection<ELFT>::getFdeEncoding(ArrayRef<uint8_t> D) {
template <class ELFT> static uint8_t getFdeEncoding(ArrayRef<uint8_t> D) {
if (D.size() < 8)
fatal("CIE too small");
D = D.slice(8);
@ -1051,8 +1050,6 @@ CieRecord *EhOutputSection<ELFT>::addCie(SectionPiece &Piece,
// If not found, create a new one.
if (Cie->Piece == nullptr) {
Cie->Piece = &Piece;
if (Config->EhFrameHdr)
Cie->FdeEncoding = getFdeEncoding(Piece.Data);
Cies.push_back(Cie);
}
return Cie;
@ -1214,8 +1211,9 @@ template <class ELFT> void EhOutputSection<ELFT>::writeTo(uint8_t *Buf) {
// we obtain two addresses and pass them to EhFrameHdr object.
if (Out<ELFT>::EhFrameHdr) {
for (CieRecord *Cie : Cies) {
uint8_t Enc = getFdeEncoding<ELFT>(Cie->Piece->Data);
for (SectionPiece *Fde : Cie->FdePieces) {
uintX_t Pc = getFdePc(Buf, Fde->OutputOff, Cie->FdeEncoding);
uintX_t Pc = getFdePc(Buf, Fde->OutputOff, Enc);
uintX_t FdeVA = this->getVA() + Fde->OutputOff;
Out<ELFT>::EhFrameHdr->addFde(Pc, FdeVA);
}

View File

@ -328,7 +328,6 @@ private:
struct CieRecord {
SectionPiece *Piece = nullptr;
std::vector<SectionPiece *> FdePieces;
uint8_t FdeEncoding = 0;
};
// Output section for .eh_frame.
@ -363,8 +362,6 @@ private:
bool isFdeLive(SectionPiece &Piece, EHInputSection<ELFT> *Sec,
ArrayRef<RelTy> Rels);
uint8_t getFdeEncoding(ArrayRef<uint8_t> D);
uintX_t getFdePc(uint8_t *Buf, size_t Off, uint8_t Enc);
std::vector<EHInputSection<ELFT> *> Sections;