mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-04 21:31:03 +00:00
Change DwarfCompileUnit::createGlobalVariable to getOrCreateGlobalVariable.
Summary: This will allow to request the creation of a forward delacred variable at is point of use (for imported declarations, this will be DwarfDebug::constructImportedEntityDIE) rather than having to put the forward decl in a retention list. Note that getOrCreateGlobalVariable returns the actual definition DIE when the routine creates a declaration and a definition DIE. If you agree this is the right behavior, then I'll have a followup patch that registers the definition in the DIE map instead of the declaration as it is today (this 'breaks' only one test, where we test that the imported entity is the declaration). I'm not sure what's best here, but it's easy enough for a consumer to follow the DW_AT_specification link to get to the declaration, whereas it takes more work to find the actual definition from a declaration DIE. Reviewers: echristo, dblaikie, aprantl Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D5381 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218126 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b9f4e7d6e9
commit
f5938eeeb3
@ -783,7 +783,7 @@ void DwarfDebug::beginModule() {
|
||||
ScopesWithImportedEntities.end(), less_first());
|
||||
DIArray GVs = CUNode.getGlobalVariables();
|
||||
for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i)
|
||||
CU.createGlobalVariableDIE(DIGlobalVariable(GVs.getElement(i)));
|
||||
CU.getOrCreateGlobalVariableDIE(DIGlobalVariable(GVs.getElement(i)));
|
||||
DIArray SPs = CUNode.getSubprograms();
|
||||
for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
|
||||
SPMap.insert(std::make_pair(SPs.getElement(i), &CU));
|
||||
|
@ -1596,11 +1596,11 @@ static const ConstantExpr *getMergedGlobalExpr(const Value *V) {
|
||||
return CE;
|
||||
}
|
||||
|
||||
/// createGlobalVariableDIE - create global variable DIE.
|
||||
void DwarfCompileUnit::createGlobalVariableDIE(DIGlobalVariable GV) {
|
||||
/// getOrCreateGlobalVariableDIE - get or create global variable DIE.
|
||||
DIE *DwarfCompileUnit::getOrCreateGlobalVariableDIE(DIGlobalVariable GV) {
|
||||
// Check for pre-existence.
|
||||
if (getDIE(GV))
|
||||
return;
|
||||
if (DIE *Die = getDIE(GV))
|
||||
return Die;
|
||||
|
||||
assert(GV.isGlobalVariable());
|
||||
|
||||
@ -1725,18 +1725,19 @@ void DwarfCompileUnit::createGlobalVariableDIE(DIGlobalVariable GV) {
|
||||
addBlock(*VariableDIE, dwarf::DW_AT_location, Loc);
|
||||
}
|
||||
|
||||
DIE *ResultDIE = VariableSpecDIE ? VariableSpecDIE : VariableDIE;
|
||||
|
||||
if (addToAccelTable) {
|
||||
DIE &AddrDIE = VariableSpecDIE ? *VariableSpecDIE : *VariableDIE;
|
||||
DD->addAccelName(GV.getName(), AddrDIE);
|
||||
DD->addAccelName(GV.getName(), *ResultDIE);
|
||||
|
||||
// If the linkage name is different than the name, go ahead and output
|
||||
// that as well into the name table.
|
||||
if (GV.getLinkageName() != "" && GV.getName() != GV.getLinkageName())
|
||||
DD->addAccelName(GV.getLinkageName(), AddrDIE);
|
||||
DD->addAccelName(GV.getLinkageName(), *ResultDIE);
|
||||
}
|
||||
|
||||
addGlobalName(GV.getName(), VariableSpecDIE ? *VariableSpecDIE : *VariableDIE,
|
||||
GV.getContext());
|
||||
addGlobalName(GV.getName(), *ResultDIE, GV.getContext());
|
||||
return ResultDIE;
|
||||
}
|
||||
|
||||
/// constructSubrangeDIE - Construct subrange DIE from DISubrange.
|
||||
|
@ -536,8 +536,8 @@ public:
|
||||
/// Apply the DW_AT_stmt_list from this compile unit to the specified DIE.
|
||||
void applyStmtList(DIE &D);
|
||||
|
||||
/// createGlobalVariableDIE - create global variable DIE.
|
||||
void createGlobalVariableDIE(DIGlobalVariable GV);
|
||||
/// getOrCreateGlobalVariableDIE - get or create global variable DIE.
|
||||
DIE *getOrCreateGlobalVariableDIE(DIGlobalVariable GV);
|
||||
|
||||
/// addLabelAddress - Add a dwarf label attribute data and value using
|
||||
/// either DW_FORM_addr or DW_FORM_GNU_addr_index.
|
||||
|
Loading…
x
Reference in New Issue
Block a user