mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-03 14:31:10 +00:00
DwarfCompileUnit: Push DIDescriptors through a getDIE/insertDIE
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194875 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7426308bf0
commit
cbc85a270d
@ -38,7 +38,7 @@ CompileUnit::CompileUnit(unsigned UID, DIE *D, const MDNode *N, AsmPrinter *A,
|
||||
: UniqueID(UID), Node(N), CUDie(D), Asm(A), DD(DW), DU(DWU), IndexTyDie(0),
|
||||
DebugInfoOffset(0) {
|
||||
DIEIntegerOne = new (DIEValueAllocator) DIEInteger(1);
|
||||
insertDIE(N, D);
|
||||
insertDIE(DIDescriptor(N), D);
|
||||
}
|
||||
|
||||
/// ~CompileUnit - Destructor for compile unit.
|
||||
@ -110,21 +110,21 @@ static bool isShareableAcrossCUs(DIDescriptor D) {
|
||||
/// specified debug variable. We delegate the request to DwarfDebug
|
||||
/// when the DIE for this MDNode can be shared across CUs. The mappings
|
||||
/// will be kept in DwarfDebug for shareable DIEs.
|
||||
DIE *CompileUnit::getDIE(const MDNode *N) const {
|
||||
if (isShareableAcrossCUs(DIDescriptor(N)))
|
||||
return DD->getDIE(N);
|
||||
return MDNodeToDieMap.lookup(N);
|
||||
DIE *CompileUnit::getDIE(DIDescriptor D) const {
|
||||
if (isShareableAcrossCUs(D))
|
||||
return DD->getDIE(D);
|
||||
return MDNodeToDieMap.lookup(D);
|
||||
}
|
||||
|
||||
/// insertDIE - Insert DIE into the map. We delegate the request to DwarfDebug
|
||||
/// when the DIE for this MDNode can be shared across CUs. The mappings
|
||||
/// will be kept in DwarfDebug for shareable DIEs.
|
||||
void CompileUnit::insertDIE(const MDNode *N, DIE *D) {
|
||||
if (isShareableAcrossCUs(DIDescriptor(N))) {
|
||||
DD->insertDIE(N, D);
|
||||
void CompileUnit::insertDIE(DIDescriptor Desc, DIE *D) {
|
||||
if (isShareableAcrossCUs(Desc)) {
|
||||
DD->insertDIE(Desc, D);
|
||||
return;
|
||||
}
|
||||
MDNodeToDieMap.insert(std::make_pair(N, D));
|
||||
MDNodeToDieMap.insert(std::make_pair(Desc, D));
|
||||
}
|
||||
|
||||
/// addFlag - Add a flag that is true.
|
||||
@ -300,7 +300,7 @@ DIE *CompileUnit::createAndAddDIE(unsigned Tag, DIE &Parent, const MDNode *MD) {
|
||||
DIE *Die = new DIE(Tag);
|
||||
Parent.addChild(Die);
|
||||
if (MD)
|
||||
insertDIE(MD, Die);
|
||||
insertDIE(DIDescriptor(MD), Die);
|
||||
return Die;
|
||||
}
|
||||
|
||||
@ -1512,11 +1512,12 @@ static const ConstantExpr *getMergedGlobalExpr(const Value *V) {
|
||||
|
||||
/// createGlobalVariableDIE - create global variable DIE.
|
||||
void CompileUnit::createGlobalVariableDIE(const MDNode *N) {
|
||||
DIGlobalVariable GV(N);
|
||||
|
||||
// Check for pre-existence.
|
||||
if (getDIE(N))
|
||||
if (getDIE(GV))
|
||||
return;
|
||||
|
||||
DIGlobalVariable GV(N);
|
||||
if (!GV.isGlobalVariable())
|
||||
return;
|
||||
|
||||
@ -1735,10 +1736,10 @@ void CompileUnit::constructContainingTypeDIEs() {
|
||||
CE = ContainingTypeMap.end();
|
||||
CI != CE; ++CI) {
|
||||
DIE *SPDie = CI->first;
|
||||
const MDNode *N = CI->second;
|
||||
if (!N)
|
||||
DIDescriptor D(CI->second);
|
||||
if (!D)
|
||||
continue;
|
||||
DIE *NDie = getDIE(N);
|
||||
DIE *NDie = getDIE(D);
|
||||
if (!NDie)
|
||||
continue;
|
||||
addDIEEntry(SPDie, dwarf::DW_AT_containing_type, NDie);
|
||||
@ -1904,7 +1905,7 @@ void CompileUnit::constructMemberDIE(DIE &Buffer, DIDerivedType DT) {
|
||||
}
|
||||
|
||||
/// getOrCreateStaticMemberDIE - Create new DIE for C++ static member.
|
||||
DIE *CompileUnit::getOrCreateStaticMemberDIE(const DIDerivedType DT) {
|
||||
DIE *CompileUnit::getOrCreateStaticMemberDIE(DIDerivedType DT) {
|
||||
if (!DT.Verify())
|
||||
return NULL;
|
||||
|
||||
|
@ -159,7 +159,7 @@ public:
|
||||
/// when the MDNode can be part of the type system, since DIEs for
|
||||
/// the type system can be shared across CUs and the mappings are
|
||||
/// kept in DwarfDebug.
|
||||
DIE *getDIE(const MDNode *N) const;
|
||||
DIE *getDIE(DIDescriptor D) const;
|
||||
|
||||
DIEBlock *getDIEBlock() { return new (DIEValueAllocator) DIEBlock(); }
|
||||
|
||||
@ -167,7 +167,7 @@ public:
|
||||
/// when the MDNode can be part of the type system, since DIEs for
|
||||
/// the type system can be shared across CUs and the mappings are
|
||||
/// kept in DwarfDebug.
|
||||
void insertDIE(const MDNode *N, DIE *D);
|
||||
void insertDIE(DIDescriptor Desc, DIE *D);
|
||||
|
||||
/// addDie - Adds or interns the DIE to the compile unit.
|
||||
///
|
||||
|
@ -368,7 +368,7 @@ bool DwarfDebug::isSubprogramContext(const MDNode *Context) {
|
||||
// scope then create and insert DIEs for these variables.
|
||||
DIE *DwarfDebug::updateSubprogramScopeDIE(CompileUnit *SPCU,
|
||||
const MDNode *SPNode) {
|
||||
DIE *SPDie = SPCU->getDIE(SPNode);
|
||||
DIE *SPDie = SPCU->getDIE(DIDescriptor(SPNode));
|
||||
|
||||
assert(SPDie && "Unable to find subprogram DIE!");
|
||||
DISubprogram SP(SPNode);
|
||||
|
Loading…
x
Reference in New Issue
Block a user