From a1f7715ef94dfc415dce9ecd27bae6c0ff2cbac3 Mon Sep 17 00:00:00 2001 From: Frederic Riss Date: Thu, 4 Sep 2014 06:14:28 +0000 Subject: [PATCH] Add a DWARFContext& member in DWARFUnit. The DWARFContext will be used to pass global 'context' down, like pointers to related debug info sections or command line options. The first use will be for the debug_info dumper to be able to access other debug info section to dump eg. Location Expression inline in the debug_info dump. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217128 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/DebugInfo/DWARFCompileUnit.h | 8 ++++---- lib/DebugInfo/DWARFContext.cpp | 14 +++++++------- lib/DebugInfo/DWARFTypeUnit.h | 8 ++++---- lib/DebugInfo/DWARFUnit.cpp | 12 ++++++------ lib/DebugInfo/DWARFUnit.h | 11 ++++++++--- 5 files changed, 29 insertions(+), 24 deletions(-) diff --git a/lib/DebugInfo/DWARFCompileUnit.h b/lib/DebugInfo/DWARFCompileUnit.h index 4fee0d2f8ad..bf875fbe41f 100644 --- a/lib/DebugInfo/DWARFCompileUnit.h +++ b/lib/DebugInfo/DWARFCompileUnit.h @@ -16,10 +16,10 @@ namespace llvm { class DWARFCompileUnit : public DWARFUnit { public: - DWARFCompileUnit(const DWARFDebugAbbrev *DA, StringRef IS, StringRef RS, - StringRef SS, StringRef SOS, StringRef AOS, - const RelocAddrMap *M, bool LE) - : DWARFUnit(DA, IS, RS, SS, SOS, AOS, M, LE) {} + DWARFCompileUnit(DWARFContext& Context, const DWARFDebugAbbrev *DA, + StringRef IS, StringRef RS, StringRef SS, StringRef SOS, + StringRef AOS, const RelocAddrMap *M, bool LE) + : DWARFUnit(Context, DA, IS, RS, SS, SOS, AOS, M, LE) {} void dump(raw_ostream &OS); // VTable anchor. ~DWARFCompileUnit() override; diff --git a/lib/DebugInfo/DWARFContext.cpp b/lib/DebugInfo/DWARFContext.cpp index fc8d93dce3d..4a57613e425 100644 --- a/lib/DebugInfo/DWARFContext.cpp +++ b/lib/DebugInfo/DWARFContext.cpp @@ -318,7 +318,7 @@ void DWARFContext::parseCompileUnits() { const DataExtractor &DIData = DataExtractor(getInfoSection().Data, isLittleEndian(), 0); while (DIData.isValidOffset(offset)) { - std::unique_ptr CU(new DWARFCompileUnit( + std::unique_ptr CU(new DWARFCompileUnit(*this, getDebugAbbrev(), getInfoSection().Data, getRangeSection(), getStringSection(), StringRef(), getAddrSection(), &getInfoSection().Relocs, isLittleEndian())); @@ -338,10 +338,10 @@ void DWARFContext::parseTypeUnits() { const DataExtractor &DIData = DataExtractor(I.second.Data, isLittleEndian(), 0); while (DIData.isValidOffset(offset)) { - std::unique_ptr TU( - new DWARFTypeUnit(getDebugAbbrev(), I.second.Data, getRangeSection(), - getStringSection(), StringRef(), getAddrSection(), - &I.second.Relocs, isLittleEndian())); + std::unique_ptr TU(new DWARFTypeUnit(*this, + getDebugAbbrev(), I.second.Data, getRangeSection(), + getStringSection(), StringRef(), getAddrSection(), + &I.second.Relocs, isLittleEndian())); if (!TU->extract(DIData, &offset)) break; TUs.push_back(std::move(TU)); @@ -357,7 +357,7 @@ void DWARFContext::parseDWOCompileUnits() { const DataExtractor &DIData = DataExtractor(getInfoDWOSection().Data, isLittleEndian(), 0); while (DIData.isValidOffset(offset)) { - std::unique_ptr DWOCU(new DWARFCompileUnit( + std::unique_ptr DWOCU(new DWARFCompileUnit(*this, getDebugAbbrevDWO(), getInfoDWOSection().Data, getRangeDWOSection(), getStringDWOSection(), getStringOffsetDWOSection(), getAddrSection(), &getInfoDWOSection().Relocs, isLittleEndian())); @@ -377,7 +377,7 @@ void DWARFContext::parseDWOTypeUnits() { const DataExtractor &DIData = DataExtractor(I.second.Data, isLittleEndian(), 0); while (DIData.isValidOffset(offset)) { - std::unique_ptr TU(new DWARFTypeUnit( + std::unique_ptr TU(new DWARFTypeUnit(*this, getDebugAbbrevDWO(), I.second.Data, getRangeDWOSection(), getStringDWOSection(), getStringOffsetDWOSection(), getAddrSection(), &I.second.Relocs, isLittleEndian())); diff --git a/lib/DebugInfo/DWARFTypeUnit.h b/lib/DebugInfo/DWARFTypeUnit.h index 9c76b4f72c7..ec1f90d6acc 100644 --- a/lib/DebugInfo/DWARFTypeUnit.h +++ b/lib/DebugInfo/DWARFTypeUnit.h @@ -19,10 +19,10 @@ private: uint64_t TypeHash; uint32_t TypeOffset; public: - DWARFTypeUnit(const DWARFDebugAbbrev *DA, StringRef IS, StringRef RS, - StringRef SS, StringRef SOS, StringRef AOS, - const RelocAddrMap *M, bool LE) - : DWARFUnit(DA, IS, RS, SS, SOS, AOS, M, LE) {} + DWARFTypeUnit(DWARFContext &Context, const DWARFDebugAbbrev *DA, + StringRef IS, StringRef RS, StringRef SS, StringRef SOS, + StringRef AOS, const RelocAddrMap *M, bool LE) + : DWARFUnit(Context, DA, IS, RS, SS, SOS, AOS, M, LE) {} uint32_t getHeaderSize() const override { return DWARFUnit::getHeaderSize() + 12; } diff --git a/lib/DebugInfo/DWARFUnit.cpp b/lib/DebugInfo/DWARFUnit.cpp index 6ed3e04b7bf..fe75ebe2dc5 100644 --- a/lib/DebugInfo/DWARFUnit.cpp +++ b/lib/DebugInfo/DWARFUnit.cpp @@ -17,12 +17,12 @@ using namespace llvm; using namespace dwarf; -DWARFUnit::DWARFUnit(const DWARFDebugAbbrev *DA, StringRef IS, StringRef RS, - StringRef SS, StringRef SOS, StringRef AOS, - const RelocAddrMap *M, bool LE) - : Abbrev(DA), InfoSection(IS), RangeSection(RS), StringSection(SS), - StringOffsetSection(SOS), AddrOffsetSection(AOS), RelocMap(M), - isLittleEndian(LE) { +DWARFUnit::DWARFUnit(DWARFContext &DC, const DWARFDebugAbbrev *DA, + StringRef IS, StringRef RS, StringRef SS, StringRef SOS, + StringRef AOS, const RelocAddrMap *M, bool LE) + : Context(DC), Abbrev(DA), InfoSection(IS), RangeSection(RS), + StringSection(SS), StringOffsetSection(SOS), AddrOffsetSection(AOS), + RelocMap(M), isLittleEndian(LE) { clear(); } diff --git a/lib/DebugInfo/DWARFUnit.h b/lib/DebugInfo/DWARFUnit.h index 206d86c3087..763caddb9d7 100644 --- a/lib/DebugInfo/DWARFUnit.h +++ b/lib/DebugInfo/DWARFUnit.h @@ -22,11 +22,14 @@ namespace object { class ObjectFile; } +class DWARFContext; class DWARFDebugAbbrev; class StringRef; class raw_ostream; class DWARFUnit { + DWARFContext &Context; + const DWARFDebugAbbrev *Abbrev; StringRef InfoSection; StringRef RangeSection; @@ -63,12 +66,14 @@ protected: virtual uint32_t getHeaderSize() const { return 11; } public: - DWARFUnit(const DWARFDebugAbbrev *DA, StringRef IS, StringRef RS, - StringRef SS, StringRef SOS, StringRef AOS, const RelocAddrMap *M, - bool LE); + DWARFUnit(DWARFContext& Context, const DWARFDebugAbbrev *DA, StringRef IS, + StringRef RS, StringRef SS, StringRef SOS, StringRef AOS, + const RelocAddrMap *M, bool LE); virtual ~DWARFUnit(); + DWARFContext& getContext() const { return Context; } + StringRef getStringSection() const { return StringSection; } StringRef getStringOffsetSection() const { return StringOffsetSection; } void setAddrOffsetSection(StringRef AOS, uint32_t Base) {