diff options
author | Manman Ren <manman.ren@gmail.com> | 2013-10-29 00:58:04 +0000 |
---|---|---|
committer | Manman Ren <manman.ren@gmail.com> | 2013-10-29 00:58:04 +0000 |
commit | bbdd02cc303d0f38f7739b64f419d645ca17b533 (patch) | |
tree | ca555cce9d2cf9433d337eded22ab6467f726ac7 | |
parent | 1a5e787f701c45ac2487d400faf6f6d4def6dcef (diff) | |
download | external_llvm-bbdd02cc303d0f38f7739b64f419d645ca17b533.zip external_llvm-bbdd02cc303d0f38f7739b64f419d645ca17b533.tar.gz external_llvm-bbdd02cc303d0f38f7739b64f419d645ca17b533.tar.bz2 |
Debug Info: use createAndAddDIE for newly-created Subprogram DIEs.
More patches will be submitted to convert "new DIE(" to use createAddAndDIE in
DwarfCompileUnit.cpp. This will simplify implementation of addDIEEntry where
we have to decide between ref4 and ref_addr, because DIEs that can be shared
across CU will be added to a CU already.
Reviewed off-list by Eric.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193567 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp | 14 | ||||
-rw-r--r-- | test/DebugInfo/X86/DW_AT_object_pointer.ll | 2 | ||||
-rw-r--r-- | test/DebugInfo/X86/DW_AT_specification.ll | 6 | ||||
-rw-r--r-- | test/DebugInfo/X86/elf-names.ll | 13 | ||||
-rw-r--r-- | test/DebugInfo/X86/pr11300.ll | 7 | ||||
-rw-r--r-- | test/DebugInfo/X86/template.ll | 8 |
6 files changed, 27 insertions, 23 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp index f58bddf..8528ab7 100644 --- a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp @@ -1356,12 +1356,14 @@ DIE *CompileUnit::getOrCreateSubprogramDIE(DISubprogram SP) { if (SPDie) return SPDie; - SPDie = new DIE(dwarf::DW_TAG_subprogram); + DISubprogram SPDecl = SP.getFunctionDeclaration(); + if (SPDecl.isSubprogram()) + // Add subprogram definitions to the CU die directly. + ContextDIE = CUDie.get(); // DW_TAG_inlined_subroutine may refer to this DIE. - insertDIE(SP, SPDie); + SPDie = createAndAddDIE(dwarf::DW_TAG_subprogram, *ContextDIE, SP); - DISubprogram SPDecl = SP.getFunctionDeclaration(); DIE *DeclDie = NULL; if (SPDecl.isSubprogram()) DeclDie = getOrCreateSubprogramDIE(SPDecl); @@ -1375,15 +1377,9 @@ DIE *CompileUnit::getOrCreateSubprogramDIE(DISubprogram SP) { // Refer function declaration directly. addDIEEntry(SPDie, dwarf::DW_AT_specification, DeclDie); - // Add subprogram definitions to the CU die directly. - addDie(SPDie); - return SPDie; } - // Add to context owner. - ContextDIE->addChild(SPDie); - // Add the linkage name if we have one. StringRef LinkageName = SP.getLinkageName(); if (!LinkageName.empty()) diff --git a/test/DebugInfo/X86/DW_AT_object_pointer.ll b/test/DebugInfo/X86/DW_AT_object_pointer.ll index 2bfc4c5..f7533d4 100644 --- a/test/DebugInfo/X86/DW_AT_object_pointer.ll +++ b/test/DebugInfo/X86/DW_AT_object_pointer.ll @@ -6,7 +6,7 @@ ; CHECK: DW_TAG ; CHECK: DW_TAG_class_type ; CHECK: DW_AT_object_pointer [DW_FORM_ref4] (cu + 0x{{[0-9a-f]*}} => {[[PARAM:0x[0-9a-f]*]]}) -; CHECK: [[PARAM]]: DW_TAG_formal_parameter [13] +; CHECK: [[PARAM]]: DW_TAG_formal_parameter ; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "this") %class.A = type { i32 } diff --git a/test/DebugInfo/X86/DW_AT_specification.ll b/test/DebugInfo/X86/DW_AT_specification.ll index f36e8ee..301a970 100644 --- a/test/DebugInfo/X86/DW_AT_specification.ll +++ b/test/DebugInfo/X86/DW_AT_specification.ll @@ -3,8 +3,10 @@ ; test that the DW_AT_specification is a back edge in the file. -; CHECK: 0x0000[[OFFSET:[0-9a-f]*]]: DW_TAG_subprogram [7] * -; CHECK: DW_AT_specification [DW_FORM_ref4] (cu + 0x[[OFFSET]] => {0x0000[[OFFSET]]}) +; CHECK: DW_TAG_subprogram [{{[0-9]+}}] * +; CHECK: DW_AT_specification [DW_FORM_ref4] (cu + 0x[[OFFSET:[0-9a-f]*]] => {0x0000[[OFFSET]]}) +; CHECK: 0x0000[[OFFSET]]: DW_TAG_subprogram [{{[0-9]+}}] * +; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "bar") @_ZZN3foo3barEvE1x = constant i32 0, align 4 diff --git a/test/DebugInfo/X86/elf-names.ll b/test/DebugInfo/X86/elf-names.ll index b85f5fb..9653815 100644 --- a/test/DebugInfo/X86/elf-names.ll +++ b/test/DebugInfo/X86/elf-names.ll @@ -4,11 +4,14 @@ ; CHECK: 0x0000000b: DW_TAG_compile_unit ; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000035] = "foo.cpp") -; CHECK: 0x0000003c: DW_TAG_class_type -; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000006d] = "D") -; CHECK: 0x00000044: DW_TAG_member -; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000005d] = "c1") -; CHECK: DW_AT_artificial [DW_FORM_flag_present] (true) +; CHECK: 0x{{[0-9a-f]+}}: DW_TAG_class_type +; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]+}}] = "D") +; CHECK: 0x{{[0-9a-f]+}}: DW_TAG_member +; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]+}}] = "c1") +; CHECK: DW_TAG_subprogram +; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]+}}] = "D") +; CHECK: DW_TAG_formal_parameter +; CHECK: DW_AT_artificial [DW_FORM_flag_present] (true) ; CHECK-DIS: [artificial] diff --git a/test/DebugInfo/X86/pr11300.ll b/test/DebugInfo/X86/pr11300.ll index cdd5a74..e2ccf68 100644 --- a/test/DebugInfo/X86/pr11300.ll +++ b/test/DebugInfo/X86/pr11300.ll @@ -3,8 +3,11 @@ ; test that the DW_AT_specification is a back edge in the file. -; CHECK: [[BACK:0x[0-9a-f]*]]: DW_TAG_subprogram [6] -; CHECK: DW_AT_specification [DW_FORM_ref4] (cu + {{.*}} => {[[BACK]]}) +; CHECK: DW_TAG_subprogram +; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "zed") +; CHECK: DW_TAG_subprogram +; CHECK-NEXT: DW_AT_specification [DW_FORM_ref4] (cu + {{.*}} => {[[BACK:0x[0-9a-f]*]]}) +; CHECK: [[BACK]]: DW_TAG_subprogram %struct.foo = type { i8 } diff --git a/test/DebugInfo/X86/template.ll b/test/DebugInfo/X86/template.ll index 2cf52e3..606d8b4 100644 --- a/test/DebugInfo/X86/template.ll +++ b/test/DebugInfo/X86/template.ll @@ -17,9 +17,6 @@ ; CHECK-NOT: NULL ; CHECK: DW_TAG_template_type_parameter -; CHECK: [[INTPTR:0x[0-9a-f]*]]:{{ *}}DW_TAG_pointer_type -; CHECK-NEXT: DW_AT_type{{.*}} => {[[INT]]} - ; CHECK: DW_AT_name{{.*}}"func<3, &glbl, y_impl, 1, 2>" ; CHECK-NOT: NULL ; CHECK: DW_TAG_template_value_parameter @@ -33,7 +30,7 @@ ; CHECK-NEXT: DW_AT_const_value [DW_FORM_sdata]{{.*}}(3) ; CHECK: DW_TAG_template_value_parameter -; CHECK-NEXT: DW_AT_type{{.*}}=> {[[INTPTR]]} +; CHECK-NEXT: DW_AT_type{{.*}}=> {[[INTPTR:0x[0-9a-f]*]]} ; The address of the global 'glbl', followed by DW_OP_stack_value (9f), to use ; the value immediately, rather than indirecting through the address. @@ -56,6 +53,9 @@ ; CHECK-NEXT: DW_AT_type{{.*}}=> {[[INT]]} ; CHECK-NEXT: DW_AT_const_value [DW_FORM_sdata]{{.*}}(2) +; CHECK: [[INTPTR]]:{{ *}}DW_TAG_pointer_type +; CHECK-NEXT: DW_AT_type{{.*}} => {[[INT]]} + %"struct.y_impl<int>::nested" = type { i8 } @glbl = global i32 0, align 4 |