mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-05 10:39:21 +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 llvm-svn: 176143
This commit is contained in:
parent
149b81ab7e
commit
1d8fd8cd0b
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user