[DebugInfo] Pass DWARFSection into DWARFUnitSection constructor (NFC).

llvm-svn: 219259
This commit is contained in:
Alexey Samsonov 2014-10-08 00:07:53 +00:00
parent fcfbcc6d10
commit 8cd4c9d947
3 changed files with 25 additions and 27 deletions

View File

@ -314,7 +314,7 @@ DWARFContext::getLineTableForUnit(DWARFUnit *cu) {
}
void DWARFContext::parseCompileUnits() {
CUs.parse(*this, getInfoSection().Data, getInfoSection().Relocs);
CUs.parse(*this, getInfoSection());
}
void DWARFContext::parseTypeUnits() {
@ -322,12 +322,12 @@ void DWARFContext::parseTypeUnits() {
return;
for (const auto &I : getTypesSections()) {
TUs.push_back(DWARFUnitSection<DWARFTypeUnit>());
TUs.back().parse(*this, I.second.Data, I.second.Relocs);
TUs.back().parse(*this, I.second);
}
}
void DWARFContext::parseDWOCompileUnits() {
DWOCUs.parseDWO(*this, getInfoDWOSection().Data, getInfoDWOSection().Relocs);
DWOCUs.parseDWO(*this, getInfoDWOSection());
}
void DWARFContext::parseDWOTypeUnits() {
@ -335,7 +335,7 @@ void DWARFContext::parseDWOTypeUnits() {
return;
for (const auto &I : getTypesDWOSections()) {
DWOTUs.push_back(DWARFUnitSection<DWARFTypeUnit>());
DWOTUs.back().parseDWO(*this, I.second.Data, I.second.Relocs);
DWOTUs.back().parseDWO(*this, I.second);
}
}

View File

@ -17,19 +17,17 @@
using namespace llvm;
using namespace dwarf;
void DWARFUnitSectionBase::parse(DWARFContext &C, StringRef SectionData,
const RelocAddrMap &Map) {
parseImpl(C, C.getDebugAbbrev(), SectionData, C.getRangeSection(),
C.getStringSection(), StringRef(), C.getAddrSection(), Map,
void DWARFUnitSectionBase::parse(DWARFContext &C, const DWARFSection &Section) {
parseImpl(C, Section, C.getDebugAbbrev(), C.getRangeSection(),
C.getStringSection(), StringRef(), C.getAddrSection(),
C.isLittleEndian());
}
void DWARFUnitSectionBase::parseDWO(DWARFContext &C, StringRef SectionData,
const RelocAddrMap &Map) {
parseImpl(C, C.getDebugAbbrevDWO(), SectionData, C.getRangeDWOSection(),
void DWARFUnitSectionBase::parseDWO(DWARFContext &C,
const DWARFSection &DWOSection) {
parseImpl(C, DWOSection, C.getDebugAbbrevDWO(), C.getRangeDWOSection(),
C.getStringDWOSection(), C.getStringOffsetDWOSection(),
C.getAddrSection(), Map, C.isLittleEndian());
C.getAddrSection(), C.isLittleEndian());
}
DWARFUnit::DWARFUnit(DWARFContext &DC, const DWARFDebugAbbrev *DA,

View File

@ -14,6 +14,7 @@
#include "DWARFDebugInfoEntry.h"
#include "DWARFDebugRangeList.h"
#include "DWARFRelocMap.h"
#include "DWARFSection.h"
#include <vector>
namespace llvm {
@ -24,9 +25,9 @@ class ObjectFile;
class DWARFContext;
class DWARFDebugAbbrev;
class DWARFUnit;
class StringRef;
class raw_ostream;
class DWARFUnit;
/// Base class for all DWARFUnitSection classes. This provides the
/// functionality common to all unit types.
@ -36,14 +37,13 @@ public:
/// same section this Unit originated from.
virtual DWARFUnit *getUnitForOffset(uint32_t Offset) const = 0;
void parse(DWARFContext &C, StringRef SectionData, const RelocAddrMap &Map);
void parseDWO(DWARFContext &C, StringRef SectionData, const RelocAddrMap &Map);
void parse(DWARFContext &C, const DWARFSection &Section);
void parseDWO(DWARFContext &C, const DWARFSection &DWOSection);
protected:
virtual void parseImpl(DWARFContext &Context, const DWARFDebugAbbrev *DA,
StringRef Section, StringRef RS, StringRef SS,
StringRef SOS, StringRef AOS, const RelocAddrMap &M,
bool isLittleEndian) = 0;
virtual void parseImpl(DWARFContext &Context, const DWARFSection &Section,
const DWARFDebugAbbrev *DA, StringRef RS, StringRef SS,
StringRef SOS, StringRef AOS, bool isLittleEndian) = 0;
~DWARFUnitSectionBase() {}
};
@ -79,18 +79,18 @@ public:
return nullptr;
}
private:
void parseImpl(DWARFContext &Context, const DWARFDebugAbbrev *DA,
StringRef Section, StringRef RS, StringRef SS, StringRef SOS,
StringRef AOS, const RelocAddrMap &M, bool LE) override {
private:
void parseImpl(DWARFContext &Context, const DWARFSection &Section,
const DWARFDebugAbbrev *DA, StringRef RS, StringRef SS,
StringRef SOS, StringRef AOS, bool LE) override {
if (Parsed)
return;
DataExtractor Data(Section, LE, 0);
DataExtractor Data(Section.Data, LE, 0);
uint32_t Offset = 0;
while (Data.isValidOffset(Offset)) {
auto U =
llvm::make_unique<UnitType>(Context, DA, Section, RS, SS, SOS, AOS,
&M, Data.isLittleEndian(), *this);
llvm::make_unique<UnitType>(Context, DA, Section.Data, RS, SS, SOS,
AOS, &Section.Relocs, LE, *this);
if (!U->extract(Data, &Offset))
break;
this->push_back(std::move(U));