diff options
Diffstat (limited to 'llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h')
-rw-r--r-- | llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h b/llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h index 5a1eef1d007..d91d764c4d0 100644 --- a/llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h +++ b/llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h @@ -16,6 +16,7 @@ #include "llvm/BinaryFormat/Dwarf.h" #include "llvm/Object/ELF.h" #include "llvm/Object/ELFTypes.h" +#include "llvm/Object/ELFObjectFile.h" #include "llvm/Support/Casting.h" #include "llvm/Support/ScopedPrinter.h" #include "llvm/Support/Debug.h" @@ -31,15 +32,15 @@ namespace DwarfCFIEH { template <typename ELFT> class PrinterContext { ScopedPrinter &W; - const object::ELFFile<ELFT> *Obj; + const object::ELFObjectFile<ELFT> *ObjF; void printEHFrameHdr(uint64_t Offset, uint64_t Address, uint64_t Size) const; void printEHFrame(const typename ELFT::Shdr *EHFrameShdr) const; public: - PrinterContext(ScopedPrinter &W, const object::ELFFile<ELFT> *Obj) - : W(W), Obj(Obj) {} + PrinterContext(ScopedPrinter &W, const object::ELFObjectFile<ELFT> *ObjF) + : W(W), ObjF(ObjF) {} void printUnwindInformation() const; }; @@ -59,6 +60,7 @@ static const typename ELFO::Elf_Shdr *findSectionByAddress(const ELFO *Obj, template <typename ELFT> void PrinterContext<ELFT>::printUnwindInformation() const { + const object::ELFFile<ELFT> *Obj = ObjF->getELFFile(); const typename ELFT::Phdr *EHFramePhdr = nullptr; auto PHs = Obj->program_headers(); @@ -101,6 +103,7 @@ void PrinterContext<ELFT>::printEHFrameHdr(uint64_t EHFrameHdrOffset, W.startLine() << format("Offset: 0x%" PRIx64 "\n", EHFrameHdrOffset); W.startLine() << format("Size: 0x%" PRIx64 "\n", EHFrameHdrSize); + const object::ELFFile<ELFT> *Obj = ObjF->getELFFile(); const auto *EHFrameHdrShdr = findSectionByAddress(Obj, EHFrameHdrAddress); if (EHFrameHdrShdr) { auto SectionName = Obj->getSectionName(EHFrameHdrShdr); @@ -173,6 +176,7 @@ void PrinterContext<ELFT>::printEHFrame( ShOffset, Address); W.indent(); + const object::ELFFile<ELFT> *Obj = ObjF->getELFFile(); auto Result = Obj->getSectionContents(EHFrameShdr); if (Error E = Result.takeError()) reportError(toString(std::move(E))); @@ -183,7 +187,8 @@ void PrinterContext<ELFT>::printEHFrame( Contents.size()), ELFT::TargetEndianness == support::endianness::little, ELFT::Is64Bits ? 8 : 4); - DWARFDebugFrame EHFrame(/*IsEH=*/true, /*EHFrameAddress=*/Address); + DWARFDebugFrame EHFrame(Triple::ArchType(ObjF->getArch()), /*IsEH=*/true, + /*EHFrameAddress=*/Address); EHFrame.parse(DE); for (const auto &Entry : EHFrame) { |