mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-05-21 12:38:45 +00:00
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
This commit is contained in:
parent
b3201c5cf1
commit
06df83c25a
@ -1348,9 +1348,15 @@ void CompileUnit::createGlobalVariableDIE(const MDNode *N) {
|
|||||||
}
|
}
|
||||||
// Add linkage name.
|
// Add linkage name.
|
||||||
StringRef LinkageName = GV.getLinkageName();
|
StringRef LinkageName = GV.getLinkageName();
|
||||||
if (!LinkageName.empty() && isGlobalVariable)
|
if (!LinkageName.empty() && isGlobalVariable) {
|
||||||
addString(VariableDIE, dwarf::DW_AT_MIPS_linkage_name,
|
addString(VariableDIE, dwarf::DW_AT_MIPS_linkage_name,
|
||||||
getRealLinkageName(LinkageName));
|
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 =
|
} else if (const ConstantInt *CI =
|
||||||
dyn_cast_or_null<ConstantInt>(GV.getConstant())) {
|
dyn_cast_or_null<ConstantInt>(GV.getConstant())) {
|
||||||
// AT_const_value was added when the static memeber was created. To avoid
|
// AT_const_value was added when the static memeber was created. To avoid
|
||||||
|
@ -131,12 +131,15 @@ declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone
|
|||||||
; PRESENT: DW_TAG_variable
|
; PRESENT: DW_TAG_variable
|
||||||
; PRESENT-NEXT: DW_AT_specification {{.*}} {0x[[DECL_A]]}
|
; PRESENT-NEXT: DW_AT_specification {{.*}} {0x[[DECL_A]]}
|
||||||
; PRESENT-NEXT: DW_AT_location
|
; PRESENT-NEXT: DW_AT_location
|
||||||
|
; PRESENT-NEXT: DW_AT_MIPS_linkage_name {{.*}} "_ZN1C1aE"
|
||||||
; PRESENT: DW_TAG_variable
|
; PRESENT: DW_TAG_variable
|
||||||
; PRESENT-NEXT: DW_AT_specification {{.*}} {0x[[DECL_B]]}
|
; PRESENT-NEXT: DW_AT_specification {{.*}} {0x[[DECL_B]]}
|
||||||
; PRESENT-NEXT: DW_AT_location
|
; PRESENT-NEXT: DW_AT_location
|
||||||
|
; PRESENT-NEXT: DW_AT_MIPS_linkage_name {{.*}} "_ZN1C1bE"
|
||||||
; PRESENT: DW_TAG_variable
|
; PRESENT: DW_TAG_variable
|
||||||
; PRESENT-NEXT: DW_AT_specification {{.*}} {0x[[DECL_C]]}
|
; PRESENT-NEXT: DW_AT_specification {{.*}} {0x[[DECL_C]]}
|
||||||
; PRESENT-NEXT: DW_AT_location
|
; PRESENT-NEXT: DW_AT_location
|
||||||
|
; PRESENT-NEXT: DW_AT_MIPS_linkage_name {{.*}} "_ZN1C1cE"
|
||||||
|
|
||||||
; ABSENT verifies that static member declarations do not have either
|
; ABSENT verifies that static member declarations do not have either
|
||||||
; DW_AT_location or DW_AT_data_member_location; also, variables do not
|
; DW_AT_location or DW_AT_data_member_location; also, variables do not
|
||||||
|
Loading…
x
Reference in New Issue
Block a user