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;
const DataExtractor &DIData = DataExtractor(getInfoSection().Data,
isLittleEndian(), 0);
while (DIData.isValidOffset(offset)) {
- std::unique_ptr<DWARFCompileUnit> CU(new DWARFCompileUnit(
+ std::unique_ptr<DWARFCompileUnit> CU(new DWARFCompileUnit(*this,
getDebugAbbrev(), getInfoSection().Data, getRangeSection(),
getStringSection(), StringRef(), getAddrSection(),
&getInfoSection().Relocs, isLittleEndian()));
const DataExtractor &DIData =
DataExtractor(I.second.Data, isLittleEndian(), 0);
while (DIData.isValidOffset(offset)) {
- std::unique_ptr<DWARFTypeUnit> TU(
- new DWARFTypeUnit(getDebugAbbrev(), I.second.Data, getRangeSection(),
- getStringSection(), StringRef(), getAddrSection(),
- &I.second.Relocs, isLittleEndian()));
+ std::unique_ptr<DWARFTypeUnit> 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));
const DataExtractor &DIData =
DataExtractor(getInfoDWOSection().Data, isLittleEndian(), 0);
while (DIData.isValidOffset(offset)) {
- std::unique_ptr<DWARFCompileUnit> DWOCU(new DWARFCompileUnit(
+ std::unique_ptr<DWARFCompileUnit> DWOCU(new DWARFCompileUnit(*this,
getDebugAbbrevDWO(), getInfoDWOSection().Data, getRangeDWOSection(),
getStringDWOSection(), getStringOffsetDWOSection(), getAddrSection(),
&getInfoDWOSection().Relocs, isLittleEndian()));
const DataExtractor &DIData =
DataExtractor(I.second.Data, isLittleEndian(), 0);
while (DIData.isValidOffset(offset)) {
- std::unique_ptr<DWARFTypeUnit> TU(new DWARFTypeUnit(
+ std::unique_ptr<DWARFTypeUnit> TU(new DWARFTypeUnit(*this,
getDebugAbbrevDWO(), I.second.Data, getRangeDWOSection(),
getStringDWOSection(), getStringOffsetDWOSection(), getAddrSection(),
&I.second.Relocs, isLittleEndian()));
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;
}
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();
}
class ObjectFile;
}
+class DWARFContext;
class DWARFDebugAbbrev;
class StringRef;
class raw_ostream;
class DWARFUnit {
+ DWARFContext &Context;
+
const DWARFDebugAbbrev *Abbrev;
StringRef InfoSection;
StringRef RangeSection;
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) {