xref: /llvm-project/llvm/test/tools/llvm-dwarfdump/X86/debug_rnglists.s (revision 92c45e4ee2511399484e8af26b66ba37ad0ed8e7)
1# RUN: llvm-mc %s -filetype obj -triple x86_64-pc-linux -o %t.o
2# RUN: llvm-dwarfdump --debug-rnglists %t.o 2> %t.err | FileCheck %s --check-prefixes=TERSE,BOTH
3# RUN: FileCheck %s --allow-empty --input-file %t.err --check-prefix=ERR
4# RUN: llvm-dwarfdump -v --debug-rnglists %t.o 2> %t.err | FileCheck %s --check-prefixes=VERBOSE,BOTH
5# RUN: FileCheck %s --allow-empty --input-file %t.err --check-prefix=ERR
6
7# BOTH:         .debug_rnglists contents:
8# TERSE-NEXT:     range list header: length = 0x00000037, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
9
10# VERBOSE-NEXT: 0x{{[0-9a-f]*}}:
11# VERBOSE-SAME: range list header: length = 0x00000037, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
12
13# BOTH-NEXT:    ranges:
14# TERSE-NEXT:   [0x0000000000000010, 0x0000000000000020)
15# TERSE-NEXT:   [0x0000000000000025, 0x00000000000000a5)
16# TERSE-NEXT:   <End of list>
17# TERSE-NEXT:   [0x0000000000000100, 0x0000000000000200)
18# TERSE-NEXT:   <End of list>
19
20# VERBOSE-NEXT: 0x0000000c: [DW_RLE_start_end   ]: [0x0000000000000010, 0x0000000000000020)
21# VERBOSE-NEXT: 0x0000001d: [DW_RLE_start_length]:  0x0000000000000025, 0x0000000000000080
22# VERBOSE-SAME: => [0x0000000000000025, 0x00000000000000a5)
23# VERBOSE-NEXT: 0x00000028: [DW_RLE_end_of_list ]
24# VERBOSE-NEXT: 0x00000029: [DW_RLE_start_end   ]: [0x0000000000000100, 0x0000000000000200)
25# VERBOSE-NEXT: 0x0000003a: [DW_RLE_end_of_list ]
26
27# TERSE-NEXT:   range list header: length = 0x0000002b, format = DWARF32, version = 0x0005, addr_size = 0x04, seg_size = 0x00, offset_entry_count = 0x00000002
28
29# VERBOSE-NEXT: 0x{{[0-9a-f]*}}:
30# VERBOSE-SAME: range list header: length = 0x0000002b, format = DWARF32, version = 0x0005, addr_size = 0x04, seg_size = 0x00, offset_entry_count = 0x00000002
31
32# BOTH-NEXT:    offsets: [
33# BOTH-NEXT:      0x00000008
34# VERBOSE-SAME:   => 0x0000004f
35# BOTH-NEXT:      0x0000001b
36# VERBOSE-SAME:   => 0x00000062
37# BOTH-NEXT:    ]
38# BOTH-NEXT:    ranges:
39
40# TERSE-NEXT:   [0x00000000, 0x00000000)
41# TERSE-NEXT:   [0x00000002, 0x00000006)
42# TERSE-NEXT:   <End of list>
43# TERSE-NEXT:   [0x00000036, 0x00000136)
44# TERSE-NEXT:   <End of list>
45
46# VERBOSE-NEXT: 0x0000004f: [DW_RLE_start_end   ]: [0x00000000, 0x00000000)
47# VERBOSE-NEXT: 0x00000058: [DW_RLE_start_end   ]: [0x00000002, 0x00000006)
48# VERBOSE-NEXT: 0x00000061: [DW_RLE_end_of_list ]
49# VERBOSE-NEXT: 0x00000062: [DW_RLE_start_length]:  0x00000036, 0x00000100 => [0x00000036, 0x00000136)
50# VERBOSE-NEXT: 0x00000069: [DW_RLE_end_of_list ]
51
52# TERSE-NEXT:   range list header: length = 0x00000008, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
53
54# VERBOSE-NEXT: 0x{{[0-9a-f]*}}:
55# VERBOSE-SAME: range list header: length = 0x00000008, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
56
57# BOTH-NOT:     offsets:
58# BOTH:         ranges:
59# BOTH-NOT:     [
60
61# TERSE-NEXT:   range list header: length = 0x0000000b, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
62
63# VERBOSE-NEXT: 0x{{[0-9a-f]*}}:
64# VERBOSE-SAME: range list header: length = 0x0000000b, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
65
66# BOTH-NEXT:    ranges:
67# TERSE-NEXT:   <End of list>
68
69# VERBOSE-NEXT: 0x00000082: [DW_RLE_base_addressx]:  0x0000000000000000
70# VERBOSE-NEXT: 0x00000084: [DW_RLE_end_of_list ]
71
72# TERSE-NEXT:   range list header: length = 0x0000000c, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
73
74# VERBOSE-NEXT: 0x{{[0-9a-f]*}}:
75# VERBOSE-SAME: range list header: length = 0x0000000c, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
76
77# BOTH-NEXT:    ranges:
78# TERSE-NEXT:   [0x0000000000000000, 0x0000000000000000)
79# TERSE-NEXT:   <End of list>
80
81# VERBOSE-NEXT: 0x00000091: [DW_RLE_startx_endx]:  0x0000000000000001, 0x000000000000000a => [0x0000000000000000, 0x0000000000000000)
82# VERBOSE-NEXT: 0x00000094: [DW_RLE_end_of_list]
83
84# TERSE-NEXT:   range list header: length = 0x0000000c, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
85
86# VERBOSE-NEXT: 0x{{[0-9a-f]*}}:
87# VERBOSE-SAME: range list header: length = 0x0000000c, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
88
89# BOTH-NEXT:    ranges:
90# TERSE-NEXT:   [0x0000000000000000, 0x000000000000002a)
91# TERSE-NEXT:   <End of list>
92
93# VERBOSE-NEXT: 0x000000a1: [DW_RLE_startx_length]:  0x0000000000000002, 0x000000000000002a => [0x0000000000000000, 0x000000000000002a)
94# VERBOSE-NEXT: 0x000000a4: [DW_RLE_end_of_list ]
95
96# TERSE-NEXT:   range list header: length = 0x0000000e, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
97
98# VERBOSE-NEXT: 0x{{[0-9a-f]*}}:
99# VERBOSE-SAME: range list header: length = 0x0000000e, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
100
101# BOTH-NEXT:    ranges:
102# TERSE-NEXT:   [0x0000000000000800, 0x0000000000001000)
103# TERSE-NEXT:   <End of list>
104
105# VERBOSE-NEXT: 0x000000b1: [DW_RLE_offset_pair]:  0x0000000000000800, 0x0000000000001000 =>
106# VERBOSE-SAME:                                   [0x0000000000000800, 0x0000000000001000)
107# VERBOSE-NEXT: 0x000000b6: [DW_RLE_end_of_list]
108
109# TERSE-NEXT:   range list header: length = 0x00000017, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
110
111# VERBOSE-NEXT: 0x{{[0-9a-f]*}}:
112# VERBOSE-SAME: range list header: length = 0x00000017, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
113
114# BOTH-NEXT:    ranges:
115# TERSE-NEXT:   [0x0000000000001800, 0x0000000000002000)
116# TERSE-NEXT:   <End of list>
117
118# VERBOSE-NEXT: 0x000000c3: [DW_RLE_base_address]:  0x0000000000001000
119# VERBOSE-NEXT: 0x000000cc: [DW_RLE_offset_pair ]:  0x0000000000000800, 0x0000000000001000 =>
120# VERBOSE-SAME:                                    [0x0000000000001800, 0x0000000000002000)
121# VERBOSE-NEXT: 0x000000d1: [DW_RLE_end_of_list ]
122
123# BOTH-NOT:     range list header:
124
125# ERR-NOT:  error:
126
127.section .debug_rnglists,"",@progbits
128
129# First table (tests DW_RLE_end_of_list, start_end, and start_length encodings)
130.long 55 # Table length
131.short 5 # Version
132.byte 8  # Address size
133.byte 0  # Segment selector size
134.long 0  # Offset entry count
135
136# First range list
137.byte 6          # DW_RLE_start_end
138.quad 0x10, 0x20   # Start, end address
139.byte 7          # DW_RLE_start_length
140.quad 0x25         # Start address
141.byte 0x80, 0x01   # Length
142.byte 0          # DW_RLE_end_of_list
143
144# Second range list
145.byte 6          # DW_RLE_start_end
146.quad 0x100, 0x200 # Start, end address
147.byte 0          # DW_RLE_end_of_list
148
149# Second table (shows support for size 4 addresses)
150.long 43 # Table length
151.short 5 # Version
152.byte 4  # Address size
153.byte 0  # Segment selector size
154.long 2  # Offset entry count
155
156# Offset array
157.long 8  # Offset Entry 0
158.long 27 # Offset Entry 1
159
160# First range list
161.byte 6          # DW_RLE_start_end
162.long 0, 0         # Start, end address
163.byte 6          # DW_RLE_start_end
164.long 0x2, 0x6     # Start, end address
165.byte 0          # DW_RLE_end_of_list
166
167# Second range list
168.byte 7          # DW_RLE_start_length
169.long 0x36         # Start address
170.byte 0x80, 0x02   # Length
171.byte 0          # DW_RLE_end_of_list
172
173# Third (empty) table
174.long 8  # Table length
175.short 5 # Version
176.byte 8  # Address size
177.byte 0  # Segment selector size
178.long 0  # Offset entry count
179
180# The following entries are for encodings unsupported at the time of writing.
181# The test should be updated as these encodings are supported.
182
183# Fourth table (testing DW_RLE_base_addressx)
184.long 11 # Table length
185.short 5 # Version
186.byte 8  # Address size
187.byte 0  # Segment selector size
188.long 0  # Offset entry count
189
190# First range list
191.byte 1          # DW_RLE_base_addressx
192.byte 0            # Base address (index 0 in .debug_addr)
193.byte 0          # DW_RLE_end_of_list
194
195# Fifth table (testing DW_RLE_startx_endx)
196.long 12 # Table length
197.short 5 # Version
198.byte 8  # Address size
199.byte 0  # Segment selector size
200.long 0  # Offset entry count
201
202# First range list
203.byte 2          # DW_RLE_startx_endx
204.byte 1            # Start address (index in .debug_addr)
205.byte 10           # End address (index in .debug_addr)
206.byte 0          # DW_RLE_end_of_list
207
208# Sixth table (testing DW_RLE_startx_length)
209.long 12 # Table length
210.short 5 # Version
211.byte 8  # Address size
212.byte 0  # Segment selector size
213.long 0  # Offset entry count
214
215# First range list
216.byte 3          # DW_RLE_startx_length
217.byte 2            # Start address (index in .debug_addr)
218.byte 42           # Length
219.byte 0          # DW_RLE_end_of_list
220
221# Seventh table (testing DW_RLE_offset_pair)
222.long 14 # Table length
223.short 5 # Version
224.byte 8  # Address size
225.byte 0  # Segment selector size
226.long 0  # Offset entry count
227
228# First range list
229.byte 4          # DW_RLE_offset_pair
230.byte 0x80, 0x10   # Start offset
231.byte 0x80, 0x20   # End offset (index in .debug_addr)
232.byte 0          # DW_RLE_end_of_list
233
234# Eigth table (testing DW_RLE_base_address and its impact
235# on DW_RLE_offset_pair)
236.long 23 # Table length
237.short 5 # Version
238.byte 8  # Address size
239.byte 0  # Segment selector size
240.long 0  # Offset entry count
241
242# First range list
243.byte 5          # DW_RLE_base_address
244.quad 0x1000       # Base address
245.byte 4          # DW_RLE_offset_pair
246.byte 0x80, 0x10 # Start offset
247.byte 0x80, 0x20 # End offset
248.byte 0          # DW_RLE_end_of_list
249