[SystemZ] Add DebugInfo test cases
authorUlrich Weigand <ulrich.weigand@de.ibm.com>
Mon, 6 May 2013 16:18:29 +0000 (16:18 +0000)
committerUlrich Weigand <ulrich.weigand@de.ibm.com>
Mon, 6 May 2013 16:18:29 +0000 (16:18 +0000)
This adds all DebugInfo tests for the SystemZ target.

This version of the patch incorporates feedback from reviews by
Eric Christopher and Rafael Espindola.  Thanks to all reviewers!

Patch by Richard Sandiford.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181205 91177308-0d34-0410-b5e6-96231b3b80d8

test/DebugInfo/SystemZ/eh_frame.s [new file with mode: 0644]
test/DebugInfo/SystemZ/eh_frame_personality.ll [new file with mode: 0644]
test/DebugInfo/SystemZ/eh_frame_personality.s [new file with mode: 0644]
test/DebugInfo/SystemZ/lit.local.cfg [new file with mode: 0644]
test/DebugInfo/SystemZ/variable-loc.ll [new file with mode: 0644]
test/DebugInfo/SystemZ/variable-loc.s [new file with mode: 0644]

diff --git a/test/DebugInfo/SystemZ/eh_frame.s b/test/DebugInfo/SystemZ/eh_frame.s
new file mode 100644 (file)
index 0000000..4e7afd5
--- /dev/null
@@ -0,0 +1,54 @@
+# RUN: llvm-mc -triple=s390x-linux-gnu -filetype=obj %s -o %t
+# RUN: llvm-objdump -s %t | FileCheck %s
+
+       .text
+       .globl  check_largest_class
+       .align  4
+       .type   check_largest_class,@function
+check_largest_class:
+       .cfi_startproc
+       stmg    %r13, %r15, 104(%r15)
+       .cfi_offset %r13, -56
+       .cfi_offset %r14, -48
+       .cfi_offset %r15, -40
+       aghi    %r15, -160
+       .cfi_def_cfa_offset 320
+       lmg     %r13, %r15, 264(%r15)
+       br      %r14
+       .size   check_largest_class, .-check_largest_class
+       .cfi_endproc
+
+# The readelf rendering is:
+#
+# Contents of the .eh_frame section:
+#
+# 00000000 0000001c 00000000 CIE
+#   Version:               1
+#   Augmentation:          "zR"
+#   Code alignment factor: 1
+#   Data alignment factor: -8
+#   Return address column: 14
+#   Augmentation data:     1b
+#
+#   DW_CFA_def_cfa: r15 ofs 160
+#   DW_CFA_nop
+#   DW_CFA_nop
+#   DW_CFA_nop
+#
+# 00000020 0000001c 00000024 FDE cie=00000000 pc=00000000..00000012
+#   DW_CFA_advance_loc: 6 to 00000006
+#   DW_CFA_offset: r13 at cfa-56
+#   DW_CFA_offset: r14 at cfa-48
+#   DW_CFA_offset: r15 at cfa-40
+#   DW_CFA_advance_loc: 4 to 0000000a
+#   DW_CFA_def_cfa_offset: 320
+#   DW_CFA_nop
+#   DW_CFA_nop
+#   DW_CFA_nop
+#   DW_CFA_nop
+#
+# CHECK: Contents of section .eh_frame:
+# CHECK-NEXT: 0000 00000014 00000000 017a5200 01780e01  .........zR..x..
+# CHECK-NEXT: 0010 1b0c0fa0 01000000 0000001c 0000001c  ................
+# CHECK-NEXT: 0020 00000000 00000012 00468d07 8e068f05  .........F......
+# CHECK-NEXT: 0030 440ec002 00000000                    D.......
diff --git a/test/DebugInfo/SystemZ/eh_frame_personality.ll b/test/DebugInfo/SystemZ/eh_frame_personality.ll
new file mode 100644 (file)
index 0000000..e5dbb15
--- /dev/null
@@ -0,0 +1,43 @@
+; RUN: llc < %s -verify-machineinstrs -mtriple=s390x-linux-gnu | FileCheck -check-prefix=CHECK-FUNC %s
+; RUN: llc < %s -verify-machineinstrs -mtriple=s390x-linux-gnu | FileCheck -check-prefix=CHECK-ET %s
+; RUN: llc < %s -verify-machineinstrs -mtriple=s390x-linux-gnu | FileCheck -check-prefix=CHECK-REF %s
+
+declare i32 @__gxx_personality_v0(...)
+
+declare void @bar()
+
+define i64 @foo(i64 %lhs, i64 %rhs) {
+  invoke void @bar() to label %end unwind label %clean
+end:
+ ret i64 0
+
+clean:
+  %tst = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) cleanup
+  ret i64 42
+}
+
+; CHECK-FUNC: foo:
+; CHECK-FUNC: .cfi_startproc
+; CHECK-FUNC: .cfi_personality 155, DW.ref.__gxx_personality_v0
+; CHECK-FUNC: .cfi_lsda 27, .Lexception0
+; CHECK-FUNC: stmg     %r14, %r15, 112(%r15)
+; CHECK-FUNC: .cfi_offset %r14, -48
+; CHECK-FUNC: .cfi_offset %r15, -40
+; CHECK-FUNC: aghi     %r15, -160
+; CHECK-FUNC: .cfi_def_cfa_offset 320
+; ...main function...
+; CHECK-FUNC: .cfi_endproc
+;
+; CHECK-ET: .section   .gcc_except_table,"a",@progbits
+; CHECK-ET-NEXT: .align        4
+; CHECK-ET-NEXT: GCC_except_table0:
+; CHECK-ET-NEXT: .Lexception0:
+;
+; CHECK-REF: .hidden   DW.ref.__gxx_personality_v0
+; CHECK-REF: .weak     DW.ref.__gxx_personality_v0
+; CHECK-REF: .section  .data.DW.ref.__gxx_personality_v0,"aGw",@progbits,DW.ref.__gxx_personality_v0,comdat
+; CHECK-REF-NEXT: .align       8
+; CHECK-REF-NEXT: .type        DW.ref.__gxx_personality_v0,@object
+; CHECK-REF-NEXT: .size        DW.ref.__gxx_personality_v0, 8
+; CHECK-REF-NEXT: DW.ref.__gxx_personality_v0:
+; CHECK-REF-NEXT: .quad        __gxx_personality_v0
diff --git a/test/DebugInfo/SystemZ/eh_frame_personality.s b/test/DebugInfo/SystemZ/eh_frame_personality.s
new file mode 100644 (file)
index 0000000..46b46db
--- /dev/null
@@ -0,0 +1,67 @@
+# RUN: llvm-mc -triple=s390x-linux-gnu -filetype=obj %s -o %t
+# RUN: llvm-objdump -s %t | FileCheck %s
+
+       .text
+       .globl  foo
+       .align  4
+       .type   foo,@function
+foo:                                    # @foo
+       .cfi_startproc
+       .cfi_personality 155, DW.ref.__gxx_personality_v0
+       .cfi_lsda 27, .Lexception0
+       stmg    %r14, %r15, 112(%r15)
+       .cfi_offset %r14, -48
+       .cfi_offset %r15, -40
+       aghi    %r15, -160
+       .cfi_def_cfa_offset 320
+       lmg     %r14, %r15, 272(%r15)
+       br      %r14
+       .size   foo, .-foo
+       .cfi_endproc
+
+       .section        .gcc_except_table,"a",@progbits
+       .align  4
+.Lexception0:
+
+       .hidden DW.ref.__gxx_personality_v0
+       .weak   DW.ref.__gxx_personality_v0
+       .section        .data.DW.ref.__gxx_personality_v0,"aGw",@progbits,DW.ref.__gxx_personality_v0,comdat
+       .align  8
+       .type   DW.ref.__gxx_personality_v0,@object
+       .size   DW.ref.__gxx_personality_v0, 8
+DW.ref.__gxx_personality_v0:
+       .quad   __gxx_personality_v0
+
+# The readelf rendering is:
+#
+# Contents of the .eh_frame section:
+#
+# 00000000 0000001c 00000000 CIE
+#   Version:               1
+#   Augmentation:          "zPLR"
+#   Code alignment factor: 1
+#   Data alignment factor: -8
+#   Return address column: 14
+#   Augmentation data:     9b ff ff ff ed 1b 1b
+#
+#   DW_CFA_def_cfa: r15 ofs 160
+#   DW_CFA_nop
+#   DW_CFA_nop
+#   DW_CFA_nop
+#
+# 00000020 0000001c 00000024 FDE cie=00000000 pc=00000000..00000012
+#   Augmentation data:     ff ff ff cf
+#
+#   DW_CFA_advance_loc: 6 to 00000006
+#   DW_CFA_offset: r14 at cfa-48
+#   DW_CFA_offset: r15 at cfa-40
+#   DW_CFA_advance_loc: 4 to 0000000a
+#   DW_CFA_def_cfa_offset: 320
+#   DW_CFA_nop
+#   DW_CFA_nop
+#
+# CHECK: Contents of section .eh_frame:
+# CHECK-NEXT: 0000 0000001c 00000000 017a504c 52000178  .........zPLR..x
+# CHECK-NEXT: 0010 0e079b00 0000001b 1b0c0fa0 01000000  ................
+# CHECK-NEXT: 0020 0000001c 00000024 00000000 00000012  .......$........
+# CHECK-NEXT: 0030 04000000 00468e06 8f05440e c0020000  .....F....D.....
diff --git a/test/DebugInfo/SystemZ/lit.local.cfg b/test/DebugInfo/SystemZ/lit.local.cfg
new file mode 100644 (file)
index 0000000..a70a685
--- /dev/null
@@ -0,0 +1,6 @@
+config.suffixes = ['.ll', '.s']
+
+targets = set(config.root.targets_to_build.split())
+if not 'SystemZ' in targets:
+    config.unsupported = True
+
diff --git a/test/DebugInfo/SystemZ/variable-loc.ll b/test/DebugInfo/SystemZ/variable-loc.ll
new file mode 100644 (file)
index 0000000..e6f4ff9
--- /dev/null
@@ -0,0 +1,85 @@
+; RUN: llc -mtriple=s390x-linux-gnu -disable-fp-elim < %s | FileCheck %s
+;
+; This is a regression test making sure the location of variables is correct in
+; debugging information, even if they're addressed via the frame pointer.
+; A copy of the AArch64 test, commandeered for SystemZ.
+;
+; First make sure main_arr is where we expect it: %r11 + 164
+;
+; CHECK: main:
+; CHECK: aghi    %r15, -568
+; CHECK: la      [[MAIN_ARR:%r[0-9]+]], 164(%r11)
+; CHECK: lgr     %r2, [[MAIN_ARR]]
+; CHECK: brasl   %r14, populate_array@PLT
+;
+; Now check that the debugging information reflects this:
+; CHECK: DW_TAG_variable
+; CHECK-NEXT: .long .Linfo_string7
+;
+; Rather hard-coded, but 145 => DW_OP_fbreg and the .ascii is the sleb128
+; encoding of 164:
+; CHECK: DW_AT_location
+; CHECK-NEXT: .byte 145
+; CHECK-NEXT: .ascii "\244\001"
+;
+; CHECK: .Linfo_string7:
+; CHECK-NEXT: main_arr
+
+
+@.str = private unnamed_addr constant [13 x i8] c"Total is %d\0A\00", align 2
+
+declare void @populate_array(i32*, i32) nounwind
+
+declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone
+
+declare i32 @sum_array(i32*, i32) nounwind
+
+define i32 @main() nounwind {
+entry:
+  %retval = alloca i32, align 4
+  %main_arr = alloca [100 x i32], align 4
+  %val = alloca i32, align 4
+  store i32 0, i32* %retval
+  call void @llvm.dbg.declare(metadata !{[100 x i32]* %main_arr}, metadata !17), !dbg !22
+  call void @llvm.dbg.declare(metadata !{i32* %val}, metadata !23), !dbg !24
+  %arraydecay = getelementptr inbounds [100 x i32]* %main_arr, i32 0, i32 0, !dbg !25
+  call void @populate_array(i32* %arraydecay, i32 100), !dbg !25
+  %arraydecay1 = getelementptr inbounds [100 x i32]* %main_arr, i32 0, i32 0, !dbg !26
+  %call = call i32 @sum_array(i32* %arraydecay1, i32 100), !dbg !26
+  store i32 %call, i32* %val, align 4, !dbg !26
+  %0 = load i32* %val, align 4, !dbg !27
+  %call2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([13 x i8]* @.str, i32 0, i32 0), i32 %0), !dbg !27
+  ret i32 0, !dbg !28
+}
+
+declare i32 @printf(i8*, ...)
+
+!llvm.dbg.cu = !{!0}
+
+!0 = metadata !{i32 786449, metadata !29, i32 12, metadata !"clang version 3.2 ", i1 false, metadata !"", i32 0, metadata !1, metadata !1, metadata !3, metadata !1,  metadata !1, metadata !""} ; [ DW_TAG_compile_unit ] [/home/timnor01/a64-trunk/build/simple.c] [DW_LANG_C99]
+!1 = metadata !{i32 0}
+!3 = metadata !{metadata !5, metadata !11, metadata !14}
+!5 = metadata !{i32 786478, metadata !6, metadata !"populate_array", metadata !"populate_array", metadata !"", metadata !6, i32 4, metadata !7, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void (i32*, i32)* @populate_array, null, null, metadata !1, i32 4} ; [ DW_TAG_subprogram ] [line 4] [def] [populate_array]
+!6 = metadata !{i32 786473, metadata !29} ; [ 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 ] [line 0, size 0, align 0, offset 0] [from ]
+!8 = metadata !{null, metadata !9, metadata !10}
+!9 = metadata !{i32 786447, null, null, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 0, metadata !10} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from int]
+!10 = metadata !{i32 786468, null, null, metadata !"int", i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed]
+!11 = metadata !{i32 786478, metadata !6, metadata !"sum_array", metadata !"sum_array", metadata !"", metadata !6, i32 9, metadata !12, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 (i32*, i32)* @sum_array, null, null, metadata !1, i32 9} ; [ DW_TAG_subprogram ] [line 9] [def] [sum_array]
+!12 = metadata !{i32 786453, i32 0, metadata !"", i32 0, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !13, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
+!13 = metadata !{metadata !10, metadata !9, metadata !10}
+!14 = metadata !{i32 786478, metadata !6, metadata !"main", metadata !"main", metadata !"", metadata !6, i32 18, metadata !15, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 ()* @main, null, null, metadata !1, i32 18} ; [ DW_TAG_subprogram ] [line 18] [def] [main]
+!15 = metadata !{i32 786453, i32 0, metadata !"", i32 0, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !16, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
+!16 = metadata !{metadata !10}
+!17 = metadata !{i32 786688, metadata !18, metadata !"main_arr", metadata !6, i32 19, metadata !19, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [main_arr] [line 19]
+!18 = metadata !{i32 786443, metadata !6, metadata !14, i32 18, i32 16, i32 4} ; [ DW_TAG_lexical_block ] [/home/timnor01/a64-trunk/build/simple.c]
+!19 = metadata !{i32 786433, null, null, metadata !"", i32 0, i64 3200, i64 32, i32 0, i32 0, metadata !10, metadata !20, i32 0, i32 0} ; [ DW_TAG_array_type ] [line 0, size 3200, align 32, offset 0] [from int]
+!20 = metadata !{i32 786465, i64 0, i64 99}       ; [ DW_TAG_subrange_type ] [0, 99]
+!22 = metadata !{i32 19, i32 7, metadata !18, null}
+!23 = metadata !{i32 786688, metadata !18, metadata !"val", metadata !6, i32 20, metadata !10, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [val] [line 20]
+!24 = metadata !{i32 20, i32 7, metadata !18, null}
+!25 = metadata !{i32 22, i32 3, metadata !18, null}
+!26 = metadata !{i32 23, i32 9, metadata !18, null}
+!27 = metadata !{i32 24, i32 3, metadata !18, null}
+!28 = metadata !{i32 26, i32 3, metadata !18, null}
+!29 = metadata !{metadata !"simple.c", metadata !"/home/timnor01/a64-trunk/build"}
diff --git a/test/DebugInfo/SystemZ/variable-loc.s b/test/DebugInfo/SystemZ/variable-loc.s
new file mode 100644 (file)
index 0000000..d439a46
--- /dev/null
@@ -0,0 +1,340 @@
+# RUN: llvm-mc < %s -triple=s390x-linux-gnu -filetype=obj | llvm-dwarfdump - | FileCheck %s
+#
+# We use both R_390_32 and R_390_64 to encode the dwarf information.
+# Test that they are used correctly.  This uses the assembly output
+# for variable-loc.ll
+#
+# A couple of R_390_32s, both at 0 and elsewhere:
+#
+# CHECK: DW_AT_producer [DW_FORM_strp] ( .debug_str[0x00000000] = "clang version 3.2 ")
+# CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x00000013] = "simple.c")
+#
+# A couple of R_390_64s similarly:
+#
+# CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000)
+# CHECK: DW_AT_high_pc [DW_FORM_addr] (0x0000000000000050)
+
+
+       .file   "test/DebugInfo/SystemZ/variable-loc.ll"
+       .section        .debug_info,"",@progbits
+.Lsection_info:
+       .section        .debug_abbrev,"",@progbits
+.Lsection_abbrev:
+       .section        .debug_aranges,"",@progbits
+       .section        .debug_macinfo,"",@progbits
+       .section        .debug_line,"",@progbits
+.Lsection_line:
+       .section        .debug_loc,"",@progbits
+       .section        .debug_pubtypes,"",@progbits
+       .section        .debug_str,"MS",@progbits,1
+.Linfo_string:
+       .section        .debug_ranges,"",@progbits
+.Ldebug_range:
+       .section        .debug_loc,"",@progbits
+.Lsection_debug_loc:
+       .text
+.Ltext_begin:
+       .data
+       .file   1 "simple.c"
+       .file   2 "<stdin>"
+       .text
+       .globl  main
+       .align  4
+       .type   main,@function
+main:                                   # @main
+       .cfi_startproc
+.Lfunc_begin0:
+       .loc    2 18 0                  # :18:0
+# BB#0:                                 # %entry
+       stmg    %r12, %r15, 96(%r15)
+.Ltmp2:
+       .cfi_offset %r12, -64
+.Ltmp3:
+       .cfi_offset %r13, -56
+.Ltmp4:
+       .cfi_offset %r14, -48
+.Ltmp5:
+       .cfi_offset %r15, -40
+       aghi    %r15, -568
+.Ltmp6:
+       .cfi_def_cfa_offset 728
+       mvhi    564(%r15), 0
+       la      %r13, 164(%r15)
+       lhi     %r12, 100
+       .loc    2 22 3 prologue_end     # :22:3
+.Ltmp7:
+       lgr     %r2, %r13
+       lr      %r3, %r12
+       brasl   %r14, populate_array@PLT
+       .loc    2 23 9                  # :23:9
+       lgr     %r2, %r13
+       lr      %r3, %r12
+       brasl   %r14, sum_array@PLT
+       lr      %r0, %r2
+       st      %r0, 160(%r15)
+       .loc    2 24 3                  # :24:3
+       larl    %r2, .L.str
+       lr      %r3, %r0
+       brasl   %r14, printf@PLT
+       lhi     %r2, 0
+       .loc    2 26 3                  # :26:3
+       lmg     %r12, %r15, 664(%r15)
+       br      %r14
+.Ltmp8:
+.Ltmp9:
+       .size   main, .Ltmp9-main
+.Lfunc_end0:
+       .cfi_endproc
+
+       .type   .L.str,@object          # @.str
+       .section        .rodata.str1.2,"aMS",@progbits,1
+       .align  2
+.L.str:
+       .asciz   "Total is %d\n"
+       .size   .L.str, 13
+
+       .cfi_sections .debug_frame
+       .text
+.Ltext_end:
+       .data
+.Ldata_end:
+       .text
+.Lsection_end1:
+       .section        .debug_info,"",@progbits
+.L.debug_info_begin0:
+       .long   155                     # Length of Compilation Unit Info
+       .short  2                       # DWARF version number
+       .long   .L.debug_abbrev_begin   # Offset Into Abbrev. Section
+       .byte   8                       # Address Size (in bytes)
+       .byte   1                       # Abbrev [1] 0xb:0x94 DW_TAG_compile_unit
+       .long   .Linfo_string0          # DW_AT_producer
+       .short  12                      # DW_AT_language
+       .long   .Linfo_string1          # DW_AT_name
+       .quad   0                       # DW_AT_low_pc
+       .long   .Lsection_line          # DW_AT_stmt_list
+       .long   .Linfo_string2          # DW_AT_comp_dir
+       .byte   2                       # Abbrev [2] 0x26:0x7 DW_TAG_subprogram
+       .long   .Linfo_string3          # DW_AT_name
+       .byte   2                       # DW_AT_decl_file
+       .byte   4                       # DW_AT_decl_line
+                                        # DW_AT_prototyped
+                                        # DW_AT_external
+       .byte   3                       # Abbrev [3] 0x2d:0xb DW_TAG_subprogram
+       .long   .Linfo_string4          # DW_AT_name
+       .byte   2                       # DW_AT_decl_file
+       .byte   9                       # DW_AT_decl_line
+                                        # DW_AT_prototyped
+       .long   56                      # DW_AT_type
+                                        # DW_AT_external
+       .byte   4                       # Abbrev [4] 0x38:0x7 DW_TAG_base_type
+       .long   .Linfo_string5          # DW_AT_name
+       .byte   5                       # DW_AT_encoding
+       .byte   4                       # DW_AT_byte_size
+       .byte   5                       # Abbrev [5] 0x3f:0xb DW_TAG_subprogram
+       .long   .Linfo_string6          # DW_AT_name
+       .byte   2                       # DW_AT_decl_file
+       .byte   18                      # DW_AT_decl_line
+                                        # DW_AT_prototyped
+       .long   56                      # DW_AT_type
+                                        # DW_AT_external
+                                        # DW_AT_declaration
+       .byte   6                       # Abbrev [6] 0x4a:0x7 DW_TAG_base_type
+       .long   .Linfo_string5          # DW_AT_name
+       .byte   4                       # DW_AT_byte_size
+       .byte   5                       # DW_AT_encoding
+       .byte   7                       # Abbrev [7] 0x51:0x5 DW_TAG_array_type
+       .long   56                      # DW_AT_type
+       .byte   8                       # Abbrev [8] 0x56:0x48 DW_TAG_subprogram
+       .long   63                      # DW_AT_specification
+       .quad   .Lfunc_begin0           # DW_AT_low_pc
+       .quad   .Lfunc_end0             # DW_AT_high_pc
+       .byte   1                       # DW_AT_frame_base
+       .byte   95
+                                        # DW_AT_APPLE_omit_frame_ptr
+       .byte   9                       # Abbrev [9] 0x6d:0x30 DW_TAG_lexical_block
+       .quad   .Ltmp7                  # DW_AT_low_pc
+       .quad   .Ltmp8                  # DW_AT_high_pc
+       .byte   10                      # Abbrev [10] 0x7e:0xf DW_TAG_variable
+       .long   .Linfo_string7          # DW_AT_name
+       .byte   2                       # DW_AT_decl_file
+       .byte   19                      # DW_AT_decl_line
+       .long   81                      # DW_AT_type
+       .byte   3                       # DW_AT_location
+       .byte   145
+       .ascii   "\244\001"
+       .byte   10                      # Abbrev [10] 0x8d:0xf DW_TAG_variable
+       .long   .Linfo_string8          # DW_AT_name
+       .byte   2                       # DW_AT_decl_file
+       .byte   20                      # DW_AT_decl_line
+       .long   56                      # DW_AT_type
+       .byte   3                       # DW_AT_location
+       .byte   145
+       .ascii   "\240\001"
+       .byte   0                       # End Of Children Mark
+       .byte   0                       # End Of Children Mark
+       .byte   0                       # End Of Children Mark
+.L.debug_info_end0:
+       .section        .debug_abbrev,"",@progbits
+.L.debug_abbrev_begin:
+       .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   17                      # DW_AT_low_pc
+       .byte   1                       # DW_FORM_addr
+       .byte   16                      # DW_AT_stmt_list
+       .byte   6                       # DW_FORM_data4
+       .byte   27                      # DW_AT_comp_dir
+       .byte   14                      # DW_FORM_strp
+       .byte   0                       # EOM(1)
+       .byte   0                       # EOM(2)
+       .byte   2                       # Abbreviation Code
+       .byte   46                      # DW_TAG_subprogram
+       .byte   0                       # DW_CHILDREN_no
+       .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   39                      # DW_AT_prototyped
+       .byte   25                      # DW_FORM_flag_present
+       .byte   63                      # DW_AT_external
+       .byte   25                      # DW_FORM_flag_present
+       .byte   0                       # EOM(1)
+       .byte   0                       # EOM(2)
+       .byte   3                       # Abbreviation Code
+       .byte   46                      # DW_TAG_subprogram
+       .byte   0                       # DW_CHILDREN_no
+       .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   39                      # DW_AT_prototyped
+       .byte   25                      # DW_FORM_flag_present
+       .byte   73                      # DW_AT_type
+       .byte   19                      # DW_FORM_ref4
+       .byte   63                      # DW_AT_external
+       .byte   25                      # DW_FORM_flag_present
+       .byte   0                       # EOM(1)
+       .byte   0                       # EOM(2)
+       .byte   4                       # 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   5                       # Abbreviation Code
+       .byte   46                      # DW_TAG_subprogram
+       .byte   0                       # DW_CHILDREN_no
+       .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   39                      # DW_AT_prototyped
+       .byte   25                      # DW_FORM_flag_present
+       .byte   73                      # DW_AT_type
+       .byte   19                      # DW_FORM_ref4
+       .byte   63                      # DW_AT_external
+       .byte   25                      # DW_FORM_flag_present
+       .byte   60                      # DW_AT_declaration
+       .byte   25                      # DW_FORM_flag_present
+       .byte   0                       # EOM(1)
+       .byte   0                       # EOM(2)
+       .byte   6                       # 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   7                       # Abbreviation Code
+       .byte   1                       # DW_TAG_array_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   8                       # Abbreviation Code
+       .byte   46                      # DW_TAG_subprogram
+       .byte   1                       # DW_CHILDREN_yes
+       .byte   71                      # DW_AT_specification
+       .byte   19                      # DW_FORM_ref4
+       .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   "\347\177"             # DW_AT_APPLE_omit_frame_ptr
+       .byte   25                      # DW_FORM_flag_present
+       .byte   0                       # EOM(1)
+       .byte   0                       # EOM(2)
+       .byte   9                       # Abbreviation Code
+       .byte   11                      # DW_TAG_lexical_block
+       .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   0                       # EOM(1)
+       .byte   0                       # EOM(2)
+       .byte   10                      # Abbreviation Code
+       .byte   52                      # DW_TAG_variable
+       .byte   0                       # DW_CHILDREN_no
+       .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   2                       # DW_AT_location
+       .byte   10                      # DW_FORM_block1
+       .byte   0                       # EOM(1)
+       .byte   0                       # EOM(2)
+       .byte   0                       # EOM(3)
+.L.debug_abbrev_end:
+       .section        .debug_aranges,"",@progbits
+       .section        .debug_ranges,"",@progbits
+       .section        .debug_macinfo,"",@progbits
+       .section        .debug_str,"MS",@progbits,1
+.Linfo_string0:
+       .asciz   "clang version 3.2 "
+.Linfo_string1:
+       .asciz   "simple.c"
+.Linfo_string2:
+       .asciz   "/home/timnor01/a64-trunk/build"
+.Linfo_string3:
+       .asciz   "populate_array"
+.Linfo_string4:
+       .asciz   "sum_array"
+.Linfo_string5:
+       .asciz   "int"
+.Linfo_string6:
+       .asciz   "main"
+.Linfo_string7:
+       .asciz   "main_arr"
+.Linfo_string8:
+       .asciz   "val"
+
+       .section        ".note.GNU-stack","",@progbits