[llvm] r355456 - [DWARFFormValue] Don't consider DW_FORM_data4/8 to be section offsets.

Jonas Devlieghere via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 5 15:47:22 PST 2019


Author: jdevlieghere
Date: Tue Mar  5 15:47:22 2019
New Revision: 355456

URL: http://llvm.org/viewvc/llvm-project?rev=355456&view=rev
Log:
[DWARFFormValue] Don't consider DW_FORM_data4/8 to be section offsets.

When dumping ToT clan's debug info with dwarfdump, we were seeing an
error saying that that the location list overflows the debug_loc
section. After reducing the testcase we figured out that we were
interpreting the DW_FORM_data4 as a section offset.

In DWARF3 DW_FORM_data4 and DW_FORM_data8 served also as a section
offset. Until now we didn't check check for the DWARF version, because
some producers (read old versions of clang) were still emitting this.
The relevant code/comment was added in 2013, and I believe it's now
reasonable to start checking the version.

The FormValue class is a little bit of a mess because it cashes the
DWARF unit and context when it extracted the value itself. Several
methods of the class rely on it being present, or return an Optional for
the code path that needs it. At the same time the FormValue class also
used in places where there's no DWARF unit.

For this patch I went with the least invasive change: checking the
version from the CU when it's available. If it's not (because the form
value was created from a value directly) we default to the old behavior.

Differential revision: https://reviews.llvm.org/D58698

Added:
    llvm/trunk/test/tools/llvm-dwarfdump/X86/formclass2.s
    llvm/trunk/test/tools/llvm-dwarfdump/X86/formclass4.s
Modified:
    llvm/trunk/lib/DebugInfo/DWARF/DWARFFormValue.cpp

Modified: llvm/trunk/lib/DebugInfo/DWARF/DWARFFormValue.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFFormValue.cpp?rev=355456&r1=355455&r2=355456&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/DWARF/DWARFFormValue.cpp (original)
+++ llvm/trunk/lib/DebugInfo/DWARF/DWARFFormValue.cpp Tue Mar  5 15:47:22 2019
@@ -220,13 +220,17 @@ bool DWARFFormValue::isFormClass(DWARFFo
   default:
     break;
   }
-  // In DWARF3 DW_FORM_data4 and DW_FORM_data8 served also as a section offset.
-  // Don't check for DWARF version here, as some producers may still do this
-  // by mistake. Also accept DW_FORM_[line_]strp since these are
-  // .debug_[line_]str section offsets.
-  return (Form == DW_FORM_data4 || Form == DW_FORM_data8 ||
-          Form == DW_FORM_strp || Form == DW_FORM_line_strp) &&
-         FC == FC_SectionOffset;
+
+  if (FC == FC_SectionOffset) {
+    if (Form == DW_FORM_strp || Form == DW_FORM_line_strp)
+      return true;
+    // In DWARF3 DW_FORM_data4 and DW_FORM_data8 served also as a section
+    // offset. If we don't have a DWARFUnit, default to the old behavior.
+    if (Form == DW_FORM_data4 || Form == DW_FORM_data8)
+      return !U || U->getVersion() <= 3;
+  }
+
+  return false;
 }
 
 bool DWARFFormValue::extractValue(const DWARFDataExtractor &Data,

Added: llvm/trunk/test/tools/llvm-dwarfdump/X86/formclass2.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-dwarfdump/X86/formclass2.s?rev=355456&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-dwarfdump/X86/formclass2.s (added)
+++ llvm/trunk/test/tools/llvm-dwarfdump/X86/formclass2.s Tue Mar  5 15:47:22 2019
@@ -0,0 +1,315 @@
+# Source:
+#   struct e {
+#     char f[16384];
+#     char g;
+#   };
+#   e foo() {
+#     auto E = new e;
+#     return *E;
+#   }
+# Compile with:
+#   clang -O2 -gdwarf-2 -S a.cpp -o a2.s
+
+# RUN: llvm-mc %s -filetype obj -triple x86_64-apple-darwin -o %t.o
+# RUN: llvm-dwarfdump -debug-info -name g %t.o | FileCheck %s
+
+# CHECK: DW_TAG_member
+# CHECK: DW_AT_name ("g")
+# CHECK: DW_AT_data_member_location (DW_OP_plus_uconst 0x4000)
+
+	.section	__TEXT,__text,regular,pure_instructions
+	.macosx_version_min 10, 14
+	.globl	__Z3foov                ## -- Begin function _Z3foov
+	.p2align	4, 0x90
+__Z3foov:                               ## @_Z3foov
+Lfunc_begin0:
+	.file	1 "/private/tmp" "a.cpp"
+	.loc	1 5 0                   ## a.cpp:5:0
+	.cfi_startproc
+## %bb.0:                               ## %entry
+	pushq	%rbp
+	.cfi_def_cfa_offset 16
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+	.cfi_def_cfa_register %rbp
+	pushq	%rbx
+	pushq	%rax
+	.cfi_offset %rbx, -24
+	movq	%rdi, %rbx
+Ltmp0:
+	.loc	1 6 12 prologue_end     ## a.cpp:6:12
+	movl	$16385, %edi            ## imm = 0x4001
+	callq	__Znwm
+Ltmp1:
+	##DEBUG_VALUE: foo:E <- $rax
+	.loc	1 7 10                  ## a.cpp:7:10
+	movl	$16385, %edx            ## imm = 0x4001
+	movq	%rbx, %rdi
+	movq	%rax, %rsi
+	callq	_memcpy
+Ltmp2:
+	.loc	1 8 1                   ## a.cpp:8:1
+	movq	%rbx, %rax
+	addq	$8, %rsp
+	popq	%rbx
+	popq	%rbp
+	retq
+Ltmp3:
+Lfunc_end0:
+	.cfi_endproc
+                                        ## -- End function
+	.section	__DWARF,__debug_str,regular,debug
+Linfo_string:
+	.asciz	"clang version 9.0.0 (git at github.com:llvm/llvm-project.git 10de39548976ae224709acdc1c337e33cf12f3c0)" ## string offset=0
+	.asciz	"a.cpp"                 ## string offset=100
+	.asciz	"/private/tmp"          ## string offset=106
+	.asciz	"foo"                   ## string offset=119
+	.asciz	"_Z3foov"               ## string offset=123
+	.asciz	"e"                     ## string offset=131
+	.asciz	"f"                     ## string offset=133
+	.asciz	"char"                  ## string offset=135
+	.asciz	"__ARRAY_SIZE_TYPE__"   ## string offset=140
+	.asciz	"g"                     ## string offset=160
+	.asciz	"E"                     ## string offset=162
+	.section	__DWARF,__debug_loc,regular,debug
+Lsection_debug_loc:
+Ldebug_loc0:
+.set Lset0, Ltmp1-Lfunc_begin0
+	.quad	Lset0
+.set Lset1, Ltmp2-Lfunc_begin0
+	.quad	Lset1
+	.short	1                       ## Loc expr size
+	.byte	80                      ## DW_OP_reg0
+	.quad	0
+	.quad	0
+	.section	__DWARF,__debug_abbrev,regular,debug
+Lsection_abbrev:
+	.byte	1                       ## Abbreviation Code
+	.byte	17                      ## DW_TAG_compile_unit
+	.byte	1                       ## DW_CHILDREN_yes
+	.byte	37                      ## DW_AT_producer
+	.byte	14                      ## DW_FORM_strp
+	.byte	19                      ## DW_AT_language
+	.byte	5                       ## DW_FORM_data2
+	.byte	3                       ## DW_AT_name
+	.byte	14                      ## DW_FORM_strp
+	.byte	16                      ## DW_AT_stmt_list
+	.byte	6                       ## DW_FORM_data4
+	.byte	27                      ## DW_AT_comp_dir
+	.byte	14                      ## DW_FORM_strp
+	.ascii	"\264B"                 ## DW_AT_GNU_pubnames
+	.byte	12                      ## DW_FORM_flag
+	.ascii	"\341\177"              ## DW_AT_APPLE_optimized
+	.byte	12                      ## DW_FORM_flag
+	.byte	17                      ## DW_AT_low_pc
+	.byte	1                       ## DW_FORM_addr
+	.byte	18                      ## DW_AT_high_pc
+	.byte	1                       ## DW_FORM_addr
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	2                       ## Abbreviation Code
+	.byte	46                      ## DW_TAG_subprogram
+	.byte	1                       ## DW_CHILDREN_yes
+	.byte	17                      ## DW_AT_low_pc
+	.byte	1                       ## DW_FORM_addr
+	.byte	18                      ## DW_AT_high_pc
+	.byte	1                       ## DW_FORM_addr
+	.byte	64                      ## DW_AT_frame_base
+	.byte	10                      ## DW_FORM_block1
+	.ascii	"\207@"                 ## DW_AT_MIPS_linkage_name
+	.byte	14                      ## DW_FORM_strp
+	.byte	3                       ## DW_AT_name
+	.byte	14                      ## DW_FORM_strp
+	.byte	58                      ## DW_AT_decl_file
+	.byte	11                      ## DW_FORM_data1
+	.byte	59                      ## DW_AT_decl_line
+	.byte	11                      ## DW_FORM_data1
+	.byte	73                      ## DW_AT_type
+	.byte	19                      ## DW_FORM_ref4
+	.byte	63                      ## DW_AT_external
+	.byte	12                      ## DW_FORM_flag
+	.ascii	"\341\177"              ## DW_AT_APPLE_optimized
+	.byte	12                      ## DW_FORM_flag
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	3                       ## Abbreviation Code
+	.byte	52                      ## DW_TAG_variable
+	.byte	0                       ## DW_CHILDREN_no
+	.byte	2                       ## DW_AT_location
+	.byte	6                       ## DW_FORM_data4
+	.byte	3                       ## DW_AT_name
+	.byte	14                      ## DW_FORM_strp
+	.byte	58                      ## DW_AT_decl_file
+	.byte	11                      ## DW_FORM_data1
+	.byte	59                      ## DW_AT_decl_line
+	.byte	11                      ## DW_FORM_data1
+	.byte	73                      ## DW_AT_type
+	.byte	19                      ## DW_FORM_ref4
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	4                       ## Abbreviation Code
+	.byte	19                      ## DW_TAG_structure_type
+	.byte	1                       ## DW_CHILDREN_yes
+	.byte	54                      ## DW_AT_calling_convention
+	.byte	11                      ## DW_FORM_data1
+	.byte	3                       ## DW_AT_name
+	.byte	14                      ## DW_FORM_strp
+	.byte	11                      ## DW_AT_byte_size
+	.byte	5                       ## DW_FORM_data2
+	.byte	58                      ## DW_AT_decl_file
+	.byte	11                      ## DW_FORM_data1
+	.byte	59                      ## DW_AT_decl_line
+	.byte	11                      ## DW_FORM_data1
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	5                       ## Abbreviation Code
+	.byte	13                      ## DW_TAG_member
+	.byte	0                       ## DW_CHILDREN_no
+	.byte	3                       ## DW_AT_name
+	.byte	14                      ## DW_FORM_strp
+	.byte	73                      ## DW_AT_type
+	.byte	19                      ## DW_FORM_ref4
+	.byte	58                      ## DW_AT_decl_file
+	.byte	11                      ## DW_FORM_data1
+	.byte	59                      ## DW_AT_decl_line
+	.byte	11                      ## DW_FORM_data1
+	.byte	56                      ## DW_AT_data_member_location
+	.byte	10                      ## DW_FORM_block1
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	6                       ## Abbreviation Code
+	.byte	1                       ## DW_TAG_array_type
+	.byte	1                       ## DW_CHILDREN_yes
+	.byte	73                      ## DW_AT_type
+	.byte	19                      ## DW_FORM_ref4
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	7                       ## Abbreviation Code
+	.byte	33                      ## DW_TAG_subrange_type
+	.byte	0                       ## DW_CHILDREN_no
+	.byte	73                      ## DW_AT_type
+	.byte	19                      ## DW_FORM_ref4
+	.byte	55                      ## DW_AT_count
+	.byte	5                       ## DW_FORM_data2
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	8                       ## Abbreviation Code
+	.byte	36                      ## DW_TAG_base_type
+	.byte	0                       ## DW_CHILDREN_no
+	.byte	3                       ## DW_AT_name
+	.byte	14                      ## DW_FORM_strp
+	.byte	62                      ## DW_AT_encoding
+	.byte	11                      ## DW_FORM_data1
+	.byte	11                      ## DW_AT_byte_size
+	.byte	11                      ## DW_FORM_data1
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	9                       ## Abbreviation Code
+	.byte	36                      ## DW_TAG_base_type
+	.byte	0                       ## DW_CHILDREN_no
+	.byte	3                       ## DW_AT_name
+	.byte	14                      ## DW_FORM_strp
+	.byte	11                      ## DW_AT_byte_size
+	.byte	11                      ## DW_FORM_data1
+	.byte	62                      ## DW_AT_encoding
+	.byte	11                      ## DW_FORM_data1
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	10                      ## Abbreviation Code
+	.byte	15                      ## DW_TAG_pointer_type
+	.byte	0                       ## DW_CHILDREN_no
+	.byte	73                      ## DW_AT_type
+	.byte	19                      ## DW_FORM_ref4
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	0                       ## EOM(3)
+	.section	__DWARF,__debug_info,regular,debug
+Lsection_info:
+Lcu_begin0:
+.set Lset2, Ldebug_info_end0-Ldebug_info_start0 ## Length of Unit
+	.long	Lset2
+Ldebug_info_start0:
+	.short	2                       ## DWARF version number
+.set Lset3, Lsection_abbrev-Lsection_abbrev ## Offset Into Abbrev. Section
+	.long	Lset3
+	.byte	8                       ## Address Size (in bytes)
+	.byte	1                       ## Abbrev [1] 0xb:0xa2 DW_TAG_compile_unit
+	.long	0                       ## DW_AT_producer
+	.short	4                       ## DW_AT_language
+	.long	100                     ## DW_AT_name
+.set Lset4, Lline_table_start0-Lsection_line ## DW_AT_stmt_list
+	.long	Lset4
+	.long	106                     ## DW_AT_comp_dir
+	.byte	1                       ## DW_AT_GNU_pubnames
+	.byte	1                       ## DW_AT_APPLE_optimized
+	.quad	Lfunc_begin0            ## DW_AT_low_pc
+	.quad	Lfunc_end0              ## DW_AT_high_pc
+	.byte	2                       ## Abbrev [2] 0x30:0x33 DW_TAG_subprogram
+	.quad	Lfunc_begin0            ## DW_AT_low_pc
+	.quad	Lfunc_end0              ## DW_AT_high_pc
+	.byte	1                       ## DW_AT_frame_base
+	.byte	86
+	.long	123                     ## DW_AT_MIPS_linkage_name
+	.long	119                     ## DW_AT_name
+	.byte	1                       ## DW_AT_decl_file
+	.byte	5                       ## DW_AT_decl_line
+	.long	99                      ## DW_AT_type
+	.byte	1                       ## DW_AT_external
+	.byte	1                       ## DW_AT_APPLE_optimized
+	.byte	3                       ## Abbrev [3] 0x53:0xf DW_TAG_variable
+.set Lset5, Ldebug_loc0-Lsection_debug_loc ## DW_AT_location
+	.long	Lset5
+	.long	162                     ## DW_AT_name
+	.byte	1                       ## DW_AT_decl_file
+	.byte	6                       ## DW_AT_decl_line
+	.long	167                     ## DW_AT_type
+	.byte	0                       ## End Of Children Mark
+	.byte	4                       ## Abbrev [4] 0x63:0x29 DW_TAG_structure_type
+	.byte	5                       ## DW_AT_calling_convention
+	.long	131                     ## DW_AT_name
+	.short	16385                   ## DW_AT_byte_size
+	.byte	1                       ## DW_AT_decl_file
+	.byte	1                       ## DW_AT_decl_line
+	.byte	5                       ## Abbrev [5] 0x6d:0xe DW_TAG_member
+	.long	133                     ## DW_AT_name
+	.long	140                     ## DW_AT_type
+	.byte	1                       ## DW_AT_decl_file
+	.byte	2                       ## DW_AT_decl_line
+	.byte	2                       ## DW_AT_data_member_location
+	.byte	35
+	.byte	0
+	.byte	5                       ## Abbrev [5] 0x7b:0x10 DW_TAG_member
+	.long	160                     ## DW_AT_name
+	.long	153                     ## DW_AT_type
+	.byte	1                       ## DW_AT_decl_file
+	.byte	3                       ## DW_AT_decl_line
+	.byte	4                       ## DW_AT_data_member_location
+	.byte	35
+	.ascii	"\200\200\001"
+	.byte	0                       ## End Of Children Mark
+	.byte	6                       ## Abbrev [6] 0x8c:0xd DW_TAG_array_type
+	.long	153                     ## DW_AT_type
+	.byte	7                       ## Abbrev [7] 0x91:0x7 DW_TAG_subrange_type
+	.long	160                     ## DW_AT_type
+	.short	16384                   ## DW_AT_count
+	.byte	0                       ## End Of Children Mark
+	.byte	8                       ## Abbrev [8] 0x99:0x7 DW_TAG_base_type
+	.long	135                     ## DW_AT_name
+	.byte	6                       ## DW_AT_encoding
+	.byte	1                       ## DW_AT_byte_size
+	.byte	9                       ## Abbrev [9] 0xa0:0x7 DW_TAG_base_type
+	.long	140                     ## DW_AT_name
+	.byte	8                       ## DW_AT_byte_size
+	.byte	7                       ## DW_AT_encoding
+	.byte	10                      ## Abbrev [10] 0xa7:0x5 DW_TAG_pointer_type
+	.long	99                      ## DW_AT_type
+	.byte	0                       ## End Of Children Mark
+Ldebug_info_end0:
+	.section	__DWARF,__debug_macinfo,regular,debug
+Ldebug_macinfo:
+	.byte	0                       ## End Of Macro List Mark
+
+.subsections_via_symbols
+	.section	__DWARF,__debug_line,regular,debug
+Lsection_line:
+Lline_table_start0:

Added: llvm/trunk/test/tools/llvm-dwarfdump/X86/formclass4.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-dwarfdump/X86/formclass4.s?rev=355456&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-dwarfdump/X86/formclass4.s (added)
+++ llvm/trunk/test/tools/llvm-dwarfdump/X86/formclass4.s Tue Mar  5 15:47:22 2019
@@ -0,0 +1,331 @@
+# Source:
+#   struct e {
+#     enum {} f[16384];
+#     short g;
+#   };
+#   e foo() {
+#     auto E = new e;
+#     return *E;
+#   }
+# Compile with:
+#   clang -O2 -gdwarf-4 -S a.cpp -o a4.s
+
+# RUN: llvm-mc %s -filetype obj -triple x86_64-apple-darwin -o %t.o
+# RUN: llvm-dwarfdump -debug-info -name g %t.o | FileCheck %s
+
+# CHECK: DW_TAG_member
+# CHECK: DW_AT_name ("g")
+# CHECK: DW_AT_data_member_location    (0x4000)
+
+	.section	__TEXT,__text,regular,pure_instructions
+	.macosx_version_min 10, 14
+	.globl	__Z3foov                ## -- Begin function _Z3foov
+	.p2align	4, 0x90
+__Z3foov:                               ## @_Z3foov
+Lfunc_begin0:
+	.file	1 "/private/tmp" "a.cpp"
+	.loc	1 5 0                   ## a.cpp:5:0
+	.cfi_startproc
+## %bb.0:                               ## %entry
+	pushq	%rbp
+	.cfi_def_cfa_offset 16
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+	.cfi_def_cfa_register %rbp
+	pushq	%rbx
+	pushq	%rax
+	.cfi_offset %rbx, -24
+	movq	%rdi, %rbx
+Ltmp0:
+	.loc	1 6 12 prologue_end     ## a.cpp:6:12
+	movl	$16385, %edi            ## imm = 0x4001
+	callq	__Znwm
+Ltmp1:
+	##DEBUG_VALUE: foo:E <- $rax
+	.loc	1 7 10                  ## a.cpp:7:10
+	movl	$16385, %edx            ## imm = 0x4001
+	movq	%rbx, %rdi
+	movq	%rax, %rsi
+	callq	_memcpy
+Ltmp2:
+	.loc	1 8 1                   ## a.cpp:8:1
+	movq	%rbx, %rax
+	addq	$8, %rsp
+	popq	%rbx
+	popq	%rbp
+	retq
+Ltmp3:
+Lfunc_end0:
+	.cfi_endproc
+                                        ## -- End function
+	.section	__DWARF,__debug_str,regular,debug
+Linfo_string:
+	.asciz	"clang version 9.0.0 (git at github.com:llvm/llvm-project.git 10de39548976ae224709acdc1c337e33cf12f3c0)" ## string offset=0
+	.asciz	"a.cpp"                 ## string offset=100
+	.asciz	"/private/tmp"          ## string offset=106
+	.asciz	"foo"                   ## string offset=119
+	.asciz	"_Z3foov"               ## string offset=123
+	.asciz	"e"                     ## string offset=131
+	.asciz	"f"                     ## string offset=133
+	.asciz	"char"                  ## string offset=135
+	.asciz	"__ARRAY_SIZE_TYPE__"   ## string offset=140
+	.asciz	"g"                     ## string offset=160
+	.asciz	"E"                     ## string offset=162
+	.section	__DWARF,__debug_loc,regular,debug
+Lsection_debug_loc:
+Ldebug_loc0:
+.set Lset0, Ltmp1-Lfunc_begin0
+	.quad	Lset0
+.set Lset1, Ltmp2-Lfunc_begin0
+	.quad	Lset1
+	.short	1                       ## Loc expr size
+	.byte	80                      ## DW_OP_reg0
+	.quad	0
+	.quad	0
+	.section	__DWARF,__debug_abbrev,regular,debug
+Lsection_abbrev:
+	.byte	1                       ## Abbreviation Code
+	.byte	17                      ## DW_TAG_compile_unit
+	.byte	1                       ## DW_CHILDREN_yes
+	.byte	37                      ## DW_AT_producer
+	.byte	14                      ## DW_FORM_strp
+	.byte	19                      ## DW_AT_language
+	.byte	5                       ## DW_FORM_data2
+	.byte	3                       ## DW_AT_name
+	.byte	14                      ## DW_FORM_strp
+	.byte	16                      ## DW_AT_stmt_list
+	.byte	23                      ## DW_FORM_sec_offset
+	.byte	27                      ## DW_AT_comp_dir
+	.byte	14                      ## DW_FORM_strp
+	.ascii	"\264B"                 ## DW_AT_GNU_pubnames
+	.byte	25                      ## DW_FORM_flag_present
+	.ascii	"\341\177"              ## DW_AT_APPLE_optimized
+	.byte	25                      ## DW_FORM_flag_present
+	.byte	17                      ## DW_AT_low_pc
+	.byte	1                       ## DW_FORM_addr
+	.byte	18                      ## DW_AT_high_pc
+	.byte	6                       ## DW_FORM_data4
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	2                       ## Abbreviation Code
+	.byte	46                      ## DW_TAG_subprogram
+	.byte	1                       ## DW_CHILDREN_yes
+	.byte	17                      ## DW_AT_low_pc
+	.byte	1                       ## DW_FORM_addr
+	.byte	18                      ## DW_AT_high_pc
+	.byte	6                       ## DW_FORM_data4
+	.byte	64                      ## DW_AT_frame_base
+	.byte	24                      ## DW_FORM_exprloc
+	.byte	122                     ## DW_AT_call_all_calls
+	.byte	25                      ## DW_FORM_flag_present
+	.byte	110                     ## DW_AT_linkage_name
+	.byte	14                      ## DW_FORM_strp
+	.byte	3                       ## DW_AT_name
+	.byte	14                      ## DW_FORM_strp
+	.byte	58                      ## DW_AT_decl_file
+	.byte	11                      ## DW_FORM_data1
+	.byte	59                      ## DW_AT_decl_line
+	.byte	11                      ## DW_FORM_data1
+	.byte	73                      ## DW_AT_type
+	.byte	19                      ## DW_FORM_ref4
+	.byte	63                      ## DW_AT_external
+	.byte	25                      ## DW_FORM_flag_present
+	.ascii	"\341\177"              ## DW_AT_APPLE_optimized
+	.byte	25                      ## DW_FORM_flag_present
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	3                       ## Abbreviation Code
+	.byte	52                      ## DW_TAG_variable
+	.byte	0                       ## DW_CHILDREN_no
+	.byte	2                       ## DW_AT_location
+	.byte	23                      ## DW_FORM_sec_offset
+	.byte	3                       ## DW_AT_name
+	.byte	14                      ## DW_FORM_strp
+	.byte	58                      ## DW_AT_decl_file
+	.byte	11                      ## DW_FORM_data1
+	.byte	59                      ## DW_AT_decl_line
+	.byte	11                      ## DW_FORM_data1
+	.byte	73                      ## DW_AT_type
+	.byte	19                      ## DW_FORM_ref4
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	4                       ## Abbreviation Code
+	.byte	19                      ## DW_TAG_structure_type
+	.byte	1                       ## DW_CHILDREN_yes
+	.byte	54                      ## DW_AT_calling_convention
+	.byte	11                      ## DW_FORM_data1
+	.byte	3                       ## DW_AT_name
+	.byte	14                      ## DW_FORM_strp
+	.byte	11                      ## DW_AT_byte_size
+	.byte	5                       ## DW_FORM_data2
+	.byte	58                      ## DW_AT_decl_file
+	.byte	11                      ## DW_FORM_data1
+	.byte	59                      ## DW_AT_decl_line
+	.byte	11                      ## DW_FORM_data1
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	5                       ## Abbreviation Code
+	.byte	13                      ## DW_TAG_member
+	.byte	0                       ## DW_CHILDREN_no
+	.byte	3                       ## DW_AT_name
+	.byte	14                      ## DW_FORM_strp
+	.byte	73                      ## DW_AT_type
+	.byte	19                      ## DW_FORM_ref4
+	.byte	58                      ## DW_AT_decl_file
+	.byte	11                      ## DW_FORM_data1
+	.byte	59                      ## DW_AT_decl_line
+	.byte	11                      ## DW_FORM_data1
+	.byte	56                      ## DW_AT_data_member_location
+	.byte	11                      ## DW_FORM_data1
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	6                       ## Abbreviation Code
+	.byte	13                      ## DW_TAG_member
+	.byte	0                       ## DW_CHILDREN_no
+	.byte	3                       ## DW_AT_name
+	.byte	14                      ## DW_FORM_strp
+	.byte	73                      ## DW_AT_type
+	.byte	19                      ## DW_FORM_ref4
+	.byte	58                      ## DW_AT_decl_file
+	.byte	11                      ## DW_FORM_data1
+	.byte	59                      ## DW_AT_decl_line
+	.byte	11                      ## DW_FORM_data1
+	.byte	56                      ## DW_AT_data_member_location
+	.byte	5                       ## DW_FORM_data2
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	7                       ## Abbreviation Code
+	.byte	1                       ## DW_TAG_array_type
+	.byte	1                       ## DW_CHILDREN_yes
+	.byte	73                      ## DW_AT_type
+	.byte	19                      ## DW_FORM_ref4
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	8                       ## Abbreviation Code
+	.byte	33                      ## DW_TAG_subrange_type
+	.byte	0                       ## DW_CHILDREN_no
+	.byte	73                      ## DW_AT_type
+	.byte	19                      ## DW_FORM_ref4
+	.byte	55                      ## DW_AT_count
+	.byte	5                       ## DW_FORM_data2
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	9                       ## Abbreviation Code
+	.byte	36                      ## DW_TAG_base_type
+	.byte	0                       ## DW_CHILDREN_no
+	.byte	3                       ## DW_AT_name
+	.byte	14                      ## DW_FORM_strp
+	.byte	62                      ## DW_AT_encoding
+	.byte	11                      ## DW_FORM_data1
+	.byte	11                      ## DW_AT_byte_size
+	.byte	11                      ## DW_FORM_data1
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	10                      ## Abbreviation Code
+	.byte	36                      ## DW_TAG_base_type
+	.byte	0                       ## DW_CHILDREN_no
+	.byte	3                       ## DW_AT_name
+	.byte	14                      ## DW_FORM_strp
+	.byte	11                      ## DW_AT_byte_size
+	.byte	11                      ## DW_FORM_data1
+	.byte	62                      ## DW_AT_encoding
+	.byte	11                      ## DW_FORM_data1
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	11                      ## Abbreviation Code
+	.byte	15                      ## DW_TAG_pointer_type
+	.byte	0                       ## DW_CHILDREN_no
+	.byte	73                      ## DW_AT_type
+	.byte	19                      ## DW_FORM_ref4
+	.byte	0                       ## EOM(1)
+	.byte	0                       ## EOM(2)
+	.byte	0                       ## EOM(3)
+	.section	__DWARF,__debug_info,regular,debug
+Lsection_info:
+Lcu_begin0:
+.set Lset2, Ldebug_info_end0-Ldebug_info_start0 ## Length of Unit
+	.long	Lset2
+Ldebug_info_start0:
+	.short	4                       ## DWARF version number
+.set Lset3, Lsection_abbrev-Lsection_abbrev ## Offset Into Abbrev. Section
+	.long	Lset3
+	.byte	8                       ## Address Size (in bytes)
+	.byte	1                       ## Abbrev [1] 0xb:0x91 DW_TAG_compile_unit
+	.long	0                       ## DW_AT_producer
+	.short	4                       ## DW_AT_language
+	.long	100                     ## DW_AT_name
+.set Lset4, Lline_table_start0-Lsection_line ## DW_AT_stmt_list
+	.long	Lset4
+	.long	106                     ## DW_AT_comp_dir
+                                        ## DW_AT_GNU_pubnames
+                                        ## DW_AT_APPLE_optimized
+	.quad	Lfunc_begin0            ## DW_AT_low_pc
+.set Lset5, Lfunc_end0-Lfunc_begin0     ## DW_AT_high_pc
+	.long	Lset5
+	.byte	2                       ## Abbrev [2] 0x2a:0x2d DW_TAG_subprogram
+	.quad	Lfunc_begin0            ## DW_AT_low_pc
+.set Lset6, Lfunc_end0-Lfunc_begin0     ## DW_AT_high_pc
+	.long	Lset6
+	.byte	1                       ## DW_AT_frame_base
+	.byte	86
+                                        ## DW_AT_call_all_calls
+	.long	123                     ## DW_AT_linkage_name
+	.long	119                     ## DW_AT_name
+	.byte	1                       ## DW_AT_decl_file
+	.byte	5                       ## DW_AT_decl_line
+	.long	87                      ## DW_AT_type
+                                        ## DW_AT_external
+                                        ## DW_AT_APPLE_optimized
+	.byte	3                       ## Abbrev [3] 0x47:0xf DW_TAG_variable
+.set Lset7, Ldebug_loc0-Lsection_debug_loc ## DW_AT_location
+	.long	Lset7
+	.long	162                     ## DW_AT_name
+	.byte	1                       ## DW_AT_decl_file
+	.byte	6                       ## DW_AT_decl_line
+	.long	150                     ## DW_AT_type
+	.byte	0                       ## End Of Children Mark
+	.byte	4                       ## Abbrev [4] 0x57:0x24 DW_TAG_structure_type
+	.byte	5                       ## DW_AT_calling_convention
+	.long	131                     ## DW_AT_name
+	.short	16385                   ## DW_AT_byte_size
+	.byte	1                       ## DW_AT_decl_file
+	.byte	1                       ## DW_AT_decl_line
+	.byte	5                       ## Abbrev [5] 0x61:0xc DW_TAG_member
+	.long	133                     ## DW_AT_name
+	.long	123                     ## DW_AT_type
+	.byte	1                       ## DW_AT_decl_file
+	.byte	2                       ## DW_AT_decl_line
+	.byte	0                       ## DW_AT_data_member_location
+	.byte	6                       ## Abbrev [6] 0x6d:0xd DW_TAG_member
+	.long	160                     ## DW_AT_name
+	.long	136                     ## DW_AT_type
+	.byte	1                       ## DW_AT_decl_file
+	.byte	3                       ## DW_AT_decl_line
+	.short	16384                   ## DW_AT_data_member_location
+	.byte	0                       ## End Of Children Mark
+	.byte	7                       ## Abbrev [7] 0x7b:0xd DW_TAG_array_type
+	.long	136                     ## DW_AT_type
+	.byte	8                       ## Abbrev [8] 0x80:0x7 DW_TAG_subrange_type
+	.long	143                     ## DW_AT_type
+	.short	16384                   ## DW_AT_count
+	.byte	0                       ## End Of Children Mark
+	.byte	9                       ## Abbrev [9] 0x88:0x7 DW_TAG_base_type
+	.long	135                     ## DW_AT_name
+	.byte	6                       ## DW_AT_encoding
+	.byte	1                       ## DW_AT_byte_size
+	.byte	10                      ## Abbrev [10] 0x8f:0x7 DW_TAG_base_type
+	.long	140                     ## DW_AT_name
+	.byte	8                       ## DW_AT_byte_size
+	.byte	7                       ## DW_AT_encoding
+	.byte	11                      ## Abbrev [11] 0x96:0x5 DW_TAG_pointer_type
+	.long	87                      ## DW_AT_type
+	.byte	0                       ## End Of Children Mark
+Ldebug_info_end0:
+	.section	__DWARF,__debug_macinfo,regular,debug
+Ldebug_macinfo:
+	.byte	0                       ## End Of Macro List Mark
+
+.subsections_via_symbols
+	.section	__DWARF,__debug_line,regular,debug
+Lsection_line:
+Lline_table_start0:




More information about the llvm-commits mailing list