summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2009-02-24 00:02:15 +0000
committerDevang Patel <dpatel@apple.com>2009-02-24 00:02:15 +0000
commit53cac18cca61265304056de670cea39870f28315 (patch)
tree270d5c95feeef26f5f13ff75ab27167c868e7aa3 /lib
parent15cab2817b8f63fec0148609278bc2c1e05abb50 (diff)
downloadllvm-53cac18cca61265304056de670cea39870f28315.tar.gz
llvm-53cac18cca61265304056de670cea39870f28315.tar.bz2
llvm-53cac18cca61265304056de670cea39870f28315.tar.xz
If there is not any debug info available for any global variables and any subprograms then there is not any debug info to emit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@65352 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfWriter.cpp39
1 files changed, 26 insertions, 13 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
index 2a5916b7cd..6121d4bfa6 100644
--- a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
@@ -2826,11 +2826,13 @@ private:
}
/// ConstructGlobalVariableDIEs - Create DIEs for each of the externally
- /// visible global variables.
- void ConstructGlobalVariableDIEs() {
+ /// visible global variables. Return true if at least one global DIE is
+ /// created.
+ bool ConstructGlobalVariableDIEs() {
std::string GVName = "llvm.dbg.global_variables";
std::vector<GlobalVariable*> Result;
getGlobalVariablesUsing(*M, GVName, Result);
+ bool result = false;
for (std::vector<GlobalVariable *>::iterator GVI = Result.begin(),
GVE = Result.end(); GVI != GVE; ++GVI) {
DIGlobalVariable DI_GV(*GVI);
@@ -2853,22 +2855,24 @@ private:
//Add to map.
Slot = VariableDie;
-
//Add to context owner.
DW_Unit->getDie()->AddChild(VariableDie);
-
//Expose as global. FIXME - need to check external flag.
DW_Unit->AddGlobal(DI_GV.getName(), VariableDie);
+
+ if (!result)
+ result = true;
}
+ return result;
}
/// ConstructSubprograms - Create DIEs for each of the externally visible
- /// subprograms.
- void ConstructSubprograms() {
-
+ /// subprograms. Return true if at least one subprogram DIE is created.
+ bool ConstructSubprograms() {
std::string SPName = "llvm.dbg.subprograms";
std::vector<GlobalVariable*> Result;
getGlobalVariablesUsing(*M, SPName, Result);
+ bool result = false;
for (std::vector<GlobalVariable *>::iterator RI = Result.begin(),
RE = Result.end(); RI != RE; ++RI) {
@@ -2894,7 +2898,11 @@ private:
Unit->getDie()->AddChild(SubprogramDie);
//Expose as global.
Unit->AddGlobal(SP.getName(), SubprogramDie);
+
+ if (!result)
+ result = true;
}
+ return result;
}
public:
@@ -2930,15 +2938,20 @@ public:
if (DW_CUs.empty())
return;
- MMI = mmi;
- shouldEmit = true;
- MMI->setDebugInfoAvailability(true);
-
// Create DIEs for each of the externally visible global variables.
- ConstructGlobalVariableDIEs();
+ bool globalDIEs = ConstructGlobalVariableDIEs();
// Create DIEs for each of the externally visible subprograms.
- ConstructSubprograms();
+ bool subprogramDIEs = ConstructSubprograms();
+
+ // If there is not any debug info available for any global variables
+ // and any subprograms then there is not any debug info to emit.
+ if (!globalDIEs && !subprogramDIEs)
+ return;
+
+ MMI = mmi;
+ shouldEmit = true;
+ MMI->setDebugInfoAvailability(true);
// Prime section data.
SectionMap.insert(TAI->getTextSection());