1
0
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:
Devang Patel 2011-05-04 16:34:02 +00:00
parent 586612a764
commit a6e69a5541

View File

@ -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);