1622c563bSJonas Devlieghere# RUN: llvm-mc %s -filetype obj -triple x86_64-linux-elf -o - \ 2622c563bSJonas Devlieghere# RUN: | llvm-dwarfdump --debug-loc - \ 3622c563bSJonas Devlieghere# RUN: | FileCheck %s 4622c563bSJonas Devlieghere 57d4a974dSJonas Devlieghere# RUN: llvm-mc %s -filetype obj -triple x86_64-linux-elf -o - \ 67d4a974dSJonas Devlieghere# RUN: | llvm-dwarfdump --verify - \ 77d4a974dSJonas Devlieghere# RUN: | FileCheck %s --check-prefix VERIFY 87d4a974dSJonas Devlieghere 9622c563bSJonas Devlieghere# CHECK: .debug_loc contents: 10622c563bSJonas Devlieghere 11622c563bSJonas Devlieghere# CHECK: 0x00000000: 12*09080939SPavel Labath# CHECK-NEXT: (0x0000000000000000, 0x0000000000000003): DW_OP_reg5 RDI 13*09080939SPavel Labath# CHECK-NEXT: (0x0000000000000003, 0x0000000000000004): DW_OP_reg0 RAX 14622c563bSJonas Devlieghere 15622c563bSJonas Devlieghere# CHECK: 0x00000036: 16*09080939SPavel Labath# CHECK-NEXT: (0x0000000000000010, 0x0000000000000013): DW_OP_reg5 RDI 17*09080939SPavel Labath# CHECK-NEXT: (0x0000000000000013, 0x0000000000000014): DW_OP_reg0 RAX 18622c563bSJonas Devlieghere 197d4a974dSJonas Devlieghere# VERIFY: Verifying .debug_info Unit Header Chain 207d4a974dSJonas Devlieghere# VERIFY-NOT: DIE has invalid DW_AT_location encoding 217d4a974dSJonas Devlieghere 22622c563bSJonas Devlieghere# Source: 23622c563bSJonas Devlieghere# int* foo(int* i) { return i; } 24622c563bSJonas Devlieghere# int* bar(int* i) { return i; } 25622c563bSJonas Devlieghere# Compile with: 26622c563bSJonas Devlieghere# clang -g -O3 test.c -S -o debugloc.s 27622c563bSJonas Devlieghere 28622c563bSJonas Devlieghere .text 29622c563bSJonas Devlieghere .file "test.c" 30622c563bSJonas Devlieghere .globl foo 31622c563bSJonas Devlieghere .align 16, 0x90 32622c563bSJonas Devlieghere .type foo,@function 33622c563bSJonas Devliegherefoo: # @foo 34622c563bSJonas Devlieghere.Lfunc_begin0: 35622c563bSJonas Devlieghere .file 1 "test.c" 36622c563bSJonas Devlieghere .loc 1 1 0 # test.c:1:0 37622c563bSJonas Devlieghere .cfi_startproc 3825528d6dSFrancis Visoiu Mistrih# %bb.0: 39622c563bSJonas Devlieghere #DEBUG_VALUE: foo:i <- %RDI 40622c563bSJonas Devlieghere .loc 1 2 3 prologue_end # test.c:2:3 41622c563bSJonas Devlieghere movq %rdi, %rax 42622c563bSJonas Devlieghere.Ltmp0: 43622c563bSJonas Devlieghere #DEBUG_VALUE: foo:i <- %RAX 44622c563bSJonas Devlieghere retq 45622c563bSJonas Devlieghere.Ltmp1: 46622c563bSJonas Devlieghere.Lfunc_end0: 47622c563bSJonas Devlieghere .size foo, .Lfunc_end0-foo 48622c563bSJonas Devlieghere .cfi_endproc 49622c563bSJonas Devlieghere 50622c563bSJonas Devlieghere .globl bar 51622c563bSJonas Devlieghere .align 16, 0x90 52622c563bSJonas Devlieghere .type bar,@function 53622c563bSJonas Devliegherebar: # @bar 54622c563bSJonas Devlieghere.Lfunc_begin1: 55622c563bSJonas Devlieghere .loc 1 5 0 # test.c:5:0 56622c563bSJonas Devlieghere .cfi_startproc 5725528d6dSFrancis Visoiu Mistrih# %bb.0: 58622c563bSJonas Devlieghere #DEBUG_VALUE: bar:i <- %RDI 59622c563bSJonas Devlieghere .loc 1 6 3 prologue_end # test.c:6:3 60622c563bSJonas Devlieghere movq %rdi, %rax 61622c563bSJonas Devlieghere.Ltmp2: 62622c563bSJonas Devlieghere #DEBUG_VALUE: bar:i <- %RAX 63622c563bSJonas Devlieghere retq 64622c563bSJonas Devlieghere.Ltmp3: 65622c563bSJonas Devlieghere.Lfunc_end1: 66622c563bSJonas Devlieghere .size bar, .Lfunc_end1-bar 67622c563bSJonas Devlieghere .cfi_endproc 68622c563bSJonas Devlieghere 69622c563bSJonas Devlieghere .section .debug_str,"MS",@progbits,1 70622c563bSJonas Devlieghere.Linfo_string0: 71622c563bSJonas Devlieghere .asciz "clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)" # string offset=0 72622c563bSJonas Devlieghere.Linfo_string1: 73622c563bSJonas Devlieghere .asciz "test.c" # string offset=54 74622c563bSJonas Devlieghere.Linfo_string2: 75622c563bSJonas Devlieghere .asciz "/tmp" # string offset=61 76622c563bSJonas Devlieghere.Linfo_string3: 77622c563bSJonas Devlieghere .asciz "foo" # string offset=66 78622c563bSJonas Devlieghere.Linfo_string4: 79622c563bSJonas Devlieghere .asciz "int" # string offset=70 80622c563bSJonas Devlieghere.Linfo_string5: 81622c563bSJonas Devlieghere .asciz "bar" # string offset=74 82622c563bSJonas Devlieghere.Linfo_string6: 83622c563bSJonas Devlieghere .asciz "i" # string offset=78 84622c563bSJonas Devlieghere .section .debug_loc,"",@progbits 85622c563bSJonas Devlieghere.Ldebug_loc0: 86622c563bSJonas Devlieghere .quad .Lfunc_begin0-.Lfunc_begin0 87622c563bSJonas Devlieghere .quad .Ltmp0-.Lfunc_begin0 88622c563bSJonas Devlieghere .short 1 # Loc expr size 89622c563bSJonas Devlieghere .byte 85 # DW_OP_reg5 90622c563bSJonas Devlieghere .quad .Ltmp0-.Lfunc_begin0 91622c563bSJonas Devlieghere .quad .Lfunc_end0-.Lfunc_begin0 92622c563bSJonas Devlieghere .short 1 # Loc expr size 93622c563bSJonas Devlieghere .byte 80 # DW_OP_reg0 94622c563bSJonas Devlieghere .quad 0 95622c563bSJonas Devlieghere .quad 0 96622c563bSJonas Devlieghere.Ldebug_loc1: 97622c563bSJonas Devlieghere .quad .Lfunc_begin1-.Lfunc_begin0 98622c563bSJonas Devlieghere .quad .Ltmp2-.Lfunc_begin0 99622c563bSJonas Devlieghere .short 1 # Loc expr size 100622c563bSJonas Devlieghere .byte 85 # DW_OP_reg5 101622c563bSJonas Devlieghere .quad .Ltmp2-.Lfunc_begin0 102622c563bSJonas Devlieghere .quad .Lfunc_end1-.Lfunc_begin0 103622c563bSJonas Devlieghere .short 1 # Loc expr size 104622c563bSJonas Devlieghere .byte 80 # DW_OP_reg0 105622c563bSJonas Devlieghere .quad 0 106622c563bSJonas Devlieghere .quad 0 107622c563bSJonas Devlieghere .section .debug_abbrev,"",@progbits 108622c563bSJonas Devlieghere.Lsection_abbrev: 109622c563bSJonas Devlieghere .byte 1 # Abbreviation Code 110622c563bSJonas Devlieghere .byte 17 # DW_TAG_compile_unit 111622c563bSJonas Devlieghere .byte 1 # DW_CHILDREN_yes 112622c563bSJonas Devlieghere .byte 37 # DW_AT_producer 113622c563bSJonas Devlieghere .byte 14 # DW_FORM_strp 114622c563bSJonas Devlieghere .byte 19 # DW_AT_language 115622c563bSJonas Devlieghere .byte 5 # DW_FORM_data2 116622c563bSJonas Devlieghere .byte 3 # DW_AT_name 117622c563bSJonas Devlieghere .byte 14 # DW_FORM_strp 118622c563bSJonas Devlieghere .byte 16 # DW_AT_stmt_list 119622c563bSJonas Devlieghere .byte 23 # DW_FORM_sec_offset 120622c563bSJonas Devlieghere .byte 27 # DW_AT_comp_dir 121622c563bSJonas Devlieghere .byte 14 # DW_FORM_strp 122622c563bSJonas Devlieghere .ascii "\341\177" # DW_AT_APPLE_optimized 123622c563bSJonas Devlieghere .byte 25 # DW_FORM_flag_present 124622c563bSJonas Devlieghere .byte 17 # DW_AT_low_pc 125622c563bSJonas Devlieghere .byte 1 # DW_FORM_addr 126622c563bSJonas Devlieghere .byte 18 # DW_AT_high_pc 127622c563bSJonas Devlieghere .byte 6 # DW_FORM_data4 128622c563bSJonas Devlieghere .byte 0 # EOM(1) 129622c563bSJonas Devlieghere .byte 0 # EOM(2) 130622c563bSJonas Devlieghere .byte 2 # Abbreviation Code 131622c563bSJonas Devlieghere .byte 46 # DW_TAG_subprogram 132622c563bSJonas Devlieghere .byte 1 # DW_CHILDREN_yes 133622c563bSJonas Devlieghere .byte 17 # DW_AT_low_pc 134622c563bSJonas Devlieghere .byte 1 # DW_FORM_addr 135622c563bSJonas Devlieghere .byte 18 # DW_AT_high_pc 136622c563bSJonas Devlieghere .byte 6 # DW_FORM_data4 137622c563bSJonas Devlieghere .ascii "\347\177" # DW_AT_APPLE_omit_frame_ptr 138622c563bSJonas Devlieghere .byte 25 # DW_FORM_flag_present 139622c563bSJonas Devlieghere .byte 64 # DW_AT_frame_base 140622c563bSJonas Devlieghere .byte 24 # DW_FORM_exprloc 141622c563bSJonas Devlieghere .byte 3 # DW_AT_name 142622c563bSJonas Devlieghere .byte 14 # DW_FORM_strp 143622c563bSJonas Devlieghere .byte 58 # DW_AT_decl_file 144622c563bSJonas Devlieghere .byte 11 # DW_FORM_data1 145622c563bSJonas Devlieghere .byte 59 # DW_AT_decl_line 146622c563bSJonas Devlieghere .byte 11 # DW_FORM_data1 147622c563bSJonas Devlieghere .byte 39 # DW_AT_prototyped 148622c563bSJonas Devlieghere .byte 25 # DW_FORM_flag_present 149622c563bSJonas Devlieghere .byte 73 # DW_AT_type 150622c563bSJonas Devlieghere .byte 19 # DW_FORM_ref4 151622c563bSJonas Devlieghere .byte 63 # DW_AT_external 152622c563bSJonas Devlieghere .byte 25 # DW_FORM_flag_present 153622c563bSJonas Devlieghere .ascii "\341\177" # DW_AT_APPLE_optimized 154622c563bSJonas Devlieghere .byte 25 # DW_FORM_flag_present 155622c563bSJonas Devlieghere .byte 0 # EOM(1) 156622c563bSJonas Devlieghere .byte 0 # EOM(2) 157622c563bSJonas Devlieghere .byte 3 # Abbreviation Code 158622c563bSJonas Devlieghere .byte 5 # DW_TAG_formal_parameter 159622c563bSJonas Devlieghere .byte 0 # DW_CHILDREN_no 160622c563bSJonas Devlieghere .byte 2 # DW_AT_location 161622c563bSJonas Devlieghere .byte 23 # DW_FORM_sec_offset 162622c563bSJonas Devlieghere .byte 3 # DW_AT_name 163622c563bSJonas Devlieghere .byte 14 # DW_FORM_strp 164622c563bSJonas Devlieghere .byte 58 # DW_AT_decl_file 165622c563bSJonas Devlieghere .byte 11 # DW_FORM_data1 166622c563bSJonas Devlieghere .byte 59 # DW_AT_decl_line 167622c563bSJonas Devlieghere .byte 11 # DW_FORM_data1 168622c563bSJonas Devlieghere .byte 73 # DW_AT_type 169622c563bSJonas Devlieghere .byte 19 # DW_FORM_ref4 170622c563bSJonas Devlieghere .byte 0 # EOM(1) 171622c563bSJonas Devlieghere .byte 0 # EOM(2) 172622c563bSJonas Devlieghere .byte 4 # Abbreviation Code 173622c563bSJonas Devlieghere .byte 15 # DW_TAG_pointer_type 174622c563bSJonas Devlieghere .byte 0 # DW_CHILDREN_no 175622c563bSJonas Devlieghere .byte 73 # DW_AT_type 176622c563bSJonas Devlieghere .byte 19 # DW_FORM_ref4 177622c563bSJonas Devlieghere .byte 0 # EOM(1) 178622c563bSJonas Devlieghere .byte 0 # EOM(2) 179622c563bSJonas Devlieghere .byte 5 # Abbreviation Code 180622c563bSJonas Devlieghere .byte 36 # DW_TAG_base_type 181622c563bSJonas Devlieghere .byte 0 # DW_CHILDREN_no 182622c563bSJonas Devlieghere .byte 3 # DW_AT_name 183622c563bSJonas Devlieghere .byte 14 # DW_FORM_strp 184622c563bSJonas Devlieghere .byte 62 # DW_AT_encoding 185622c563bSJonas Devlieghere .byte 11 # DW_FORM_data1 186622c563bSJonas Devlieghere .byte 11 # DW_AT_byte_size 187622c563bSJonas Devlieghere .byte 11 # DW_FORM_data1 188622c563bSJonas Devlieghere .byte 0 # EOM(1) 189622c563bSJonas Devlieghere .byte 0 # EOM(2) 190622c563bSJonas Devlieghere .byte 0 # EOM(3) 191622c563bSJonas Devlieghere .section .debug_info,"",@progbits 192622c563bSJonas Devlieghere.Lsection_info: 193622c563bSJonas Devlieghere.Lcu_begin0: 194622c563bSJonas Devlieghere .long 133 # Length of Unit 195622c563bSJonas Devlieghere .short 4 # DWARF version number 196622c563bSJonas Devlieghere .long .Lsection_abbrev # Offset Into Abbrev. Section 197622c563bSJonas Devlieghere .byte 8 # Address Size (in bytes) 198622c563bSJonas Devlieghere .byte 1 # Abbrev [1] 0xb:0x7e DW_TAG_compile_unit 199622c563bSJonas Devlieghere .long .Linfo_string0 # DW_AT_producer 200622c563bSJonas Devlieghere .short 12 # DW_AT_language 201622c563bSJonas Devlieghere .long .Linfo_string1 # DW_AT_name 202622c563bSJonas Devlieghere .long .Lline_table_start0 # DW_AT_stmt_list 203622c563bSJonas Devlieghere .long .Linfo_string2 # DW_AT_comp_dir 204622c563bSJonas Devlieghere # DW_AT_APPLE_optimized 205622c563bSJonas Devlieghere .quad .Lfunc_begin0 # DW_AT_low_pc 206622c563bSJonas Devlieghere .long .Lfunc_end1-.Lfunc_begin0 # DW_AT_high_pc 207622c563bSJonas Devlieghere .byte 2 # Abbrev [2] 0x2a:0x29 DW_TAG_subprogram 208622c563bSJonas Devlieghere .quad .Lfunc_begin0 # DW_AT_low_pc 209622c563bSJonas Devlieghere .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc 210622c563bSJonas Devlieghere # DW_AT_APPLE_omit_frame_ptr 211622c563bSJonas Devlieghere .byte 1 # DW_AT_frame_base 212622c563bSJonas Devlieghere .byte 87 213622c563bSJonas Devlieghere .long .Linfo_string3 # DW_AT_name 214622c563bSJonas Devlieghere .byte 1 # DW_AT_decl_file 215622c563bSJonas Devlieghere .byte 1 # DW_AT_decl_line 216622c563bSJonas Devlieghere # DW_AT_prototyped 217622c563bSJonas Devlieghere .long 124 # DW_AT_type 218622c563bSJonas Devlieghere # DW_AT_external 219622c563bSJonas Devlieghere # DW_AT_APPLE_optimized 220622c563bSJonas Devlieghere .byte 3 # Abbrev [3] 0x43:0xf DW_TAG_formal_parameter 221622c563bSJonas Devlieghere .long .Ldebug_loc0 # DW_AT_location 222622c563bSJonas Devlieghere .long .Linfo_string6 # DW_AT_name 223622c563bSJonas Devlieghere .byte 1 # DW_AT_decl_file 224622c563bSJonas Devlieghere .byte 1 # DW_AT_decl_line 225622c563bSJonas Devlieghere .long 124 # DW_AT_type 226622c563bSJonas Devlieghere .byte 0 # End Of Children Mark 227622c563bSJonas Devlieghere .byte 2 # Abbrev [2] 0x53:0x29 DW_TAG_subprogram 228622c563bSJonas Devlieghere .quad .Lfunc_begin1 # DW_AT_low_pc 229622c563bSJonas Devlieghere .long .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc 230622c563bSJonas Devlieghere # DW_AT_APPLE_omit_frame_ptr 231622c563bSJonas Devlieghere .byte 1 # DW_AT_frame_base 232622c563bSJonas Devlieghere .byte 87 233622c563bSJonas Devlieghere .long .Linfo_string5 # DW_AT_name 234622c563bSJonas Devlieghere .byte 1 # DW_AT_decl_file 235622c563bSJonas Devlieghere .byte 5 # DW_AT_decl_line 236622c563bSJonas Devlieghere # DW_AT_prototyped 237622c563bSJonas Devlieghere .long 124 # DW_AT_type 238622c563bSJonas Devlieghere # DW_AT_external 239622c563bSJonas Devlieghere # DW_AT_APPLE_optimized 240622c563bSJonas Devlieghere .byte 3 # Abbrev [3] 0x6c:0xf DW_TAG_formal_parameter 241622c563bSJonas Devlieghere .long .Ldebug_loc1 # DW_AT_location 242622c563bSJonas Devlieghere .long .Linfo_string6 # DW_AT_name 243622c563bSJonas Devlieghere .byte 1 # DW_AT_decl_file 244622c563bSJonas Devlieghere .byte 5 # DW_AT_decl_line 245622c563bSJonas Devlieghere .long 124 # DW_AT_type 246622c563bSJonas Devlieghere .byte 0 # End Of Children Mark 247622c563bSJonas Devlieghere .byte 4 # Abbrev [4] 0x7c:0x5 DW_TAG_pointer_type 248622c563bSJonas Devlieghere .long 129 # DW_AT_type 249622c563bSJonas Devlieghere .byte 5 # Abbrev [5] 0x81:0x7 DW_TAG_base_type 250622c563bSJonas Devlieghere .long .Linfo_string4 # DW_AT_name 251622c563bSJonas Devlieghere .byte 5 # DW_AT_encoding 252622c563bSJonas Devlieghere .byte 4 # DW_AT_byte_size 253622c563bSJonas Devlieghere .byte 0 # End Of Children Mark 254622c563bSJonas Devlieghere .section .debug_ranges,"",@progbits 255622c563bSJonas Devlieghere.Ldebug_range: 256622c563bSJonas Devlieghere .section .debug_macinfo,"",@progbits 257622c563bSJonas Devlieghere .byte 0 # End Of Macro List Mark 258622c563bSJonas Devlieghere .section .debug_pubnames,"",@progbits 259622c563bSJonas Devlieghere .long .LpubNames_end0-.LpubNames_begin0 # Length of Public Names Info 260622c563bSJonas Devlieghere.LpubNames_begin0: 261622c563bSJonas Devlieghere .short 2 # DWARF Version 262622c563bSJonas Devlieghere .long .Lcu_begin0 # Offset of Compilation Unit Info 263622c563bSJonas Devlieghere .long 137 # Compilation Unit Length 264622c563bSJonas Devlieghere .long 42 # DIE offset 265622c563bSJonas Devlieghere .asciz "foo" # External Name 266622c563bSJonas Devlieghere .long 83 # DIE offset 267622c563bSJonas Devlieghere .asciz "bar" # External Name 268622c563bSJonas Devlieghere .long 0 # End Mark 269622c563bSJonas Devlieghere.LpubNames_end0: 270622c563bSJonas Devlieghere .section .debug_pubtypes,"",@progbits 271622c563bSJonas Devlieghere .long .LpubTypes_end0-.LpubTypes_begin0 # Length of Public Types Info 272622c563bSJonas Devlieghere.LpubTypes_begin0: 273622c563bSJonas Devlieghere .short 2 # DWARF Version 274622c563bSJonas Devlieghere .long .Lcu_begin0 # Offset of Compilation Unit Info 275622c563bSJonas Devlieghere .long 137 # Compilation Unit Length 276622c563bSJonas Devlieghere .long 129 # DIE offset 277622c563bSJonas Devlieghere .asciz "int" # External Name 278622c563bSJonas Devlieghere .long 0 # End Mark 279622c563bSJonas Devlieghere.LpubTypes_end0: 280622c563bSJonas Devlieghere 281622c563bSJonas Devlieghere .ident "clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)" 282622c563bSJonas Devlieghere .section ".note.GNU-stack","",@progbits 283622c563bSJonas Devlieghere .section .debug_line,"",@progbits 284622c563bSJonas Devlieghere.Lline_table_start0: 285