From c23b933d5f8be9b51a1d22e717c0311f65f87dcd Mon Sep 17 00:00:00 2001 From: Eric Christopher Date: Fri, 27 Jul 2012 22:00:05 +0000 Subject: Add a DW_AT_high_pc for CUs that are a single address range. Update all tests accordingly. Fixes PR13351. Patch by shinichiro hamaji! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160899 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/DebugInfo/X86/DW_AT_specification.ll | 4 ++-- test/DebugInfo/X86/DW_TAG_friend.ll | 8 ++++---- test/DebugInfo/X86/block-capture.ll | 8 ++++---- test/DebugInfo/X86/concrete_out_of_line.ll | 6 +++--- test/DebugInfo/X86/enum-class.ll | 4 ++-- test/DebugInfo/X86/low-high-pc-cu.ll | 32 ++++++++++++++++++++++++++++++ test/DebugInfo/X86/low-pc-cu.ll | 31 ----------------------------- test/DebugInfo/X86/non-text-cu.ll | 23 +++++++++++++++++++++ test/DebugInfo/X86/objc-fwd-decl.ll | 6 +++--- test/DebugInfo/X86/pr11300.ll | 4 ++-- test/DebugInfo/X86/stringpool.ll | 4 ++-- 11 files changed, 77 insertions(+), 53 deletions(-) create mode 100644 test/DebugInfo/X86/low-high-pc-cu.ll delete mode 100644 test/DebugInfo/X86/low-pc-cu.ll create mode 100644 test/DebugInfo/X86/non-text-cu.ll (limited to 'test') diff --git a/test/DebugInfo/X86/DW_AT_specification.ll b/test/DebugInfo/X86/DW_AT_specification.ll index 078b740a41..5df4f2a5c7 100644 --- a/test/DebugInfo/X86/DW_AT_specification.ll +++ b/test/DebugInfo/X86/DW_AT_specification.ll @@ -3,8 +3,8 @@ ; test that the DW_AT_specification is a back edge in the file. -; CHECK: 0x0000003a: DW_TAG_subprogram [5] * -; CHECK: 0x00000060: DW_AT_specification [DW_FORM_ref4] (cu + 0x003a => {0x0000003a}) +; CHECK: 0x00000042: DW_TAG_subprogram [5] * +; CHECK: 0x00000068: DW_AT_specification [DW_FORM_ref4] (cu + 0x0042 => {0x00000042}) @_ZZN3foo3barEvE1x = constant i32 0, align 4 diff --git a/test/DebugInfo/X86/DW_TAG_friend.ll b/test/DebugInfo/X86/DW_TAG_friend.ll index a0dcec32e6..c35dcd294f 100644 --- a/test/DebugInfo/X86/DW_TAG_friend.ll +++ b/test/DebugInfo/X86/DW_TAG_friend.ll @@ -3,10 +3,10 @@ ; Check that the friend tag is there and is followed by a DW_AT_friend that has a reference back. -; CHECK: 0x00000032: DW_TAG_class_type [4] -; CHECK: 0x00000077: DW_TAG_class_type [4] -; CHECK: 0x000000a0: DW_TAG_friend [9] -; CHECK: 0x000000a1: DW_AT_friend [DW_FORM_ref4] (cu + 0x0032 => {0x00000032}) +; CHECK: 0x0000003a: DW_TAG_class_type [4] +; CHECK: 0x0000007f: DW_TAG_class_type [4] +; CHECK: 0x000000a8: DW_TAG_friend [9] +; CHECK: 0x000000a9: DW_AT_friend [DW_FORM_ref4] (cu + 0x003a => {0x0000003a}) %class.A = type { i32 } diff --git a/test/DebugInfo/X86/block-capture.ll b/test/DebugInfo/X86/block-capture.ll index 4953c421cd..432afe064f 100644 --- a/test/DebugInfo/X86/block-capture.ll +++ b/test/DebugInfo/X86/block-capture.ll @@ -2,10 +2,10 @@ ; RUN: llvm-dwarfdump %t | FileCheck %s ; Checks that we emit debug info for the block variable declare. -; CHECK: 0x00000030: DW_TAG_subprogram [3] -; CHECK: 0x0000005b: DW_TAG_variable [5] -; CHECK: 0x0000005c: DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000e6] = "block") -; CHECK: 0x00000066: DW_AT_location [DW_FORM_data4] (0x00000023) +; CHECK: 0x00000038: DW_TAG_subprogram [3] +; CHECK: 0x00000063: DW_TAG_variable [5] +; CHECK: 0x00000064: DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000e6] = "block") +; CHECK: 0x0000006e: DW_AT_location [DW_FORM_data4] (0x00000023) %struct.__block_descriptor = type { i64, i64 } %struct.__block_literal_generic = type { i8*, i32, i32, i8*, %struct.__block_descriptor* } diff --git a/test/DebugInfo/X86/concrete_out_of_line.ll b/test/DebugInfo/X86/concrete_out_of_line.ll index a22707189b..36a6653bd1 100644 --- a/test/DebugInfo/X86/concrete_out_of_line.ll +++ b/test/DebugInfo/X86/concrete_out_of_line.ll @@ -7,7 +7,7 @@ ; first check that we have a TAG_subprogram at a given offset and it has ; AT_inline. -; CHECK: 0x00000134: DW_TAG_subprogram [18] +; CHECK: 0x0000013c: DW_TAG_subprogram [18] ; CHECK-NEXT: DW_AT_MIPS_linkage_name ; CHECK-NEXT: DW_AT_specification ; CHECK-NEXT: DW_AT_inline @@ -15,8 +15,8 @@ ; and then that a TAG_subprogram refers to it with AT_abstract_origin. -; CHECK: 0x00000184: DW_TAG_subprogram [20] -; CHECK-NEXT: DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x0134 => {0x00000134}) +; CHECK: 0x0000018c: DW_TAG_subprogram [20] +; CHECK-NEXT: DW_AT_abstract_origin [DW_FORM_ref4] (cu + 0x013c => {0x0000013c}) define i32 @_ZN17nsAutoRefCnt7ReleaseEv() { entry: diff --git a/test/DebugInfo/X86/enum-class.ll b/test/DebugInfo/X86/enum-class.ll index 6eb715d828..aa0b2d0880 100644 --- a/test/DebugInfo/X86/enum-class.ll +++ b/test/DebugInfo/X86/enum-class.ll @@ -31,12 +31,12 @@ !21 = metadata !{i32 786484, i32 0, null, metadata !"c", metadata !"c", metadata !"", metadata !4, i32 6, metadata !12, i32 0, i32 1, i32* @c} ; [ DW_TAG_variable ] ; CHECK: DW_TAG_enumeration_type [3] -; CHECK: DW_AT_type [DW_FORM_ref4] (cu + 0x0026 => {0x00000026}) +; CHECK: DW_AT_type [DW_FORM_ref4] (cu + 0x002e => {0x0000002e}) ; CHECK: DW_AT_enum_class [DW_FORM_flag] (0x01) ; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[{{.*}}] = "A") ; CHECK: DW_TAG_enumeration_type [3] * -; CHECK: DW_AT_type [DW_FORM_ref4] (cu + 0x0057 => {0x00000057}) +; CHECK: DW_AT_type [DW_FORM_ref4] (cu + 0x005f => {0x0000005f}) ; CHECK: DW_AT_enum_class [DW_FORM_flag] (0x01) ; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[{{.*}}] = "B") diff --git a/test/DebugInfo/X86/low-high-pc-cu.ll b/test/DebugInfo/X86/low-high-pc-cu.ll new file mode 100644 index 0000000000..53fc46dcb8 --- /dev/null +++ b/test/DebugInfo/X86/low-high-pc-cu.ll @@ -0,0 +1,32 @@ +; RUN: llc -mtriple=x86_64-apple-darwin %s -o %t -filetype=obj +; RUN: llvm-dwarfdump %t | FileCheck %s + +; Check that we use DW_AT_low_pc and DW_AT_high_pc + +; CHECK: DW_TAG_compile_unit [1] +; CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) +; CHECK: DW_AT_high_pc [DW_FORM_addr] (0x0000000000000001) +; CHECK: DW_TAG_subprogram [2] + +define i32 @_Z1qv() nounwind uwtable readnone ssp { +entry: + ret i32 undef, !dbg !13 +} + +!llvm.dbg.cu = !{!0} + +!0 = metadata !{i32 786449, i32 0, i32 4, metadata !"foo.cpp", metadata !"/Users/echristo/tmp", metadata !"clang version 3.1 (trunk 153454) (llvm/trunk 153471)", i1 true, i1 false, metadata !"", i32 0, metadata !1, metadata !1, metadata !3, metadata !1} ; [ DW_TAG_compile_unit ] +!1 = metadata !{metadata !2} +!2 = metadata !{i32 0} +!3 = metadata !{metadata !4} +!4 = metadata !{metadata !5, metadata !12} +!5 = metadata !{i32 786478, i32 0, metadata !6, metadata !"q", metadata !"q", metadata !"_Z1qv", metadata !6, i32 5, metadata !7, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 ()* @_Z1qv, null, null, metadata !10} ; [ DW_TAG_subprogram ] +!6 = metadata !{i32 786473, metadata !"foo.cpp", metadata !"/Users/echristo/tmp", null} ; [ DW_TAG_file_type ] +!7 = metadata !{i32 786453, i32 0, metadata !"", i32 0, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !8, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] +!8 = metadata !{metadata !9} +!9 = metadata !{i32 786468, null, metadata !"int", null, i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ] +!10 = metadata !{metadata !11} +!11 = metadata !{i32 786468} ; [ DW_TAG_base_type ] +!12 = metadata !{i32 786478, i32 0, metadata !6, metadata !"t", metadata !"t", metadata !"", metadata !6, i32 2, metadata !7, i1 true, i1 true, i32 0, i32 0, null, i32 256, i1 false, null, null, null, metadata !10} ; [ DW_TAG_subprogram ] +!13 = metadata !{i32 7, i32 1, metadata !14, null} +!14 = metadata !{i32 786443, metadata !5, i32 5, i32 1, metadata !6, i32 0} ; [ DW_TAG_lexical_block ] diff --git a/test/DebugInfo/X86/low-pc-cu.ll b/test/DebugInfo/X86/low-pc-cu.ll deleted file mode 100644 index f9d9b91714..0000000000 --- a/test/DebugInfo/X86/low-pc-cu.ll +++ /dev/null @@ -1,31 +0,0 @@ -; RUN: llc -mtriple=x86_64-apple-darwin %s -o %t -filetype=obj -; RUN: llvm-dwarfdump %t | FileCheck %s - -; Check that we use DW_AT_low_pc - -; CHECK: DW_TAG_compile_unit [1] -; CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) -; CHECK: DW_TAG_subprogram [2] - -define i32 @_Z1qv() nounwind uwtable readnone ssp { -entry: - ret i32 undef, !dbg !13 -} - -!llvm.dbg.cu = !{!0} - -!0 = metadata !{i32 786449, i32 0, i32 4, metadata !"foo.cpp", metadata !"/Users/echristo/tmp", metadata !"clang version 3.1 (trunk 153454) (llvm/trunk 153471)", i1 true, i1 false, metadata !"", i32 0, metadata !1, metadata !1, metadata !3, metadata !1} ; [ DW_TAG_compile_unit ] -!1 = metadata !{metadata !2} -!2 = metadata !{i32 0} -!3 = metadata !{metadata !4} -!4 = metadata !{metadata !5, metadata !12} -!5 = metadata !{i32 786478, i32 0, metadata !6, metadata !"q", metadata !"q", metadata !"_Z1qv", metadata !6, i32 5, metadata !7, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 ()* @_Z1qv, null, null, metadata !10} ; [ DW_TAG_subprogram ] -!6 = metadata !{i32 786473, metadata !"foo.cpp", metadata !"/Users/echristo/tmp", null} ; [ DW_TAG_file_type ] -!7 = metadata !{i32 786453, i32 0, metadata !"", i32 0, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !8, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] -!8 = metadata !{metadata !9} -!9 = metadata !{i32 786468, null, metadata !"int", null, i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ] -!10 = metadata !{metadata !11} -!11 = metadata !{i32 786468} ; [ DW_TAG_base_type ] -!12 = metadata !{i32 786478, i32 0, metadata !6, metadata !"t", metadata !"t", metadata !"", metadata !6, i32 2, metadata !7, i1 true, i1 true, i32 0, i32 0, null, i32 256, i1 false, null, null, null, metadata !10} ; [ DW_TAG_subprogram ] -!13 = metadata !{i32 7, i32 1, metadata !14, null} -!14 = metadata !{i32 786443, metadata !5, i32 5, i32 1, metadata !6, i32 0} ; [ DW_TAG_lexical_block ] diff --git a/test/DebugInfo/X86/non-text-cu.ll b/test/DebugInfo/X86/non-text-cu.ll new file mode 100644 index 0000000000..858812bb48 --- /dev/null +++ b/test/DebugInfo/X86/non-text-cu.ll @@ -0,0 +1,23 @@ +; RUN: llc -mtriple=x86_64-redhat-linux-gnu %s -o %t -filetype=obj +; RUN: llvm-dwarfdump %t | FileCheck %s + +; Check that we only use DW_AT_low_pc for CU which has non text sections + +; CHECK: DW_TAG_compile_unit [1] +; CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) +; CHECK-NOT: DW_AT_high_pc [DW_FORM_addr] +; CHECK: DW_TAG_subprogram [2] + +define void @in_data() nounwind section ".data" { + ret void, !dbg !5 +} + +!llvm.dbg.sp = !{!0} + +!0 = metadata !{i32 589870, i32 0, metadata !1, metadata !"in_data", metadata !"in_data", metadata !"", metadata !1, i32 1, metadata !3, i1 false, i1 true, i32 0, i32 0, i32 0, i32 0, i1 false, void ()* @in_data} ; [ DW_TAG_subprogram ] +!1 = metadata !{i32 589865, metadata !"in_data.c", metadata !"/home/i/test", metadata !2} ; [ DW_TAG_file_type ] +!2 = metadata !{i32 589841, i32 0, i32 12, metadata !"in_data.c", metadata !"/home/i/test", metadata !"clang version 2.9 (tags/RELEASE_29/final)", i1 true, i1 false, metadata !"", i32 0} ; [ DW_TAG_compile_unit ] +!3 = metadata !{i32 589845, metadata !1, metadata !"", metadata !1, i32 0, i64 0, i64 0, i32 0, i32 0, i32 0, metadata !4, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] +!4 = metadata !{null} +!5 = metadata !{i32 1, i32 51, metadata !6, null} +!6 = metadata !{i32 589835, metadata !0, i32 1, i32 50, metadata !1, i32 0} ; [ DW_TAG_lexical_block ] diff --git a/test/DebugInfo/X86/objc-fwd-decl.ll b/test/DebugInfo/X86/objc-fwd-decl.ll index 1a815f936c..f40770c7e1 100644 --- a/test/DebugInfo/X86/objc-fwd-decl.ll +++ b/test/DebugInfo/X86/objc-fwd-decl.ll @@ -1,9 +1,9 @@ ; RUN: llc -mtriple=x86_64-macosx %s -o %t -filetype=obj ; RUN: llvm-dwarfdump %t | FileCheck %s -; CHECK: 0x00000027: DW_TAG_structure_type -; CHECK: 0x0000002c: DW_AT_declaration -; CHECK: 0x0000002d: DW_AT_APPLE_runtime_class +; CHECK: 0x0000002f: DW_TAG_structure_type +; CHECK: 0x00000034: DW_AT_declaration +; CHECK: 0x00000035: DW_AT_APPLE_runtime_class %0 = type opaque diff --git a/test/DebugInfo/X86/pr11300.ll b/test/DebugInfo/X86/pr11300.ll index 5a001eea75..f3998c5439 100644 --- a/test/DebugInfo/X86/pr11300.ll +++ b/test/DebugInfo/X86/pr11300.ll @@ -3,8 +3,8 @@ ; test that the DW_AT_specification is a back edge in the file. -; CHECK: 0x0000005c: DW_TAG_subprogram [5] -; CHECK: 0x0000007c: DW_AT_specification [DW_FORM_ref4] (cu + 0x005c => {0x0000005c}) +; CHECK: 0x00000064: DW_TAG_subprogram [5] +; CHECK: 0x00000084: DW_AT_specification [DW_FORM_ref4] (cu + 0x0064 => {0x00000064}) %struct.foo = type { i8 } diff --git a/test/DebugInfo/X86/stringpool.ll b/test/DebugInfo/X86/stringpool.ll index 2cd100156a..af475402d3 100644 --- a/test/DebugInfo/X86/stringpool.ll +++ b/test/DebugInfo/X86/stringpool.ll @@ -16,7 +16,7 @@ ; Verify that we refer to 'yyyy' with a relocation. ; LINUX: .long .Lstring3 # DW_AT_name -; LINUX-NEXT: .long 39 # DW_AT_type +; LINUX-NEXT: .long 47 # DW_AT_type ; LINUX-NEXT: .byte 1 # DW_AT_external ; LINUX-NEXT: .byte 1 # DW_AT_decl_file ; LINUX-NEXT: .byte 1 # DW_AT_decl_line @@ -27,7 +27,7 @@ ; Verify that we refer to 'yyyy' without a relocation. ; DARWIN: Lset5 = Lstring3-Lsection_str ## DW_AT_name ; DARWIN-NEXT: .long Lset5 -; DARWIN-NEXT: .long 39 ## DW_AT_type +; DARWIN-NEXT: .long 47 ## DW_AT_type ; DARWIN-NEXT: .byte 1 ## DW_AT_external ; DARWIN-NEXT: .byte 1 ## DW_AT_decl_file ; DARWIN-NEXT: .byte 1 ## DW_AT_decl_line -- cgit v1.2.3-18-g5258