aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2009-10-08 18:48:03 +0000
committerDevang Patel <dpatel@apple.com>2009-10-08 18:48:03 +0000
commiteda312193dfc56cb9a5d1d3e7cf3c89dce07124a (patch)
treeff460699e26a458c56c6f572caca32aca8ca2470
parentbfa19bf4c2f0d7ac6f69b801abf51adbddc16454 (diff)
Do not record line number to implicitly mark start of function if function has arguments. Extra line number entries trip gdb in some cases.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83563 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfDebug.cpp33
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfDebug.h2
2 files changed, 23 insertions, 12 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index 5b3f3cee39..1ea148e549 100644
--- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -1782,17 +1782,23 @@ void DwarfDebug::EndModule() {
}
/// CollectVariableInfo - Populate DbgScope entries with variables' info.
-void DwarfDebug::CollectVariableInfo() {
- if (!MMI) return;
+bool DwarfDebug::CollectVariableInfo() {
+ if (!MMI) return false;
+ bool ArgsCollected = false;
MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
VE = VMap.end(); VI != VE; ++VI) {
MDNode *Var = VI->first;
+ DIVariable DV (Var);
+ if (DV.isNull()) continue;
+ if (DV.getTag() == dwarf::DW_TAG_arg_variable)
+ ArgsCollected = true;
DILocation VLoc(VI->second.first);
unsigned VSlot = VI->second.second;
DbgScope *Scope = getDbgScope(VLoc.getScope().getNode(), NULL);
- Scope->AddVariable(new DbgVariable(DIVariable(Var), VSlot, false));
+ Scope->AddVariable(new DbgVariable(DV, VSlot, false));
}
+ return ArgsCollected;
}
/// SetDbgScopeBeginLabels - Update DbgScope begin labels for the scopes that
@@ -1903,7 +1909,7 @@ void DwarfDebug::BeginFunction(MachineFunction *MF) {
#ifdef ATTACH_DEBUG_INFO_TO_AN_INSN
if (!ExtractScopeInformation(MF))
return;
- CollectVariableInfo();
+ bool ArgsCollected = CollectVariableInfo();
#endif
// Begin accumulating function debug information.
@@ -1914,14 +1920,19 @@ void DwarfDebug::BeginFunction(MachineFunction *MF) {
// Emit label for the implicitly defined dbg.stoppoint at the start of the
// function.
- DebugLoc FDL = MF->getDefaultDebugLoc();
- if (!FDL.isUnknown()) {
- DebugLocTuple DLT = MF->getDebugLocTuple(FDL);
- unsigned LabelID = RecordSourceLine(DLT.Line, DLT.Col, DLT.CompileUnit);
- Asm->printLabel(LabelID);
- O << '\n';
+#ifdef ATTACH_DEBUG_INFO_TO_AN_INSN
+ if (!ArgsCollected) {
+#else
+ if (1) {
+#endif
+ DebugLoc FDL = MF->getDefaultDebugLoc();
+ if (!FDL.isUnknown()) {
+ DebugLocTuple DLT = MF->getDebugLocTuple(FDL);
+ unsigned LabelID = RecordSourceLine(DLT.Line, DLT.Col, DLT.CompileUnit);
+ Asm->printLabel(LabelID);
+ O << '\n';
+ }
}
-
if (TimePassesIsEnabled)
DebugTimer->stopTimer();
}
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h
index bd377c5593..7e2f6be837 100644
--- a/lib/CodeGen/AsmPrinter/DwarfDebug.h
+++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h
@@ -556,7 +556,7 @@ public:
bool ExtractScopeInformation(MachineFunction *MF);
/// CollectVariableInfo - Populate DbgScope entries with variables' info.
- void CollectVariableInfo();
+ bool CollectVariableInfo();
/// SetDbgScopeBeginLabels - Update DbgScope begin labels for the scopes that
/// start with this machine instruction.