1b4c5b8f3SPavel Labath# RUN: llvm-mc %s -filetype obj -triple x86_64-pc-linux -o %t 21fbe8a82SPavel Labath# RUN: llvm-dwarfdump -debug-info -debug-loclists %t \ 3b6d77e79SGeorgii Rymar# RUN: | FileCheck %s --check-prefixes=REGULAR,BOTH 41fbe8a82SPavel Labath# RUN: llvm-dwarfdump -debug-info -debug-loclists --verbose %t \ 5b6d77e79SGeorgii Rymar# RUN: | FileCheck %s --check-prefixes=VERBOSE,BOTH 6b4c5b8f3SPavel Labath 7b4c5b8f3SPavel Labath 81fbe8a82SPavel Labath# BOTH: DW_AT_location {{.*}}(0x0000000c 91fbe8a82SPavel Labath 101fbe8a82SPavel Labath# REGULAR-NEXT: [0x0000000000000000, 0x0000000000000001): DW_OP_reg0 RAX 111fbe8a82SPavel Labath# VERBOSE-NEXT: [0x0000000000000000, 0x0000000000000001) ".text": DW_OP_reg0 RAX 121fbe8a82SPavel Labath 131fbe8a82SPavel Labath# REGULAR-NEXT: [0x0000000000000001, 0x0000000000000002): DW_OP_reg1 RDX 141fbe8a82SPavel Labath# VERBOSE-NEXT: [0x0000000000000001, 0x0000000000000002) ".text": DW_OP_reg1 RDX 151fbe8a82SPavel Labath 161fbe8a82SPavel Labath# REGULAR-NEXT: [0x0000000000000002, 0x0000000000000003): DW_OP_reg2 RCX 171fbe8a82SPavel Labath# VERBOSE-NEXT: [0x0000000000000002, 0x0000000000000003) ".text": DW_OP_reg2 RCX 181fbe8a82SPavel Labath 19a3af3ac3SPavel Labath# BOTH-NEXT: <default>: DW_OP_reg3 RBX 20a3af3ac3SPavel Labath 21a3af3ac3SPavel Labath# REGULAR-NEXT: [0x0000000000000004, 0x0000000000000005): DW_OP_reg4 RSI 22a3af3ac3SPavel Labath# VERBOSE-NEXT: [0x0000000000000004, 0x0000000000000005) ".text": DW_OP_reg4 RSI 23a3af3ac3SPavel Labath 24a3af3ac3SPavel Labath# REGULAR-NEXT: [0x0000000000000005, 0x0000000000000006): DW_OP_reg5 RDI 25a3af3ac3SPavel Labath# VERBOSE-NEXT: [0x0000000000000005, 0x0000000000000006) ".text": DW_OP_reg5 RDI 26a3af3ac3SPavel Labath 27a3af3ac3SPavel Labath# REGULAR-NEXT: [0x0000000000000006, 0x0000000000000007): DW_OP_reg6 RBP 28a3af3ac3SPavel Labath# VERBOSE-NEXT: [0x0000000000000006, 0x0000000000000007) ".text": DW_OP_reg6 RBP 29a3af3ac3SPavel Labath 30a3af3ac3SPavel Labath# REGULAR-NEXT: [0x0000000000000007, 0x0000000000000008): DW_OP_reg7 RSP 31a3af3ac3SPavel Labath# VERBOSE-NEXT: [0x0000000000000007, 0x0000000000000008) ".text": DW_OP_reg7 RSP 321fbe8a82SPavel Labath 331fbe8a82SPavel Labath# BOTH-NEXT: DW_LLE_startx_length (0x000000000000dead, 0x0000000000000001): DW_OP_reg4 RSI) 341fbe8a82SPavel Labath 35*def67719SIgor Kudrin# BOTH: locations list header: length = 0x00000056, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000 361fbe8a82SPavel Labath# BOTH-NEXT: 0x0000000c: 37a3af3ac3SPavel Labath# BOTH-NEXT: DW_LLE_startx_endx (0x0000000000000000, 0x0000000000000001): DW_OP_reg0 RAX 38a3af3ac3SPavel Labath# BOTH-NEXT: DW_LLE_startx_length (0x0000000000000001, 0x0000000000000001): DW_OP_reg1 RDX 39a3af3ac3SPavel Labath# BOTH-NEXT: DW_LLE_offset_pair (0x0000000000000002, 0x0000000000000003): DW_OP_reg2 RCX 401fbe8a82SPavel Labath 41a3af3ac3SPavel Labath# REGULAR-NEXT: <default>: DW_OP_reg3 RBX 42a3af3ac3SPavel Labath# VERBOSE-NEXT: DW_LLE_default_location() 43a3af3ac3SPavel Labath# VERBOSE-NEXT: => <default>: DW_OP_reg3 RBX 441fbe8a82SPavel Labath 45a3af3ac3SPavel Labath# REGULAR-NEXT: [0x0000000000000004, 0x0000000000000005): DW_OP_reg4 RSI 46a3af3ac3SPavel Labath# VERBOSE-NEXT: DW_LLE_start_end (0x0000000000000004, 0x0000000000000005) ".text" 47a3af3ac3SPavel Labath# VERBOSE-NEXT: => [0x0000000000000004, 0x0000000000000005) ".text": DW_OP_reg4 RSI 481fbe8a82SPavel Labath 49a3af3ac3SPavel Labath# REGULAR-NEXT: [0x0000000000000005, 0x0000000000000006): DW_OP_reg5 RDI 50a3af3ac3SPavel Labath# VERBOSE-NEXT: DW_LLE_start_length (0x0000000000000005, 0x0000000000000001) ".text" 51a3af3ac3SPavel Labath# VERBOSE-NEXT: => [0x0000000000000005, 0x0000000000000006) ".text": DW_OP_reg5 RDI 52a3af3ac3SPavel Labath 53a3af3ac3SPavel Labath# BOTH-NEXT: DW_LLE_base_addressx (0x0000000000000002) 54a3af3ac3SPavel Labath 55a3af3ac3SPavel Labath# BOTH-NEXT: DW_LLE_offset_pair (0x0000000000000000, 0x0000000000000001): DW_OP_reg6 RBP 56a3af3ac3SPavel Labath 57a3af3ac3SPavel Labath# VERBOSE-NEXT: DW_LLE_base_address (0x0000000000000007) ".text" 58a3af3ac3SPavel Labath 59a3af3ac3SPavel Labath# REGULAR-NEXT: [0x0000000000000007, 0x0000000000000008): DW_OP_reg7 RSP 601fbe8a82SPavel Labath# VERBOSE-NEXT: DW_LLE_offset_pair (0x0000000000000000, 0x0000000000000001) 61a3af3ac3SPavel Labath# VERBOSE-NEXT: => [0x0000000000000007, 0x0000000000000008) ".text": DW_OP_reg7 RSP 621fbe8a82SPavel Labath 631fbe8a82SPavel Labath# BOTH-NEXT: DW_LLE_startx_length (0x000000000000dead, 0x0000000000000001): DW_OP_reg4 RSI 641fbe8a82SPavel Labath 651fbe8a82SPavel Labath# VERBOSE-NEXT: DW_LLE_end_of_list () 66b4c5b8f3SPavel Labath 67b4c5b8f3SPavel Labath 68b4c5b8f3SPavel Labath .text 69b4c5b8f3SPavel Labathf: # @f 70b4c5b8f3SPavel Labath.Lf0: 71b4c5b8f3SPavel Labath nop 72b4c5b8f3SPavel Labath.Lf1: 73b4c5b8f3SPavel Labath nop 74b4c5b8f3SPavel Labath.Lf2: 75b4c5b8f3SPavel Labath nop 76b4c5b8f3SPavel Labath.Lf3: 77b4c5b8f3SPavel Labath nop 78b4c5b8f3SPavel Labath.Lf4: 79a3af3ac3SPavel Labath nop 80a3af3ac3SPavel Labath.Lf5: 81a3af3ac3SPavel Labath nop 82a3af3ac3SPavel Labath.Lf6: 83a3af3ac3SPavel Labath nop 84a3af3ac3SPavel Labath.Lf7: 85a3af3ac3SPavel Labath nop 86a3af3ac3SPavel Labath.Lf8: 87b4c5b8f3SPavel Labath.Lfend: 88b4c5b8f3SPavel Labath # -- End function 89b4c5b8f3SPavel Labath .section .debug_loclists,"",@progbits 90b4c5b8f3SPavel Labath .long .Ldebug_loclist_table_end0-.Ldebug_loclist_table_start0 # Length 91b4c5b8f3SPavel Labath.Ldebug_loclist_table_start0: 92b4c5b8f3SPavel Labath .short 5 # Version 93b4c5b8f3SPavel Labath .byte 8 # Address size 94b4c5b8f3SPavel Labath .byte 0 # Segment selector size 95b4c5b8f3SPavel Labath .long 0 # Offset entry count 96b4c5b8f3SPavel Labath.Lloclists_table_base0: 97b4c5b8f3SPavel Labath.Ldebug_loc0: 98a3af3ac3SPavel Labath .byte 2 # DW_LLE_startx_endx 99b4c5b8f3SPavel Labath .uleb128 0 # start idx 100a3af3ac3SPavel Labath .uleb128 1 # end idx 101b4c5b8f3SPavel Labath .byte 1 # Loc expr size 102b4c5b8f3SPavel Labath .byte 80 # super-register DW_OP_reg0 103a3af3ac3SPavel Labath 104a3af3ac3SPavel Labath .byte 3 # DW_LLE_startx_length 105a3af3ac3SPavel Labath .uleb128 1 # start idx 106a3af3ac3SPavel Labath .uleb128 .Lf2-.Lf1 # length 107b4c5b8f3SPavel Labath .byte 1 # Loc expr size 108b4c5b8f3SPavel Labath .byte 81 # super-register DW_OP_reg1 109a3af3ac3SPavel Labath 110a3af3ac3SPavel Labath .byte 4 # DW_LLE_offset_pair 111a3af3ac3SPavel Labath .uleb128 .Lf2-.Lf0 # starting offset 112a3af3ac3SPavel Labath .uleb128 .Lf3-.Lf0 # ending offset 113b4c5b8f3SPavel Labath .byte 1 # Loc expr size 114b4c5b8f3SPavel Labath .byte 82 # super-register DW_OP_reg2 115a3af3ac3SPavel Labath 116a3af3ac3SPavel Labath .byte 5 # DW_LLE_default_location 117b4c5b8f3SPavel Labath .byte 1 # Loc expr size 118b4c5b8f3SPavel Labath .byte 83 # super-register DW_OP_reg3 119a3af3ac3SPavel Labath 120a3af3ac3SPavel Labath .byte 7 # DW_LLE_start_end 121a3af3ac3SPavel Labath .quad .Lf4 # starting offset 122a3af3ac3SPavel Labath .quad .Lf5 # ending offset 123a3af3ac3SPavel Labath .byte 1 # Loc expr size 124a3af3ac3SPavel Labath .byte 84 # super-register DW_OP_reg4 125a3af3ac3SPavel Labath 126a3af3ac3SPavel Labath .byte 8 # DW_LLE_start_length 127a3af3ac3SPavel Labath .quad .Lf5 # starting offset 128a3af3ac3SPavel Labath .uleb128 .Lf6-.Lf5 # length 129a3af3ac3SPavel Labath .byte 1 # Loc expr size 130a3af3ac3SPavel Labath .byte 85 # super-register DW_OP_reg5 131a3af3ac3SPavel Labath 132a3af3ac3SPavel Labath .byte 1 # DW_LLE_base_addressx 133a3af3ac3SPavel Labath .uleb128 2 # base address 134a3af3ac3SPavel Labath 135a3af3ac3SPavel Labath .byte 4 # DW_LLE_offset_pair 136a3af3ac3SPavel Labath .uleb128 .Lf6-.Lf6 # starting offset 137a3af3ac3SPavel Labath .uleb128 .Lf7-.Lf6 # ending offset 138a3af3ac3SPavel Labath .byte 1 # Loc expr size 139a3af3ac3SPavel Labath .byte 86 # super-register DW_OP_reg6 140a3af3ac3SPavel Labath 141a3af3ac3SPavel Labath .byte 6 # DW_LLE_base_address 142a3af3ac3SPavel Labath .quad .Lf7 # base address 143a3af3ac3SPavel Labath 144a3af3ac3SPavel Labath .byte 4 # DW_LLE_offset_pair 145a3af3ac3SPavel Labath .uleb128 .Lf7-.Lf7 # starting offset 146a3af3ac3SPavel Labath .uleb128 .Lf8-.Lf7 # ending offset 147a3af3ac3SPavel Labath .byte 1 # Loc expr size 148a3af3ac3SPavel Labath .byte 87 # super-register DW_OP_reg7 149a3af3ac3SPavel Labath 150b4c5b8f3SPavel Labath .byte 3 # DW_LLE_startx_length 151b4c5b8f3SPavel Labath .uleb128 0xdead # start idx 152b4c5b8f3SPavel Labath .uleb128 .Lf1-.Lf0 # length 153b4c5b8f3SPavel Labath .byte 1 # Loc expr size 154b4c5b8f3SPavel Labath .byte 84 # super-register DW_OP_reg4 155a3af3ac3SPavel Labath 156b4c5b8f3SPavel Labath .byte 0 # DW_LLE_end_of_list 157b4c5b8f3SPavel Labath.Ldebug_loclist_table_end0: 158b4c5b8f3SPavel Labath 159b4c5b8f3SPavel Labath .section .debug_abbrev,"",@progbits 160b4c5b8f3SPavel Labath .byte 1 # Abbreviation Code 161b4c5b8f3SPavel Labath .byte 17 # DW_TAG_compile_unit 162b4c5b8f3SPavel Labath .byte 1 # DW_CHILDREN_yes 163b4c5b8f3SPavel Labath .byte 115 # DW_AT_addr_base 164b4c5b8f3SPavel Labath .byte 23 # DW_FORM_sec_offset 165b4c5b8f3SPavel Labath .ascii "\214\001" # DW_AT_loclists_base 166b4c5b8f3SPavel Labath .byte 23 # DW_FORM_sec_offset 167eafe0cf5SPavel Labath .byte 17 # DW_AT_low_pc 168eafe0cf5SPavel Labath .byte 27 # DW_FORM_addrx 169eafe0cf5SPavel Labath .byte 18 # DW_AT_high_pc 170eafe0cf5SPavel Labath .byte 6 # DW_FORM_data4 171b4c5b8f3SPavel Labath .byte 0 # EOM(1) 172b4c5b8f3SPavel Labath .byte 0 # EOM(2) 173b4c5b8f3SPavel Labath .byte 2 # Abbreviation Code 174b4c5b8f3SPavel Labath .byte 46 # DW_TAG_subprogram 175b4c5b8f3SPavel Labath .byte 1 # DW_CHILDREN_yes 176b4c5b8f3SPavel Labath .byte 17 # DW_AT_low_pc 177b4c5b8f3SPavel Labath .byte 27 # DW_FORM_addrx 178b4c5b8f3SPavel Labath .byte 18 # DW_AT_high_pc 179b4c5b8f3SPavel Labath .byte 6 # DW_FORM_data4 180b4c5b8f3SPavel Labath .byte 0 # EOM(1) 181b4c5b8f3SPavel Labath .byte 0 # EOM(2) 182b4c5b8f3SPavel Labath .byte 3 # Abbreviation Code 183b4c5b8f3SPavel Labath .byte 5 # DW_TAG_formal_parameter 184b4c5b8f3SPavel Labath .byte 0 # DW_CHILDREN_no 185b4c5b8f3SPavel Labath .byte 2 # DW_AT_location 186b4c5b8f3SPavel Labath .byte 23 # DW_FORM_sec_offset 187b4c5b8f3SPavel Labath .byte 0 # EOM(1) 188b4c5b8f3SPavel Labath .byte 0 # EOM(2) 189b4c5b8f3SPavel Labath .byte 0 # EOM(3) 190b4c5b8f3SPavel Labath .section .debug_info,"",@progbits 191b4c5b8f3SPavel Labath.Lcu_begin0: 192b4c5b8f3SPavel Labath .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit 193b4c5b8f3SPavel Labath.Ldebug_info_start0: 194b4c5b8f3SPavel Labath .short 5 # DWARF version number 195b4c5b8f3SPavel Labath .byte 1 # DWARF Unit Type 196b4c5b8f3SPavel Labath .byte 8 # Address Size (in bytes) 197b4c5b8f3SPavel Labath .long .debug_abbrev # Offset Into Abbrev. Section 198b4c5b8f3SPavel Labath .byte 1 # Abbrev [1] 0xc:0x3c DW_TAG_compile_unit 199b4c5b8f3SPavel Labath .long .Laddr_table_base0 # DW_AT_addr_base 200b4c5b8f3SPavel Labath .long .Lloclists_table_base0 # DW_AT_loclists_base 201eafe0cf5SPavel Labath .byte 0 # DW_AT_low_pc 202eafe0cf5SPavel Labath .long .Lfend-.Lf0 # DW_AT_high_pc 203b4c5b8f3SPavel Labath .byte 2 # Abbrev [2] 0x27:0x1c DW_TAG_subprogram 204b4c5b8f3SPavel Labath .byte 0 # DW_AT_low_pc 205b4c5b8f3SPavel Labath .long .Lfend-.Lf0 # DW_AT_high_pc 206b4c5b8f3SPavel Labath .byte 3 # Abbrev [3] 0x36:0xc DW_TAG_formal_parameter 207b4c5b8f3SPavel Labath .long .Ldebug_loc0 # DW_AT_location 208b4c5b8f3SPavel Labath .byte 0 # End Of Children Mark 209b4c5b8f3SPavel Labath .byte 0 # End Of Children Mark 210b4c5b8f3SPavel Labath.Ldebug_info_end0: 211b4c5b8f3SPavel Labath 212b4c5b8f3SPavel Labath .section .debug_addr,"",@progbits 213b4c5b8f3SPavel Labath .long .Ldebug_addr_end0-.Ldebug_addr_start0 # Length of contribution 214b4c5b8f3SPavel Labath.Ldebug_addr_start0: 215b4c5b8f3SPavel Labath .short 5 # DWARF version number 216b4c5b8f3SPavel Labath .byte 8 # Address size 217b4c5b8f3SPavel Labath .byte 0 # Segment selector size 218b4c5b8f3SPavel Labath.Laddr_table_base0: 219b4c5b8f3SPavel Labath .quad .Lf0 220a3af3ac3SPavel Labath .quad .Lf1 221a3af3ac3SPavel Labath .quad .Lf6 222b4c5b8f3SPavel Labath.Ldebug_addr_end0: 223