[PATCH] D70696: [DebugInfo] Support to emit debugInfo for extern variables
Jaydeep Chauhan via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Dec 9 04:13:55 PST 2019
Jac1494 added a comment.
For some real life case like below we need debuginfo for declaration of global extern variable .
$cat shlib.c
int var;
int test()
{ return var++; }
$cat test
extern int test();
extern int var;
int main()
{ var++; printf("%d\n",test()); }
If we debug above case with gdb it is not giving types of variable var.
Because of no variable DIE is there in executable.
(gdb) b main
Breakpoint 1 at 0x40063c: file test.c, line 5.
(gdb) pt var
type = <data variable, no debug info>
To add variable debuginfo we need to merge below patch in code.
diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h
index 9a3bb98..df79d46 100644
- a/clang/include/clang/Basic/TargetInfo.h
+++ b/clang/include/clang/Basic/TargetInfo.h
@@ -1371,6 +1371,9 @@ public:
virtual void setAuxTarget(const TargetInfo *Aux) {}
+ /// Whether target allows debuginfo types for decl only variables.
+ virtual bool allowDebugInfoForExternalVar() const { return true; }
+
protected:
/// Copy type and layout related info.
void copyAuxTarget(const TargetInfo *Aux);
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
index a61c98e..92245c0 100644
- a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
@@ -158,7 +158,11 @@ DIE *DwarfCompileUnit::getOrCreateGlobalVariableDIE(
if (!GV->isDefinition())
addFlag(*VariableDIE, dwarf::DW_AT_declaration);
else
+ {
+ /*Added location */
+ addLocationAttribute(VariableDIE, GV, GlobalExprs);
addGlobalName(GV->getName(), *VariableDIE, DeclContext);
+ }
if (uint32_t AlignInBytes = GV->getAlignInBytes())
addUInt(*VariableDIE, dwarf::DW_AT_alignment, dwarf::DW_FORM_udata,
@@ -167,9 +171,6 @@ DIE *DwarfCompileUnit::getOrCreateGlobalVariableDIE(
if (MDTuple *TP = GV->getTemplateParams())
addTemplateParams(*VariableDIE, DINodeArray(TP));
- // Add location.
- addLocationAttribute(VariableDIE, GV, GlobalExprs); - return VariableDIE; }
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D70696/new/
https://reviews.llvm.org/D70696
More information about the cfe-commits
mailing list