mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-02 08:26:29 +00:00
Move the AddressPool from DwarfFile to DwarfDebug.
There's only ever one address pool, not one per DWARF output file, so let's just have one. (similar refactoring of the string pool to come soon) llvm-svn: 207026
This commit is contained in:
parent
ae2c262f6c
commit
f96fd788df
@ -888,7 +888,7 @@ void DwarfDebug::finalizeModuleInfo() {
|
|||||||
|
|
||||||
// We don't keep track of which addresses are used in which CU so this
|
// We don't keep track of which addresses are used in which CU so this
|
||||||
// is a bit pessimistic under LTO.
|
// is a bit pessimistic under LTO.
|
||||||
if (!InfoHolder.getAddressPool().isEmpty())
|
if (!AddrPool.isEmpty())
|
||||||
addSectionLabel(*Asm, *SkCU, SkCU->getUnitDie(),
|
addSectionLabel(*Asm, *SkCU, SkCU->getUnitDie(),
|
||||||
dwarf::DW_AT_GNU_addr_base, DwarfAddrSectionSym,
|
dwarf::DW_AT_GNU_addr_base, DwarfAddrSectionSym,
|
||||||
DwarfAddrSectionSym);
|
DwarfAddrSectionSym);
|
||||||
@ -1019,8 +1019,7 @@ void DwarfDebug::endModule() {
|
|||||||
emitDebugAbbrevDWO();
|
emitDebugAbbrevDWO();
|
||||||
emitDebugLineDWO();
|
emitDebugLineDWO();
|
||||||
// Emit DWO addresses.
|
// Emit DWO addresses.
|
||||||
InfoHolder.getAddressPool().emit(
|
AddrPool.emit(*Asm, Asm->getObjFileLowering().getDwarfAddrSection());
|
||||||
*Asm, Asm->getObjFileLowering().getDwarfAddrSection());
|
|
||||||
emitDebugLocDWO();
|
emitDebugLocDWO();
|
||||||
} else
|
} else
|
||||||
// Emit info into a debug loc section.
|
// Emit info into a debug loc section.
|
||||||
@ -2205,7 +2204,7 @@ void DwarfDebug::emitDebugLocDWO() {
|
|||||||
// address we know we've emitted elsewhere (the start of the function?
|
// address we know we've emitted elsewhere (the start of the function?
|
||||||
// The start of the CU or CU subrange that encloses this range?)
|
// The start of the CU or CU subrange that encloses this range?)
|
||||||
Asm->EmitInt8(dwarf::DW_LLE_start_length_entry);
|
Asm->EmitInt8(dwarf::DW_LLE_start_length_entry);
|
||||||
unsigned idx = InfoHolder.getAddressPool().getIndex(Entry.getBeginSym());
|
unsigned idx = AddrPool.getIndex(Entry.getBeginSym());
|
||||||
Asm->EmitULEB128(idx);
|
Asm->EmitULEB128(idx);
|
||||||
Asm->EmitLabelDifference(Entry.getEndSym(), Entry.getBeginSym(), 4);
|
Asm->EmitLabelDifference(Entry.getEndSym(), Entry.getBeginSym(), 4);
|
||||||
|
|
||||||
|
@ -321,6 +321,8 @@ class DwarfDebug : public AsmPrinterHandler {
|
|||||||
// True iff there are multiple CUs in this module.
|
// True iff there are multiple CUs in this module.
|
||||||
bool SingleCU;
|
bool SingleCU;
|
||||||
|
|
||||||
|
AddressPool AddrPool;
|
||||||
|
|
||||||
MCDwarfDwoLineTable *getDwoLineTable(const DwarfCompileUnit &);
|
MCDwarfDwoLineTable *getDwoLineTable(const DwarfCompileUnit &);
|
||||||
|
|
||||||
void addScopeVariable(LexicalScope *LS, DbgVariable *Var);
|
void addScopeVariable(LexicalScope *LS, DbgVariable *Var);
|
||||||
@ -631,6 +633,8 @@ public:
|
|||||||
/// isSubprogramContext - Return true if Context is either a subprogram
|
/// isSubprogramContext - Return true if Context is either a subprogram
|
||||||
/// or another context nested inside a subprogram.
|
/// or another context nested inside a subprogram.
|
||||||
bool isSubprogramContext(const MDNode *Context);
|
bool isSubprogramContext(const MDNode *Context);
|
||||||
|
|
||||||
|
AddressPool &getAddressPool() { return AddrPool; }
|
||||||
};
|
};
|
||||||
} // End of namespace llvm
|
} // End of namespace llvm
|
||||||
|
|
||||||
|
@ -52,8 +52,6 @@ class DwarfFile {
|
|||||||
unsigned NextStringPoolNumber;
|
unsigned NextStringPoolNumber;
|
||||||
std::string StringPref;
|
std::string StringPref;
|
||||||
|
|
||||||
AddressPool AddrPool;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DwarfFile(AsmPrinter *AP, const char *Pref, BumpPtrAllocator &DA);
|
DwarfFile(AsmPrinter *AP, const char *Pref, BumpPtrAllocator &DA);
|
||||||
|
|
||||||
@ -98,8 +96,6 @@ public:
|
|||||||
|
|
||||||
/// \brief Returns the string pool.
|
/// \brief Returns the string pool.
|
||||||
StrPool *getStringPool() { return &StringPool; }
|
StrPool *getStringPool() { return &StringPool; }
|
||||||
|
|
||||||
AddressPool &getAddressPool() { return AddrPool; }
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -290,7 +290,7 @@ void DwarfCompileUnit::addLabelAddress(DIE *Die, dwarf::Attribute Attribute,
|
|||||||
if (Label)
|
if (Label)
|
||||||
DD->addArangeLabel(SymbolCU(this, Label));
|
DD->addArangeLabel(SymbolCU(this, Label));
|
||||||
|
|
||||||
unsigned idx = DU->getAddressPool().getIndex(Label);
|
unsigned idx = DD->getAddressPool().getIndex(Label);
|
||||||
DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
|
DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
|
||||||
Die->addValue(Attribute, dwarf::DW_FORM_GNU_addr_index, Value);
|
Die->addValue(Attribute, dwarf::DW_FORM_GNU_addr_index, Value);
|
||||||
}
|
}
|
||||||
@ -336,7 +336,7 @@ void DwarfUnit::addOpAddress(DIELoc *Die, const MCSymbol *Sym) {
|
|||||||
} else {
|
} else {
|
||||||
addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_addr_index);
|
addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_addr_index);
|
||||||
addUInt(Die, dwarf::DW_FORM_GNU_addr_index,
|
addUInt(Die, dwarf::DW_FORM_GNU_addr_index,
|
||||||
DU->getAddressPool().getIndex(Sym));
|
DD->getAddressPool().getIndex(Sym));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1669,7 +1669,7 @@ void DwarfCompileUnit::createGlobalVariableDIE(DIGlobalVariable GV) {
|
|||||||
} else {
|
} else {
|
||||||
addUInt(Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_const_index);
|
addUInt(Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_const_index);
|
||||||
addUInt(Loc, dwarf::DW_FORM_udata,
|
addUInt(Loc, dwarf::DW_FORM_udata,
|
||||||
DU->getAddressPool().getIndex(Sym, /* TLS */ true));
|
DD->getAddressPool().getIndex(Sym, /* TLS */ true));
|
||||||
}
|
}
|
||||||
// 3) followed by a custom OP to make the debugger do a TLS lookup.
|
// 3) followed by a custom OP to make the debugger do a TLS lookup.
|
||||||
addUInt(Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_push_tls_address);
|
addUInt(Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_push_tls_address);
|
||||||
|
Loading…
Reference in New Issue
Block a user