xref: /llvm-project/llvm/test/tools/llvm-dwarfdump/X86/debug_loclists.s (revision def677194c43c04fcd9a45434a83f65cae1dc76a)
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