mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
DwarfDebug/DwarfUnit: Push abbreviation structures down into DwarfUnits to reduce duplication
llvm-svn: 196479
This commit is contained in:
parent
414264b933
commit
042cd582a0
@ -114,10 +114,6 @@ static const char *const DbgTimerName = "DWARF Debug Writer";
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// Configuration values for initial hash set sizes (log2).
|
||||
//
|
||||
static const unsigned InitAbbreviationsSetSize = 9; // log2(512)
|
||||
|
||||
namespace llvm {
|
||||
|
||||
/// resolve - Look in the DwarfDebug map for the MDNode that
|
||||
@ -182,14 +178,10 @@ static unsigned getDwarfVersionFromModule(const Module *M) {
|
||||
}
|
||||
|
||||
DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
|
||||
: Asm(A), MMI(Asm->MMI), FirstCU(0),
|
||||
AbbreviationsSet(InitAbbreviationsSetSize),
|
||||
SourceIdMap(DIEValueAllocator), PrevLabel(NULL), GlobalCUIndexCount(0),
|
||||
GlobalRangeCount(0), InfoHolder(A, &AbbreviationsSet, Abbreviations,
|
||||
"info_string", DIEValueAllocator),
|
||||
SkeletonAbbrevSet(InitAbbreviationsSetSize),
|
||||
SkeletonHolder(A, &SkeletonAbbrevSet, SkeletonAbbrevs, "skel_string",
|
||||
DIEValueAllocator) {
|
||||
: Asm(A), MMI(Asm->MMI), FirstCU(0), SourceIdMap(DIEValueAllocator),
|
||||
PrevLabel(NULL), GlobalCUIndexCount(0), GlobalRangeCount(0),
|
||||
InfoHolder(A, "info_string", DIEValueAllocator),
|
||||
SkeletonHolder(A, "skel_string", DIEValueAllocator) {
|
||||
|
||||
DwarfInfoSectionSym = DwarfAbbrevSectionSym = 0;
|
||||
DwarfStrSectionSym = TextSectionSym = 0;
|
||||
@ -288,7 +280,7 @@ unsigned DwarfUnits::getAddrPoolIndex(const MCExpr *Sym) {
|
||||
//
|
||||
void DwarfUnits::assignAbbrevNumber(DIEAbbrev &Abbrev) {
|
||||
// Check the set for priors.
|
||||
DIEAbbrev *InSet = AbbreviationsSet->GetOrInsertNode(&Abbrev);
|
||||
DIEAbbrev *InSet = AbbreviationsSet.GetOrInsertNode(&Abbrev);
|
||||
|
||||
// If it's newly added.
|
||||
if (InSet == &Abbrev) {
|
||||
@ -2162,25 +2154,21 @@ void DwarfDebug::emitDebugInfo() {
|
||||
|
||||
// Emit the abbreviation section.
|
||||
void DwarfDebug::emitAbbreviations() {
|
||||
if (!useSplitDwarf())
|
||||
emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection(),
|
||||
&Abbreviations);
|
||||
else
|
||||
emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection(),
|
||||
&SkeletonAbbrevs);
|
||||
DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
|
||||
|
||||
Holder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevSection());
|
||||
}
|
||||
|
||||
void DwarfDebug::emitAbbrevs(const MCSection *Section,
|
||||
std::vector<DIEAbbrev *> *Abbrevs) {
|
||||
void DwarfUnits::emitAbbrevs(const MCSection *Section) {
|
||||
// Check to see if it is worth the effort.
|
||||
if (!Abbrevs->empty()) {
|
||||
if (!Abbreviations.empty()) {
|
||||
// Start the debug abbrev section.
|
||||
Asm->OutStreamer.SwitchSection(Section);
|
||||
|
||||
// For each abbrevation.
|
||||
for (unsigned i = 0, N = Abbrevs->size(); i < N; ++i) {
|
||||
for (unsigned i = 0, N = Abbreviations.size(); i < N; ++i) {
|
||||
// Get abbreviation data
|
||||
const DIEAbbrev *Abbrev = Abbrevs->at(i);
|
||||
const DIEAbbrev *Abbrev = Abbreviations[i];
|
||||
|
||||
// Emit the abbrevations code (base 1 index.)
|
||||
Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
|
||||
@ -3031,8 +3019,7 @@ void DwarfDebug::emitDebugInfoDWO() {
|
||||
// abbreviations for the .debug_info.dwo section.
|
||||
void DwarfDebug::emitDebugAbbrevDWO() {
|
||||
assert(useSplitDwarf() && "No split dwarf?");
|
||||
emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection(),
|
||||
&Abbreviations);
|
||||
InfoHolder.emitAbbrevs(Asm->getObjFileLowering().getDwarfAbbrevDWOSection());
|
||||
}
|
||||
|
||||
// Emit the .debug_str.dwo section for separated dwarf. This contains the
|
||||
|
@ -226,10 +226,10 @@ class DwarfUnits {
|
||||
AsmPrinter *Asm;
|
||||
|
||||
// Used to uniquely define abbreviations.
|
||||
FoldingSet<DIEAbbrev> *AbbreviationsSet;
|
||||
FoldingSet<DIEAbbrev> AbbreviationsSet;
|
||||
|
||||
// A list of all the unique abbreviations in use.
|
||||
std::vector<DIEAbbrev *> &Abbreviations;
|
||||
std::vector<DIEAbbrev *> Abbreviations;
|
||||
|
||||
// A pointer to all units in the section.
|
||||
SmallVector<Unit *, 1> CUs;
|
||||
@ -251,12 +251,9 @@ class DwarfUnits {
|
||||
unsigned NextAddrPoolNumber;
|
||||
|
||||
public:
|
||||
DwarfUnits(AsmPrinter *AP, FoldingSet<DIEAbbrev> *AS,
|
||||
std::vector<DIEAbbrev *> &A, const char *Pref,
|
||||
BumpPtrAllocator &DA)
|
||||
: Asm(AP), AbbreviationsSet(AS), Abbreviations(A), StringPool(DA),
|
||||
NextStringPoolNumber(0), StringPref(Pref), AddressPool(),
|
||||
NextAddrPoolNumber(0) {}
|
||||
DwarfUnits(AsmPrinter *AP, const char *Pref, BumpPtrAllocator &DA)
|
||||
: Asm(AP), StringPool(DA), NextStringPoolNumber(0), StringPref(Pref),
|
||||
AddressPool(), NextAddrPoolNumber(0) {}
|
||||
|
||||
~DwarfUnits();
|
||||
|
||||
@ -279,6 +276,9 @@ public:
|
||||
void emitUnits(DwarfDebug *DD, const MCSection *USection,
|
||||
const MCSection *ASection, const MCSymbol *ASectionSym);
|
||||
|
||||
/// \brief Emit a set of abbreviations to the specific section.
|
||||
void emitAbbrevs(const MCSection *);
|
||||
|
||||
/// \brief Emit all of the strings to the section given.
|
||||
void emitStrings(const MCSection *StrSection, const MCSection *OffsetSection,
|
||||
const MCSymbol *StrSecSym);
|
||||
@ -347,12 +347,6 @@ class DwarfDebug : public AsmPrinterHandler {
|
||||
/// of in CompileUnit.
|
||||
DenseMap<const MDNode *, DIE *> MDTypeNodeToDieMap;
|
||||
|
||||
// Used to uniquely define abbreviations.
|
||||
FoldingSet<DIEAbbrev> AbbreviationsSet;
|
||||
|
||||
// A list of all the unique abbreviations in use.
|
||||
std::vector<DIEAbbrev *> Abbreviations;
|
||||
|
||||
// Stores the current file ID for a given compile unit.
|
||||
DenseMap <unsigned, unsigned> FileIDCUMap;
|
||||
// Source id map, i.e. CUID, source filename and directory,
|
||||
@ -485,12 +479,6 @@ class DwarfDebug : public AsmPrinterHandler {
|
||||
// original object file, rather than things that are meant
|
||||
// to be in the .dwo sections.
|
||||
|
||||
// Used to uniquely define abbreviations for the skeleton emission.
|
||||
FoldingSet<DIEAbbrev> SkeletonAbbrevSet;
|
||||
|
||||
// A list of all the unique abbreviations in use.
|
||||
std::vector<DIEAbbrev *> SkeletonAbbrevs;
|
||||
|
||||
// Holder for the skeleton information.
|
||||
DwarfUnits SkeletonHolder;
|
||||
|
||||
@ -553,9 +541,6 @@ class DwarfDebug : public AsmPrinterHandler {
|
||||
/// open.
|
||||
void endSections();
|
||||
|
||||
/// \brief Emit a set of abbreviations to the specific section.
|
||||
void emitAbbrevs(const MCSection *, std::vector<DIEAbbrev*> *);
|
||||
|
||||
/// \brief Emit the debug info section.
|
||||
void emitDebugInfo();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user