[llvm] r176220 - Debug Info: for static member variables, always put AT_MIPS_linkage_name to the

Eric Christopher echristo at gmail.com
Wed Feb 27 15:50:58 PST 2013


Thanks! I updated the comments a bit after.

-eric


On Wed, Feb 27, 2013 at 3:21 PM, Manman Ren <mren at apple.com> wrote:

> Author: mren
> Date: Wed Feb 27 17:21:02 2013
> New Revision: 176220
>
> URL: http://llvm.org/viewvc/llvm-project?rev=176220&view=rev
> Log:
> Debug Info: for static member variables, always put AT_MIPS_linkage_name
> to the
> definition DIE (TAG_variable), and put AT_MIPS_linkage_name to TAG_member
> when
> DarwinGDBCompat is true.
>
> Darwin GDB needs AT_MIPS_linkage_name at both places to work.
>
> Follow-up patch to r176143.
> rdar://problem/13291234
>
> Modified:
>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
>     llvm/trunk/test/DebugInfo/X86/debug-info-static-member.ll
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp?rev=176220&r1=176219&r2=176220&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp Wed Feb 27
> 17:21:02 2013
> @@ -1349,12 +1349,19 @@ void CompileUnit::createGlobalVariableDI
>      // Add linkage name.
>      StringRef LinkageName = GV.getLinkageName();
>      if (!LinkageName.empty() && isGlobalVariable) {
> -      addString(VariableDIE, dwarf::DW_AT_MIPS_linkage_name,
> +      // From dwarf-4: DIE to which DW_AT_linkage_name may apply include:
> +      // TAG_commono_block, TAG_constant, TAG_entry_point, TAG_subporgram
> and
> +      // TAG_variable. For static member variables, gcc 4.7 puts
> +      // MIPS_linkage_name on the definition DIE only, but Darwin gdb
> needs
> +      // MIPS_linkage_name at both places.
> +      // Per discussion with Eric, for static member variables, we put
> +      // MIPS_linkage_name on the definition DIE (TAG_variable) and
> conditionaly
> +      // put MIPS_linkage_name on TAG_member when DarwinGDBCompat is on.
> +      addString(IsStaticMember && VariableSpecDIE ?
> +                VariableSpecDIE : 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,
> +      if (IsStaticMember && VariableSpecDIE && DD->useDarwinGDBCompat())
> +        addString(VariableDIE, dwarf::DW_AT_MIPS_linkage_name,
>                    getRealLinkageName(LinkageName));
>      }
>    } else if (const ConstantInt *CI =
>
> Modified: llvm/trunk/test/DebugInfo/X86/debug-info-static-member.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/debug-info-static-member.ll?rev=176220&r1=176219&r2=176220&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/X86/debug-info-static-member.ll (original)
> +++ llvm/trunk/test/DebugInfo/X86/debug-info-static-member.ll Wed Feb 27
> 17:21:02 2013
> @@ -1,6 +1,9 @@
>  ; RUN: llc %s -o %t -filetype=obj -O0 -mtriple=x86_64-unknown-linux-gnu
>  ; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
> -check-prefix=PRESENT
>  ; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
> -check-prefix=ABSENT
> +; RUN: llc %s -o %t -filetype=obj -O0 -mtriple=x86_64-apple-darwin
> +; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
> -check-prefix=DARWINP
> +; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
> -check-prefix=DARWINA
>  ; Verify that attributes we do want are PRESENT;
>  ; verify that attributes we don't want are ABSENT.
>  ; It's a lot easier to do this in two passes than in one.
> @@ -97,7 +100,6 @@ declare void @llvm.dbg.declare(metadata,
>  ; PRESENT:      DW_AT_external
>  ; PRESENT:      DW_AT_declaration
>  ; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (0x03)
> -; PRESENT:      DW_AT_MIPS_linkage_name {{.*}} "_ZN1C1aE"
>  ; PRESENT:      DW_TAG_member
>  ; PRESENT-NEXT: DW_AT_name {{.*}} "const_a"
>  ; PRESENT:      DW_AT_external
> @@ -107,7 +109,6 @@ declare void @llvm.dbg.declare(metadata,
>  ; PRESENT:      0x[[DECL_B:[0-9a-f]+]]: DW_TAG_member
>  ; PRESENT-NEXT: DW_AT_name {{.*}} "b"
>  ; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (0x02)
> -; PRESENT:      DW_AT_MIPS_linkage_name {{.*}} "_ZN1C1bE"
>  ; PRESENT:      DW_TAG_member
>  ; PRESENT-NEXT: DW_AT_name {{.*}} "const_b"
>  ; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (0x02)
> @@ -115,7 +116,6 @@ declare void @llvm.dbg.declare(metadata,
>  ; PRESENT:      0x[[DECL_C:[0-9a-f]+]]: DW_TAG_member
>  ; PRESENT-NEXT: DW_AT_name {{.*}} "c"
>  ; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (0x01)
> -; PRESENT:      DW_AT_MIPS_linkage_name {{.*}} "_ZN1C1cE"
>  ; PRESENT:      DW_TAG_member
>  ; PRESENT-NEXT: DW_AT_name {{.*}} "const_c"
>  ; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (0x01)
> @@ -141,6 +141,59 @@ declare void @llvm.dbg.declare(metadata,
>  ; PRESENT-NEXT: DW_AT_location
>  ; PRESENT-NEXT: DW_AT_MIPS_linkage_name {{.*}} "_ZN1C1cE"
>
> +; For Darwin gdb:
> +; DARWINP:      .debug_info contents:
> +; DARWINP:      DW_TAG_class_type
> +; DARWINP-NEXT: DW_AT_name {{.*}} "C"
> +; DARWINP:      0x[[DECL_A:[0-9a-f]+]]: DW_TAG_member
> +; DARWINP-NEXT: DW_AT_name {{.*}} "a"
> +; DARWINP:      DW_AT_external
> +; DARWINP:      DW_AT_declaration
> +; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (0x03)
> +; DARWINP:      DW_AT_MIPS_linkage_name {{.*}} "_ZN1C1aE"
> +; DARWINP:      DW_TAG_member
> +; DARWINP-NEXT: DW_AT_name {{.*}} "const_a"
> +; DARWINP:      DW_AT_external
> +; DARWINP:      DW_AT_declaration
> +; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (0x03)
> +; DARWINP:      DW_AT_const_value {{.*}} (1)
> +; DARWINP:      0x[[DECL_B:[0-9a-f]+]]: DW_TAG_member
> +; DARWINP-NEXT: DW_AT_name {{.*}} "b"
> +; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (0x02)
> +; DARWINP:      DW_AT_MIPS_linkage_name {{.*}} "_ZN1C1bE"
> +; DARWINP:      DW_TAG_member
> +; DARWINP-NEXT: DW_AT_name {{.*}} "const_b"
> +; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (0x02)
> +; DARWINP:      DW_AT_const_value {{.*}} (0x4048f5c3)
> +; DARWINP:      0x[[DECL_C:[0-9a-f]+]]: DW_TAG_member
> +; DARWINP-NEXT: DW_AT_name {{.*}} "c"
> +; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (0x01)
> +; DARWINP:      DW_AT_MIPS_linkage_name {{.*}} "_ZN1C1cE"
> +; DARWINP:      DW_TAG_member
> +; DARWINP-NEXT: DW_AT_name {{.*}} "const_c"
> +; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (0x01)
> +; DARWINP:      DW_AT_const_value {{.*}} (0x00000012)
> +; While we're here, a normal member has data_member_location and
> +; accessibility attributes.
> +; DARWINP:      DW_TAG_member
> +; DARWINP-NEXT: DW_AT_name {{.*}} "d"
> +; DARWINP:      DW_AT_data_member_location
> +; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (0x01)
> +; DARWINP:      NULL
> +; Definitions point back to their declarations, and have a location.
> +; DARWINP:      DW_TAG_variable
> +; DARWINP-NEXT: DW_AT_specification {{.*}} {0x[[DECL_A]]}
> +; DARWINP-NEXT: DW_AT_location
> +; DARWINP-NEXT: DW_AT_MIPS_linkage_name {{.*}} "_ZN1C1aE"
> +; DARWINP:      DW_TAG_variable
> +; DARWINP-NEXT: DW_AT_specification {{.*}} {0x[[DECL_B]]}
> +; DARWINP-NEXT: DW_AT_location
> +; DARWINP-NEXT: DW_AT_MIPS_linkage_name {{.*}} "_ZN1C1bE"
> +; DARWINP:      DW_TAG_variable
> +; DARWINP-NEXT: DW_AT_specification {{.*}} {0x[[DECL_C]]}
> +; DARWINP-NEXT: DW_AT_location
> +; DARWINP-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
>  ; have DW_AT_const_value and constants do not have
> DW_AT_MIPS_linkage_name.
> @@ -172,3 +225,32 @@ declare void @llvm.dbg.declare(metadata,
>  ; ABSENT-NOT:  DW_AT_const_value
>  ; ABSENT-NOT:  DW_AT_location
>  ; ABSENT:      NULL
> +
> +; For Darwin gdb:
> +; DARWINA:      .debug_info contents:
> +; DARWINA:      DW_TAG_member
> +; DARWINA:      DW_AT_name {{.*}} "a"
> +; DARWINA-NOT:  DW_AT_const_value
> +; DARWINA-NOT:  location
> +; DARWINA:      DW_AT_name {{.*}} "const_a"
> +; DARWINA-NOT:  DW_AT_MIPS_linkage_name
> +; DARWINA-NOT:  location
> +; DARWINA:      DW_AT_name {{.*}} "b"
> +; DARWINA-NOT:  DW_AT_const_value
> +; DARWINA-NOT:  location
> +; DARWINA:      DW_AT_name {{.*}} "const_b"
> +; DARWINA-NOT:  DW_AT_MIPS_linkage_name
> +; DARWINA-NOT:  location
> +; DARWINA:      DW_AT_name {{.*}} "c"
> +; DARWINA-NOT:  DW_AT_const_value
> +; DARWINA-NOT:  location
> +; DARWINA:      DW_AT_name {{.*}} "const_c"
> +; DARWINA-NOT:  DW_AT_MIPS_linkage_name
> +; DARWINA-NOT:  location
> +; While we're here, a normal member does not have a linkage name, constant
> +; value, or DW_AT_location.
> +; DARWINA:      DW_AT_name {{.*}} "d"
> +; DARWINA-NOT:  DW_AT_MIPS_linkage_name
> +; DARWINA-NOT:  DW_AT_const_value
> +; DARWINA-NOT:  DW_AT_location
> +; DARWINA:      NULL
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130227/97febaf0/attachment.html>


More information about the llvm-commits mailing list