[Alignment][NFC] Instructions::getLoadStoreAlignment
[llvm-complete.git] / test / DebugInfo / X86 / dwarfdump-str-offsets-dwp.s
blob6620beaadd84bea5e42e9d1bba13f0eac90c368e
1 # RUN: llvm-mc -triple x86_64-unknown-linux %s -filetype=obj -o %t.o
2 # RUN: llvm-dwarfdump -v %t.o | FileCheck %s
4 # Test object to verify that dwarfdump handles dwp files with DWARF v5 string
5 # offset tables. We have 3 CUs and 2 TUs, where it is assumed that
6 # CU1 and TU1 came from one object file, CU2 and TU2 from a second object
7 # file, and CU3 from a third object file that was compiled with
8 # -gdwarf-4.
10 .section .debug_str.dwo,"MS",@progbits,1
11 str_producer:
12 .asciz "Handmade DWARF producer"
13 str_CU1:
14 .asciz "Compile_Unit_1"
15 str_CU1_dir:
16 .asciz "/home/test/CU1"
17 str_CU2:
18 .asciz "Compile_Unit_2"
19 str_CU2_dir:
20 .asciz "/home/test/CU2"
21 str_TU1:
22 .asciz "Type_Unit_1"
23 str_TU1_type:
24 .asciz "MyStruct_1"
25 str_TU2:
26 .asciz "Type_Unit_2"
27 str_TU2_type:
28 .asciz "MyStruct_2"
29 str_CU3:
30 .asciz "Compile_Unit_3"
31 str_CU3_dir:
32 .asciz "/home/test/CU3"
34 .section .debug_str_offsets.dwo,"",@progbits
35 # Object files 1's portion of the .debug_str_offsets.dwo section.
36 # CU1 and TU1 share a contribution to the string offsets table.
37 .debug_str_offsets_object_file1_start:
38 .long .debug_str_offsets_object_file1_end-.debug_str_offsets_base_1
39 .short 5 # DWARF version
40 .short 0 # Padding
41 .debug_str_offsets_base_1:
42 .long str_producer-.debug_str.dwo
43 .long str_CU1-.debug_str.dwo
44 .long str_CU1_dir-.debug_str.dwo
45 .long str_TU1-.debug_str.dwo
46 .long str_TU1_type-.debug_str.dwo
47 .debug_str_offsets_object_file1_end:
49 # Object files 2's portion of the .debug_str_offsets.dwo section.
50 # CU2 and TU2 share a contribution to the string offsets table.
51 .debug_str_offsets_object_file2_start:
52 .long .debug_str_offsets_object_file2_end-.debug_str_offsets_base_2
53 .short 5 # DWARF version
54 .short 0 # Padding
55 .debug_str_offsets_base_2:
56 .long str_producer-.debug_str.dwo
57 .long str_CU2-.debug_str.dwo
58 .long str_CU2_dir-.debug_str.dwo
59 .long str_TU2-.debug_str.dwo
60 .long str_TU2_type-.debug_str.dwo
61 .debug_str_offsets_object_file2_end:
63 # Object files 3's portion of the .debug_str_offsets.dwo section.
64 # This file is assumed to have been compiled with -gdwarf-4 and
65 # therefore contains a version 4 CU and a GNU format contribution
66 # to the .debug_str_offsets section.
67 .debug_str_offsets_object_file3_start:
68 .debug_str_offsets_base_3:
69 .long str_producer-.debug_str.dwo
70 .long str_CU3-.debug_str.dwo
71 .long str_CU3_dir-.debug_str.dwo
72 .debug_str_offsets_object_file3_end:
74 # Abbrevs are shared for all compile and type units
75 .section .debug_abbrev.dwo,"",@progbits
76 .byte 0x01 # Abbrev code
77 .byte 0x11 # DW_TAG_compile_unit
78 .byte 0x00 # DW_CHILDREN_no
79 .byte 0x25 # DW_AT_producer
80 .byte 0x1a # DW_FORM_strx
81 .byte 0x03 # DW_AT_name
82 .byte 0x1a # DW_FORM_strx
83 .byte 0x03 # DW_AT_name
84 .byte 0x1a # DW_FORM_strx
85 .byte 0x00 # EOM(1)
86 .byte 0x00 # EOM(2)
87 .byte 0x02 # Abbrev code
88 .byte 0x41 # DW_TAG_type_unit
89 .byte 0x01 # DW_CHILDREN_yes
90 .byte 0x03 # DW_AT_name
91 .byte 0x1a # DW_FORM_strx
92 .byte 0x00 # EOM(1)
93 .byte 0x00 # EOM(2)
94 .byte 0x03 # Abbrev code
95 .byte 0x13 # DW_TAG_structure_type
96 .byte 0x00 # DW_CHILDREN_no (no members)
97 .byte 0x03 # DW_AT_name
98 .byte 0x1a # DW_FORM_strx
99 .byte 0x00 # EOM(1)
100 .byte 0x00 # EOM(2)
101 .byte 0x04 # Abbrev code
102 .byte 0x11 # DW_TAG_compile_unit
103 .byte 0x00 # DW_CHILDREN_no
104 .byte 0x25 # DW_AT_producer
105 .short 0x3e82 # DW_FORM_GNU_str_index
106 .byte 0x03 # DW_AT_name
107 .short 0x3e82 # DW_FORM_GNU_str_index
108 .byte 0x03 # DW_AT_name
109 .short 0x3e82 # DW_FORM_GNU_str_index
110 .byte 0x00 # EOM(1)
111 .byte 0x00 # EOM(2)
112 .byte 0x00 # EOM(3)
113 abbrev_end:
115 .section .debug_info.dwo,"",@progbits
117 # DWARF v5 CU header.
118 CU1_5_start:
119 .long CU1_5_end-CU1_5_version # Length of Unit
120 CU1_5_version:
121 .short 5 # DWARF version number
122 .byte 1 # DWARF Unit Type
123 .byte 8 # Address Size (in bytes)
124 .long .debug_abbrev.dwo # Offset Into Abbrev. Section
125 # The compile-unit DIE, which has a DW_AT_producer, DW_AT_name
126 # and DW_AT_compdir.
127 .byte 1 # Abbreviation code
128 .byte 0 # The index of the producer string
129 .byte 1 # The index of the CU name string
130 .byte 2 # The index of the comp dir string
131 .byte 0 # NULL
132 CU1_5_end:
134 CU2_5_start:
135 .long CU2_5_end-CU2_5_version # Length of Unit
136 CU2_5_version:
137 .short 5 # DWARF version number
138 .byte 1 # DWARF Unit Type
139 .byte 8 # Address Size (in bytes)
140 .long .debug_abbrev.dwo # Offset Into Abbrev. Section
141 # The compile-unit DIE, which has a DW_AT_producer, DW_AT_name
142 # and DW_AT_compdir.
143 .byte 1 # Abbreviation code
144 .byte 0 # The index of the producer string
145 .byte 1 # The index of the CU name string
146 .byte 2 # The index of the comp dir string
147 .byte 0 # NULL
148 CU2_5_end:
150 CU3_4_start:
151 .long CU3_4_end-CU3_4_version # Length of Unit
152 CU3_4_version:
153 .short 4 # DWARF version number
154 .long .debug_abbrev.dwo # Offset Into Abbrev. Section
155 .byte 8 # Address Size (in bytes)
156 # The compile-unit DIE, which has a DW_AT_producer, DW_AT_name
157 # and DW_AT_compdir.
158 .byte 4 # Abbreviation code
159 .byte 0 # The index of the producer string
160 .byte 1 # The index of the CU name string
161 .byte 2 # The index of the comp dir string
162 .byte 0 # NULL
163 CU3_4_end:
165 .section .debug_types.dwo,"",@progbits
166 # DWARF v5 Type unit header.
167 TU1_5_start:
168 .long TU1_5_end-TU1_5_version # Length of Unit
169 TU1_5_version:
170 .short 5 # DWARF version number
171 .byte 2 # DWARF Unit Type
172 .byte 8 # Address Size (in bytes)
173 .long .debug_abbrev.dwo # Offset Into Abbrev. Section
174 .quad 0x0011223344556677 # Type Signature
175 .long TU1_5_type-TU1_5_start # Type offset
176 # The type-unit DIE, which has a name.
177 .byte 2 # Abbreviation code
178 .byte 3 # Index of the unit type name string
179 # The type DIE, which has a name.
180 TU1_5_type:
181 .byte 3 # Abbreviation code
182 .byte 4 # Index of the type name string
183 .byte 0 # NULL
184 .byte 0 # NULL
185 TU1_5_end:
187 TU2_5_start:
188 .long TU2_5_end-TU2_5_version # Length of Unit
189 TU2_5_version:
190 .short 5 # DWARF version number
191 .byte 2 # DWARF Unit Type
192 .byte 8 # Address Size (in bytes)
193 .long .debug_abbrev.dwo # Offset Into Abbrev. Section
194 .quad 0x00aabbccddeeff99 # Type Signature
195 .long TU2_5_type-TU2_5_start # Type offset
196 # The type-unit DIE, which has a name.
197 .byte 2 # Abbreviation code
198 .byte 3 # Index of the unit type name string
199 # The type DIE, which has a name.
200 TU2_5_type:
201 .byte 3 # Abbreviation code
202 .byte 4 # Index of the type name string
203 .byte 0 # NULL
204 .byte 0 # NULL
205 TU2_5_end:
207 .section .debug_cu_index,"",@progbits
208 # The index header
209 .long 2 # Version
210 .long 3 # Columns of contribution matrix
211 .long 3 # number of units
212 .long 3 # number of hash buckets in table
214 # The signatures for all CUs.
215 .quad 0xddeeaaddbbaabbee # signature 1
216 .quad 0xff00ffeeffaaff00 # signature 2
217 .quad 0xf00df00df00df00d # signature 2
218 # The indexes for both CUs.
219 .long 1 # index 1
220 .long 2 # index 2
221 .long 3 # index 3
222 # The sections to which all CUs contribute.
223 .long 1 # DW_SECT_INFO
224 .long 3 # DW_SECT_ABBREV
225 .long 6 # DW_SECT_STR_OFFSETS
227 # The starting offsets of all CU's contributions to info,
228 # abbrev and string offsets table.
229 .long CU1_5_start-.debug_info.dwo
230 .long 0
231 .long .debug_str_offsets_object_file1_start-.debug_str_offsets.dwo
232 .long CU2_5_start-.debug_info.dwo
233 .long 0
234 .long .debug_str_offsets_object_file2_start-.debug_str_offsets.dwo
235 .long CU3_4_start-.debug_info.dwo
236 .long 0
237 .long .debug_str_offsets_object_file3_start-.debug_str_offsets.dwo
239 # The lengths of all CU's contributions to info, abbrev and
240 # string offsets table.
241 .long CU1_5_end-CU1_5_start
242 .long abbrev_end-.debug_abbrev.dwo
243 .long .debug_str_offsets_object_file1_end-.debug_str_offsets_object_file1_start
244 .long CU2_5_end-CU2_5_start
245 .long abbrev_end-.debug_abbrev.dwo
246 .long .debug_str_offsets_object_file2_end-.debug_str_offsets_object_file2_start
247 .long CU3_4_end-CU3_4_start
248 .long abbrev_end-.debug_abbrev.dwo
249 .long .debug_str_offsets_object_file3_end-.debug_str_offsets_object_file3_start
251 .section .debug_tu_index,"",@progbits
252 # The index header
253 .long 2 # Version
254 .long 3 # Columns of contribution matrix
255 .long 2 # number of units
256 .long 2 # number of hash buckets in table
258 # The signatures for both TUs.
259 .quad 0xeeaaddbbaabbeedd # signature 1
260 .quad 0x00ffeeffaaff00ff # signature 2
261 # The indexes for both TUs.
262 .long 1 # index 1
263 .long 2 # index 2
264 # The sections to which both TUs contribute.
265 .long 2 # DW_SECT_TYPES
266 .long 3 # DW_SECT_ABBREV
267 .long 6 # DW_SECT_STR_OFFSETS
269 # The starting offsets of both TU's contributions to info,
270 # abbrev and string offsets table.
271 .long TU1_5_start-.debug_types.dwo
272 .long 0
273 .long .debug_str_offsets_object_file1_start-.debug_str_offsets.dwo
274 .long TU2_5_start-.debug_types.dwo
275 .long 0
276 .long .debug_str_offsets_object_file2_start-.debug_str_offsets.dwo
278 # The lengths of both TU's contributions to info, abbrev and
279 # string offsets table.
280 .long TU1_5_end-TU1_5_start
281 .long abbrev_end-.debug_abbrev.dwo
282 .long .debug_str_offsets_object_file1_end-.debug_str_offsets_object_file1_start
283 .long TU2_5_end-TU2_5_start
284 .long abbrev_end-.debug_abbrev.dwo
285 .long .debug_str_offsets_object_file2_end-.debug_str_offsets_object_file2_start
288 # Verify that the correct strings from each unit are displayed and that the
289 # index for the .debug_str_offsets section has the right values.
291 # CHECK: Compile Unit
292 # CHECK-NOT: NULL
293 # CHECK: DW_TAG_compile_unit
294 # CHECK-NEXT: DW_AT_producer [DW_FORM_strx] (indexed (00000000) string = "Handmade DWARF producer")
295 # CHECK-NEXT: DW_AT_name [DW_FORM_strx] (indexed (00000001) string = "Compile_Unit_1")
296 # CHECK-NEXT: DW_AT_name [DW_FORM_strx] (indexed (00000002) string = "/home/test/CU1")
297 # CHECK-NOT: NULL
299 # CHECK: Compile Unit
300 # CHECK-NOT: NULL
301 # CHECK: DW_TAG_compile_unit
302 # CHECK-NEXT: DW_AT_producer [DW_FORM_strx] (indexed (00000000) string = "Handmade DWARF producer")
303 # CHECK-NEXT: DW_AT_name [DW_FORM_strx] (indexed (00000001) string = "Compile_Unit_2")
304 # CHECK-NEXT: DW_AT_name [DW_FORM_strx] (indexed (00000002) string = "/home/test/CU2")
306 # CHECK: Type Unit
307 # CHECK-NOT: NULL
308 # CHECK: DW_TAG_type_unit
309 # CHECK-NEXT: DW_AT_name [DW_FORM_strx] (indexed (00000003) string = "Type_Unit_1")
310 # CHECK-NOT: NULL
311 # CHECK: DW_TAG_structure_type
312 # CHECK-NEXT: DW_AT_name [DW_FORM_strx] (indexed (00000004) string = "MyStruct_1")
314 # CHECK: Type Unit
315 # CHECK-NOT: NULL
316 # CHECK: DW_TAG_type_unit
317 # CHECK-NEXT: DW_AT_name [DW_FORM_strx] (indexed (00000003) string = "Type_Unit_2")
318 # CHECK-NOT: NULL
319 # CHECK: DW_TAG_structure_type
320 # CHECK-NEXT: DW_AT_name [DW_FORM_strx] (indexed (00000004) string = "MyStruct_2")
322 # Verify the correct offets of the compile and type units contributions in the
323 # index tables.
325 # CHECK: .debug_cu_index contents:
326 # CHECK-NOT: contents:
327 # CHECK: 1 0xddeeaaddbbaabbee [{{0x[0-9a-f]*, 0x[0-9a-f]*}}) [{{0x[0-9a-f]*, 0x[0-9a-f]*}})
328 # CHECK-SAME: [0x00000000
329 # CHECK-NEXT: 2 0xff00ffeeffaaff00 [{{0x[0-9a-f]*, 0x[0-9a-f]*}}) [{{0x[0-9a-f]*, 0x[0-9a-f]*}})
330 # CHECK-SAME: [0x0000001c
332 # CHECK: .debug_tu_index contents:
333 # CHECK-NOT: contents:
334 # CHECK: 1 0xeeaaddbbaabbeedd [{{0x[0-9a-f]*, 0x[0-9a-f]*}}) [{{0x[0-9a-f]*, 0x[0-9a-f]*}})
335 # CHECK-SAME: [0x00000000
336 # CHECK-NEXT: 2 0x00ffeeffaaff00ff [{{0x[0-9a-f]*, 0x[0-9a-f]*}}) [{{0x[0-9a-f]*, 0x[0-9a-f]*}})
337 # CHECK: [0x0000001c