mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
Tighten up check for empty (i.e. no meaningful debug info) module. This fixes dwarf-die2.c test case from gcc test suite.
llvm-svn: 130842
This commit is contained in:
parent
586612a764
commit
a6e69a5541
@ -1113,32 +1113,35 @@ void DwarfDebug::beginModule(Module *M) {
|
||||
if (DisableDebugInfoPrinting)
|
||||
return;
|
||||
|
||||
bool HasDebugInfo = false;
|
||||
|
||||
// If module has named metadata anchors then use them, otherwise scan the module
|
||||
// using debug info finder to collect debug info.
|
||||
NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
|
||||
if (CU_Nodes) {
|
||||
for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
|
||||
HasDebugInfo = true;
|
||||
constructCompileUnit(CU_Nodes->getOperand(i));
|
||||
}
|
||||
if (!HasDebugInfo)
|
||||
|
||||
NamedMDNode *GV_Nodes = M->getNamedMetadata("llvm.dbg.gv");
|
||||
NamedMDNode *SP_Nodes = M->getNamedMetadata("llvm.dbg.sp");
|
||||
if (!GV_Nodes && !SP_Nodes)
|
||||
// If there are not any global variables or any functions then
|
||||
// there is not any debug info in this module.
|
||||
return;
|
||||
|
||||
if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.gv"))
|
||||
for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i)
|
||||
constructGlobalVariableDIE(NMD->getOperand(i));
|
||||
for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i)
|
||||
constructCompileUnit(CU_Nodes->getOperand(i));
|
||||
|
||||
if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.sp"))
|
||||
for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i)
|
||||
constructSubprogramDIE(NMD->getOperand(i));
|
||||
if (GV_Nodes)
|
||||
for (unsigned i = 0, e = GV_Nodes->getNumOperands(); i != e; ++i)
|
||||
constructGlobalVariableDIE(GV_Nodes->getOperand(i));
|
||||
|
||||
if (SP_Nodes)
|
||||
for (unsigned i = 0, e = SP_Nodes->getNumOperands(); i != e; ++i)
|
||||
constructSubprogramDIE(SP_Nodes->getOperand(i));
|
||||
|
||||
} else {
|
||||
|
||||
DebugInfoFinder DbgFinder;
|
||||
DbgFinder.processModule(*M);
|
||||
|
||||
bool HasDebugInfo = false;
|
||||
// Scan all the compile-units to see if there are any marked as the main unit.
|
||||
// if not, we do not generate debug info.
|
||||
for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
|
||||
@ -1148,6 +1151,7 @@ void DwarfDebug::beginModule(Module *M) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!HasDebugInfo) return;
|
||||
|
||||
// Create all the compile unit DIEs.
|
||||
for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
|
||||
@ -1165,8 +1169,6 @@ void DwarfDebug::beginModule(Module *M) {
|
||||
constructSubprogramDIE(*I);
|
||||
}
|
||||
|
||||
if (!HasDebugInfo) return;
|
||||
|
||||
// Tell MMI that we have debug info.
|
||||
MMI->setDebugInfoAvailability(true);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user