diff options
author | Manman Ren <mren@apple.com> | 2013-02-27 00:02:32 +0000 |
---|---|---|
committer | Manman Ren <mren@apple.com> | 2013-02-27 00:02:32 +0000 |
commit | 06df83c25a7b07b3a19a40bd680c0a205bcc0b9a (patch) | |
tree | 5501f6eea0c939697703be881f69ba178516d2fd | |
parent | b3201c5cf1e183d840f7c99ff779d57f1549d8e5 (diff) | |
download | external_llvm-06df83c25a7b07b3a19a40bd680c0a205bcc0b9a.zip external_llvm-06df83c25a7b07b3a19a40bd680c0a205bcc0b9a.tar.gz external_llvm-06df83c25a7b07b3a19a40bd680c0a205bcc0b9a.tar.bz2 |
Debug Info: for static member variables, add AT_MIPS_linkage_name to the
definition DIE, to make old GDB happy.
We have a regression for old GDB when Clang uses DW_TAG_member to declare
static members inside a class, instead of DW_TAG_variable. This patch will fix
this regression.
rdar://problem/13291234
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176143 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp | 8 | ||||
-rw-r--r-- | test/DebugInfo/X86/debug-info-static-member.ll | 3 |
2 files changed, 10 insertions, 1 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp index 93b00fb..59e433b 100644 --- a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp @@ -1348,9 +1348,15 @@ void CompileUnit::createGlobalVariableDIE(const MDNode *N) { } // Add linkage name. StringRef LinkageName = GV.getLinkageName(); - if (!LinkageName.empty() && isGlobalVariable) + if (!LinkageName.empty() && isGlobalVariable) { addString(VariableDIE, dwarf::DW_AT_MIPS_linkage_name, getRealLinkageName(LinkageName)); + // To make old GDB happy, for static member variables, we add + // AT_MIPS_linkage_name to the definition DIE as well. + if (IsStaticMember && VariableSpecDIE) + addString(VariableSpecDIE, dwarf::DW_AT_MIPS_linkage_name, + getRealLinkageName(LinkageName)); + } } else if (const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(GV.getConstant())) { // AT_const_value was added when the static memeber was created. To avoid diff --git a/test/DebugInfo/X86/debug-info-static-member.ll b/test/DebugInfo/X86/debug-info-static-member.ll index d7a6578..2285079 100644 --- a/test/DebugInfo/X86/debug-info-static-member.ll +++ b/test/DebugInfo/X86/debug-info-static-member.ll @@ -131,12 +131,15 @@ declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone ; PRESENT: DW_TAG_variable ; PRESENT-NEXT: DW_AT_specification {{.*}} {0x[[DECL_A]]} ; PRESENT-NEXT: DW_AT_location +; PRESENT-NEXT: DW_AT_MIPS_linkage_name {{.*}} "_ZN1C1aE" ; PRESENT: DW_TAG_variable ; PRESENT-NEXT: DW_AT_specification {{.*}} {0x[[DECL_B]]} ; PRESENT-NEXT: DW_AT_location +; PRESENT-NEXT: DW_AT_MIPS_linkage_name {{.*}} "_ZN1C1bE" ; PRESENT: DW_TAG_variable ; PRESENT-NEXT: DW_AT_specification {{.*}} {0x[[DECL_C]]} ; PRESENT-NEXT: DW_AT_location +; PRESENT-NEXT: DW_AT_MIPS_linkage_name {{.*}} "_ZN1C1cE" ; ABSENT verifies that static member declarations do not have either ; DW_AT_location or DW_AT_data_member_location; also, variables do not |