Follow up to d0858bffa11, add missing REQUIRES x86
[llvm-project.git] / llvm / test / tools / yaml2obj / ELF / DWARF / debug-line.yaml
blobc4e2fb25623721cea404ce5f9fe6fc00460ed3a9
1 ## Test that yaml2obj emits .debug_line section.
3 ## a) Generate the .debug_line section from the "DWARF" entry.
5 ## Generate and verify a little endian DWARF32 .debug_line section.
7 # RUN: yaml2obj --docnum=1 -DENDIAN=ELFDATA2LSB %s -o %t1.le.o
8 # RUN: llvm-readobj --sections --section-data %t1.le.o | \
9 # RUN:   FileCheck %s -DSIZE=50 -DADDRALIGN=1 --check-prefixes=SHDR,DWARF-LE-CONTENT
11 #                  SHDR: Index: 1
12 #             SHDR-NEXT: Name: .debug_line (1)
13 #             SHDR-NEXT: Type: SHT_PROGBITS (0x1)
14 #             SHDR-NEXT: Flags [ (0x0)
15 #             SHDR-NEXT: ]
16 #             SHDR-NEXT: Address: 0x0
17 #             SHDR-NEXT: Offset: 0x40
18 #             SHDR-NEXT: Size: [[SIZE]]
19 #             SHDR-NEXT: Link: 0
20 #             SHDR-NEXT: Info: 0
21 #             SHDR-NEXT: AddressAlignment: [[ADDRALIGN]]
22 #             SHDR-NEXT: EntrySize: 0
23 # DWARF-LE-CONTENT-NEXT: SectionData (
24 # DWARF-LE-CONTENT-NEXT:   0000: 70000000 02003200 00000102 03040501
25 ##                               |        |   |        | |  | | | |
26 ##                               |        |   |        | |  | | | +- standard_opcode_lengths[DW_LNS_copy] (1-byte) 0x01
27 ##                               |        |   |        | |  | | +- opcode_base (1-byte) 0x05
28 ##                               |        |   |        | |  | +- line_range (1-byte) 0x04
29 ##                               |        |   |        | |  +- line_base (signed 1-byte) 0x03
30 ##                               |        |   |        | +- default_is_stmt (1-byte) 0x02
31 ##                               |        |   |        +- minimum_instruction_length (1-byte) 0x01
32 ##                               |        |   +-------- prologue_length (4-byte) 50
33 ##                               |        +--- version (2-byte) 0x02
34 ##                               +------- unit_length (4-byte) 0x70
36 # DWARF-LE-CONTENT-NEXT:   0010: 02030405 06070809 64697231 00646972
37 ##                               | | | |  | | | |  |          |
38 ##                               | | | |  | | | |  |          +----- include_directories[2] "dir2\0"
39 ##                               | | | |  | | | |  +---------- include_directories[1] "dir1\0"
40 ##                               | | | |  | | | +- standard_opcode_lengths[DW_LNS_fixed_advance_pc] (1-byte) 0x09
41 ##                               | | | |  | | +- standard_opcode_lengths[DW_LNS_const_add_pc] (1-byte) 0x08
42 ##                               | | | |  | +- standard_opcode_lengths[DW_LNS_set_basic_block] (1-byte) 0x07
43 ##                               | | | |  +- standard_opcode_lengths[DW_LNS_negate_stmt] (1-byte) 0x06
44 ##                               | | | +- standard_opcode_lengths[DW_LNS_set_column] (1-byte) 0x05
45 ##                               | | +- standard_opcode_lengths[DW_LNS_set_file] (1-byte) 0x04
46 ##                               | +- standard_opcode_lengths[DW_LNS_advance_line] (1-byte) 0x03
47 ##                               +- standard_opcode_lengths[DW_LNS_advance_pc] (1-byte) 0x02
49 # DWARF-LE-CONTENT-NEXT:   0020: 32000061 2E630001 0203622E 63000203
50 ##                               |   | |        |  | | |        | |
51 ##                               |   | |        |  | | |        | +- ModTime (ULEB128) 0x03
52 ##                               |   | |        |  | | |        +- DirIndex (ULEB128) 0x02
53 ##                               |   | |        |  | | +-------- file_names[2] "b.c\0"
54 ##                               |   | |        |  | +- Length (ULEB128) 0x03
55 ##                               |   | |        |  +- ModTime (ULEB128) 0x02
56 ##                               |   | |        +- DirIndex (ULEB128) 0x01
57 ##                               |   | +-------- file_names[1] "a.c\0"
58 ##                               |   +- terminating entry (1-byte) 0x00
59 ##                               +--- the last two bytes of "dir2\0"
61 # DWARF-LE-CONTENT-NEXT:   0030: 0400
62 ##                               | |
63 ##                               | +- terminating entry (1-byte) 0x00
64 ##                               +- Length (ULEB128) 0x04
65 # DWARF-LE-CONTENT-NEXT: )
67 --- !ELF
68 FileHeader:
69   Class: ELFCLASS64
70   Data:  [[ENDIAN]]
71   Type:  ET_EXEC
72 DWARF:
73   debug_line:
74     - Length:         0x70
75       Version:        2
76       PrologueLength: 50
77       MinInstLength:  1
78       DefaultIsStmt:  2
79       LineBase:       3
80       LineRange:      4
81       OpcodeBase:     5
82       StandardOpcodeLengths: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
83       IncludeDirs:
84         - dir1
85         - dir2
86       Files:
87         - Name:    "a.c"
88           DirIdx:  1
89           ModTime: 2
90           Length:  3
91         - Name:    "b.c"
92           DirIdx:  2
93           ModTime: 3
94           Length:  4
96 ## Generate and verify a big endian DWARF32 .debug_line section.
98 # RUN: yaml2obj --docnum=1 -DENDIAN=ELFDATA2MSB %s -o %t1.be.o
99 # RUN: llvm-readobj --sections --section-data %t1.be.o | \
100 # RUN:   FileCheck %s -DSIZE=50 -DADDRALIGN=1 --check-prefixes=SHDR,DWARF-BE-CONTENT
102 # DWARF-BE-CONTENT-NEXT: SectionData (
103 # DWARF-BE-CONTENT-NEXT:   0000: 00000070 00020000 00320102 03040501
104 ##                               |        |   |        | |  | | | |
105 ##                               |        |   |        | |  | | | +- standard_opcode_lengths[DW_LNS_copy] (1-byte) 0x01
106 ##                               |        |   |        | |  | | +- opcode_base (1-byte) 0x05
107 ##                               |        |   |        | |  | +- line_range (1-byte) 0x04
108 ##                               |        |   |        | |  +- line_base (signed 1-byte) 0x03
109 ##                               |        |   |        | +- default_is_stmt (1-byte) 0x02
110 ##                               |        |   |        +- minimum_instruction_length (1-byte) 0x01
111 ##                               |        |   +-------- prologue_length (4-byte) 50
112 ##                               |        +--- version (2-byte) 0x02
113 ##                               +------- unit_length (4-byte) 0x70
115 # DWARF-BE-CONTENT-NEXT:   0010: 02030405 06070809 64697231 00646972
116 ##                               | | | |  | | | |  |          |
117 ##                               | | | |  | | | |  |          +----- include_directories[2] "dir2\0"
118 ##                               | | | |  | | | |  +---------- include_directories[1] "dir1\0"
119 ##                               | | | |  | | | +- standard_opcode_lengths[DW_LNS_fixed_advance_pc] (1-byte) 0x09
120 ##                               | | | |  | | +- standard_opcode_lengths[DW_LNS_const_add_pc] (1-byte) 0x08
121 ##                               | | | |  | +- standard_opcode_lengths[DW_LNS_set_basic_block] (1-byte) 0x07
122 ##                               | | | |  +- standard_opcode_lengths[DW_LNS_negate_stmt] (1-byte) 0x06
123 ##                               | | | +- standard_opcode_lengths[DW_LNS_set_column] (1-byte) 0x05
124 ##                               | | +- standard_opcode_lengths[DW_LNS_set_file] (1-byte) 0x04
125 ##                               | +- standard_opcode_lengths[DW_LNS_advance_line] (1-byte) 0x03
126 ##                               +- standard_opcode_lengths[DW_LNS_advance_pc] (1-byte) 0x02
128 # DWARF-BE-CONTENT-NEXT:   0020: 32000061 2E630001 0203622E 63000203
129 ##                               |   | |        |  | | |        | |
130 ##                               |   | |        |  | | |        | +- ModTime (ULEB128) 0x03
131 ##                               |   | |        |  | | |        +- DirIndex (ULEB128) 0x02
132 ##                               |   | |        |  | | +-------- file_names[2] "b.c\0"
133 ##                               |   | |        |  | +- Length (ULEB128) 0x03
134 ##                               |   | |        |  +- ModTime (ULEB128) 0x02
135 ##                               |   | |        +- DirIndex (ULEB128) 0x01
136 ##                               |   | +-------- file_names[1] "a.c\0"
137 ##                               |   +- terminating entry (1-byte) 0x00
138 ##                               +--- the last two bytes of "dir2\0"
140 # DWARF-BE-CONTENT-NEXT:   0030: 0400
141 ##                               | |
142 ##                               | +- terminating entry (1-byte) 0x00
143 ##                               +- Length (ULEB128) 0x04
144 # DWARF-BE-CONTENT-NEXT: )
146 ## b) Generate the .debug_line section from raw section content.
148 # RUN: yaml2obj --docnum=2 %s -o %t2.o
149 # RUN: llvm-readobj --sections --section-data %t2.o | \
150 # RUN:   FileCheck %s -DSIZE=3 -DADDRALIGN=0 --check-prefixes=SHDR,ARBITRARY-CONTENT
152 #      ARBITRARY-CONTENT: SectionData (
153 # ARBITRARY-CONTENT-NEXT:   0000: 112233 |."3|
154 # ARBITRARY-CONTENT-NEXT: )
156 --- !ELF
157 FileHeader:
158   Class: ELFCLASS64
159   Data:  ELFDATA2LSB
160   Type:  ET_EXEC
161 Sections:
162   - Name:    .debug_line
163     Type:    SHT_PROGBITS
164     Content: "112233"
166 ## c) Generate the .debug_line section when the "Size" is specified.
168 # RUN: yaml2obj --docnum=3 %s -o %t3.o
169 # RUN: llvm-readobj --sections --section-data %t3.o | \
170 # RUN:   FileCheck %s -DSIZE=16 -DADDRALIGN=0 --check-prefixes=SHDR,SIZE
172 #      SIZE: SectionData (
173 # SIZE-NEXT:   0000: 00000000 00000000 00000000 00000000 |................|
174 # SIZE-NEXT: )
176 --- !ELF
177 FileHeader:
178   Class: ELFCLASS64
179   Data:  ELFDATA2LSB
180   Type:  ET_EXEC
181 Sections:
182   - Name: .debug_line
183     Type: SHT_PROGBITS
184     Size: 0x10
186 ## d) Test that yaml2obj emits an error message when both the "Size" and the
187 ## "debug_line" entry are specified at the same time.
189 # RUN: not yaml2obj --docnum=4 %s 2>&1 | FileCheck %s --check-prefix=ERROR
191 # ERROR: yaml2obj: error: cannot specify section '.debug_line' contents in the 'DWARF' entry and the 'Content' or 'Size' in the 'Sections' entry at the same time
193 --- !ELF
194 FileHeader:
195   Class: ELFCLASS64
196   Data:  ELFDATA2LSB
197   Type:  ET_EXEC
198 Sections:
199   - Name: .debug_line
200     Type: SHT_PROGBITS
201     Size: 0x10
202 DWARF:
203   debug_line:
204     - Length:                0x70
205       Version:               2
206       PrologueLength:        50
207       MinInstLength:         1
208       DefaultIsStmt:         1
209       LineBase:              1
210       LineRange:             14
211       OpcodeBase:            13
212       StandardOpcodeLengths: []
214 ## e) Test that yaml2obj emits an error message when both the "Content" and the
215 ## "debug_line" entry are specified at the same time.
217 # RUN: not yaml2obj --docnum=5 %s 2>&1 | FileCheck %s --check-prefix=ERROR
219 --- !ELF
220 FileHeader:
221   Class: ELFCLASS64
222   Data:  ELFDATA2LSB
223   Type:  ET_EXEC
224 Sections:
225   - Name:    .debug_line
226     Type:    SHT_PROGBITS
227     Content: "00"
228 DWARF:
229   debug_line:
230     - Length:                0x70
231       Version:               2
232       PrologueLength:        50
233       MinInstLength:         1
234       DefaultIsStmt:         1
235       LineBase:              1
236       LineRange:             14
237       OpcodeBase:            13
238       StandardOpcodeLengths: []
240 ## f) Test that all the properties can be overridden by the section header when
241 ## the "debug_line" entry doesn't exist.
243 # RUN: yaml2obj --docnum=6 %s -o %t6.o
244 # RUN: llvm-readelf --sections %t6.o | FileCheck %s --check-prefix=OVERRIDDEN
246 #      OVERRIDDEN: [Nr] Name        Type   Address          Off    Size   ES Flg Lk Inf Al
247 #      OVERRIDDEN: [ 1] .debug_line STRTAB 0000000000002020 000050 000011 01   A  2   1  2
248 # OVERRIDDEN-NEXT: [ 2] .sec        STRTAB 0000000000000000 000061 000000 00      0   0  0
250 --- !ELF
251 FileHeader:
252   Class: ELFCLASS64
253   Data:  ELFDATA2LSB
254   Type:  ET_EXEC
255 Sections:
256   - Name:         .debug_line
257     Type:         SHT_STRTAB  # SHT_PROGBITS by default.
258     Flags:        [SHF_ALLOC] # 0 by default.
259     Link:         .sec        # 0 by default.
260     EntSize:      1           # 0 by default.
261     Info:         1           # 0 by default.
262     AddressAlign: 2           # 0 by default.
263     Address:      0x2020      # 0x00 by default.
264     Offset:       0x50        # 0x40 for the first section.
265     Size:         0x11        # Set the "Size" so that we can reuse the check tag "OVERRIDDEN".
266   - Name:         .sec        # Linked by .debug_line.
267     Type:         SHT_STRTAB
269 ## g) Test that all the properties can be overridden by the section header when
270 ## the "debug_line" entry exists.
272 # RUN: yaml2obj --docnum=7 %s -o %t7.o
273 # RUN: llvm-readelf --sections %t7.o | FileCheck %s --check-prefix=OVERRIDDEN
275 --- !ELF
276 FileHeader:
277   Class: ELFCLASS64
278   Data:  ELFDATA2LSB
279   Type:  ET_EXEC
280 Sections:
281   - Name:         .debug_line
282     Type:         SHT_STRTAB  # SHT_PROGBITS by default.
283     Flags:        [SHF_ALLOC] # 0 by default.
284     Link:         .sec        # 0 by default.
285     EntSize:      1           # 0 by default.
286     Info:         1           # 0 by default.
287     AddressAlign: 2           # 1 by default.
288     Address:      0x2020      # 0x00 by default.
289     Offset:       0x50        # 0x40 for the first section.
290   - Name:         .sec        # Linked by .debug_line.
291     Type:         SHT_STRTAB
292 DWARF:
293   debug_line:
294     - Length:                0x70
295       Version:               2
296       PrologueLength:        50
297       MinInstLength:         1
298       DefaultIsStmt:         1
299       LineBase:              1
300       LineRange:             14
301       OpcodeBase:            13
302       StandardOpcodeLengths: []
304 ## h) Test that the address size is inferred from the target machine.
306 # RUN: yaml2obj --docnum=8 -DBITS=64 -DADDR=0x1234567890abcdef %s -o %t8.64-bit.o
307 # RUN: llvm-readelf --hex-dump=.debug_line %t8.64-bit.o | \
308 # RUN:   FileCheck %s --check-prefix=ADDRSIZE -DADDR="efcdab90 78563412"
310 #      ADDRSIZE: Hex dump of section '.debug_line':
311 # ADDRSIZE-NEXT: 0x00000000 34120000 02003412 00000101 010e0d00 4.....4.........
312 ##                          ^-------                            unit_length (4-byte)
313 ##                                   ^---                       version (2-byte)
314 ##                                       ^--------              header_length (4-byte)
315 ##                                                ^-            minimum_instruction_length (1-byte)
316 ##                                                  ^-          default_is_stmt (1-byte)
317 ##                                                     ^-       line_base (1-byte)
318 ##                                                       ^-     line_range (1-byte)
319 ##                                                         ^-   opcode_base (1-byte)
320 ##                                                           ^- null byte for terminating include_directories
321 # ADDRSIZE-NEXT: 0x00000010 00000902 [[ADDR]]
322 ##                          ^-                                  null byte for terminating file_names
323 ##                            ^-                                DW_LNS_extended_op
324 ##                              ^-                              extended op length (ULEB128) 0x09
325 ##                                ^-                            DW_LNE_set_address
326 ##                                   ^-------                   address
328 # RUN: yaml2obj --docnum=8 -DBITS=32 -DADDR=0x12345678 %s -o %t8.32-bit.o
329 # RUN: llvm-readelf --hex-dump=.debug_line %t8.32-bit.o | \
330 # RUN:   FileCheck %s --check-prefix=ADDRSIZE -DADDR="78563412"
332 --- !ELF
333 FileHeader:
334   Class: ELFCLASS[[BITS]]
335   Data:  ELFDATA2LSB
336   Type:  ET_EXEC
337 DWARF:
338   debug_line:
339     - Length:                0x1234
340       Version:               2
341       PrologueLength:        0x1234
342       MinInstLength:         1
343       DefaultIsStmt:         1
344       LineBase:              1
345       LineRange:             14
346       OpcodeBase:            13
347       StandardOpcodeLengths: []
348       Opcodes:
349         - Opcode:    DW_LNS_extended_op
350           ExtLen:    9
351           SubOpcode: DW_LNE_set_address
352           Data:      [[ADDR]]
354 ## i) Test that yaml2obj is able to emit correct opcodes.
356 # RUN: yaml2obj --docnum=9 %s -o %t9.o
357 # RUN: llvm-readelf --hex-dump=.debug_line %t9.o | FileCheck %s --check-prefix=OPCODES
359 #      OPCODES: Hex dump of section '.debug_line':
360 # OPCODES-NEXT: 0x00000000 34120000 04003412 00000101 01010e0d 4.....4.........
361 ##                         ^-------                            unit_length (4-byte)
362 ##                                  ^---                       version (2-byte)
363 ##                                      ^--------              header_length (4-byte)
364 ##                                               ^-            minimum_instruction_length (1-byte)
365 ##                                                 ^-          maximum_operations_per_instruction (1-byte)
366 ##                                                    ^-       default_is_stmt (1-byte)
367 ##                                                      ^-     line_base (1-byte)
368 ##                                                        ^-   line_range (1-byte)
369 ##                                                          ^- opcode_base (1-byte)
370 # OPCODES-NEXT: 0x00000010 00000102 b42403b4 2404b424 05b42406 .....$..$..$..$.
371 ##                         ^-                                  null byte for terminating include_directories
372 ##                           ^-                                null byte for terminating file_names
373 ##                             ^-                              DW_LNS_copy (1-byte)
374 ##                               ^-                            DW_LNS_advance_pc
375 ##                                  ^---                       operands[0] (ULEB128) 0x1234
376 ##                                      ^-                     DW_LNS_advance_line
377 ##                                        ^----                operands[0] (SLEB128) 0x1234
378 ##                                             ^-              DW_LNS_set_file
379 ##                                               ^---          operands[0] (ULEB128) 0x1234
380 ##                                                    ^-       DW_LNS_set_column
381 ##                                                      ^---   operands[0] (ULEB128) 0x1234
382 ##                                                          ^- DW_LNS_negate_stmt
383 # OPCODES-NEXT: 0x00000020 07080934 120a0b0c b4240009 01000902 ...4.....$......
384 ##                         ^-                                  DW_LNS_set_basic_block
385 ##                           ^-                                DW_LNS_const_add_pc
386 ##                             ^-                              DW_LNS_fixed_advance_pc
387 ##                               ^----                         operands[0] (uhalf, 2-byte)
388 ##                                    ^-                       DW_LNS_set_prologue_end
389 ##                                      ^-                     DW_LNS_set_epilogue_begin
390 ##                                        ^-                   DW_LNS_set_isa
391 ##                                           ^---              operands[0] (ULEB128) 0x1234
392 ##                                               ^-            DW_LNS_extended_op
393 ##                                                 ^-          extended op length (ULEB128) 0x09
394 ##                                                    ^-       DW_LNE_end_sequence
395 ##                                                      ^-     DW_LNS_extended_op
396 ##                                                        ^-   extended op length (ULEB128) 0x09
397 ##                                                          ^- DW_LNE_set_address
398 # OPCODES-NEXT: 0x00000030 34120000 00000000 00090361 62636400 4..........abcd.
399 ##                         ^----------------                   operands[0] (8-byte)
400 ##                                           ^-                DW_LNS_extended_op
401 ##                                             ^-              extended op length (ULEB128) 0x09
402 ##                                               ^-            DW_LNE_define_file
403 ##                                                 ^---------- operands[0] "abcd\0"
404 # OPCODES-NEXT: 0x00000040 b424b424 b4240009 04b424            .$.$.$....$
405 ##                         ^---                                operands[1] (ULEB128) 0x1234
406 ##                             ^---                            operands[2] (ULEB128) 0x1234
407 ##                                  ^---                       operands[3] (ULEB128) 0x1234
408 ##                                      ^-                     DW_LNS_extended_op
409 ##                                        ^-                   extended op length (ULEB128) 0x09
410 ##                                           ^-                DW_LNE_set_discriminator
411 ##                                             ^---            operands[0] (ULEB128) 0x1234
413 --- !ELF
414 FileHeader:
415   Class: ELFCLASS64
416   Data:  ELFDATA2LSB
417   Type:  ET_EXEC
418 DWARF:
419   debug_line:
420     - Length:                0x1234
421       Version:               4
422       PrologueLength:        0x1234
423       MinInstLength:         1
424       MaxOpsPerInst:         1
425       DefaultIsStmt:         1
426       LineBase:              1
427       LineRange:             14
428       OpcodeBase:            13
429       StandardOpcodeLengths: []
430       Opcodes:
431         - Opcode:    DW_LNS_copy
432         - Opcode:    DW_LNS_advance_pc
433           Data:      0x1234
434         - Opcode:    DW_LNS_advance_line
435           SData:     0x1234
436         - Opcode:    DW_LNS_set_file
437           Data:      0x1234
438         - Opcode:    DW_LNS_set_column
439           Data:      0x1234
440         - Opcode:    DW_LNS_negate_stmt
441         - Opcode:    DW_LNS_set_basic_block
442         - Opcode:    DW_LNS_const_add_pc
443         - Opcode:    DW_LNS_fixed_advance_pc
444           Data:      0x1234
445         - Opcode:    DW_LNS_set_prologue_end
446         - Opcode:    DW_LNS_set_epilogue_begin
447         - Opcode:    DW_LNS_set_isa
448           Data:      0x1234
449         - Opcode:    DW_LNS_extended_op
450           ExtLen:    0x09
451           SubOpcode: DW_LNE_end_sequence
452         - Opcode:    DW_LNS_extended_op
453           ExtLen:    0x09
454           SubOpcode: DW_LNE_set_address
455           Data:      0x1234
456         - Opcode:    DW_LNS_extended_op
457           ExtLen:    0x09
458           SubOpcode: DW_LNE_define_file
459           FileEntry:
460             Name:    abcd
461             DirIdx:  0x1234
462             ModTime: 0x1234
463             Length:  0x1234
464         - Opcode:    DW_LNS_extended_op
465           ExtLen:    0x09
466           SubOpcode: DW_LNE_set_discriminator
467           Data:      0x1234
469 ## j) Test that yaml2obj is able to infer the length and header_length fields.
471 # RUN: yaml2obj --docnum=10 %s -o %t10.o
472 # RUN: llvm-readelf --hex-dump=.debug_line %t10.o | FileCheck %s --check-prefix=INFER-LENGTH
474 #      INFER-LENGTH: Hex dump of section '.debug_line':
475 # INFER-LENGTH-NEXT: 0x00000000 2e000000 04002500 00000101 01fb0e04 ......%.........
476 ##                              ^-------                            unit_length (4-byte) 0x2e
477 ##                                       ^---                       version (2-byte)
478 ##                                           ^--------              header_length (4-byte) 0x25
479 ##                                                    ^-            minimum_instruction_length (1-byte)
480 ##                                                      ^-          maximum_operations_per_instruction (1-byte)
481 ##                                                         ^-       default_is_stmt (1-byte)
482 ##                                                           ^-     line_base (1-byte) -5
483 ##                                                             ^-   line_range (1-byte)
484 ##                                                               ^- opcode_base (1-byte)
485 # INFER-LENGTH-NEXT: 0x00000010 00010174 656d7031 0074656d 70320000 ...temp1.temp2..
486 ##                              ^-----                              standard_opcode_lengths (3-byte)
487 ##                                    ^-------------                include_directories[1] "temp1\0"
488 ##                                                  ^------------   include_directories[2] "temp1\0"
489 ##                                                               ^- include_directories null byte
490 # INFER-LENGTH-NEXT: 0x00000020 612e6300 01000062 2e630002 00000000 a.c....b.c......
491 ##                              ^-------                            file_names[1] file name "a.c\0"
492 ##                                       ^-                         file_names[1] directory index (ULEB128) 0x01
493 ##                                         ^-                       file_names[1] file length (ULEB128) 0x00
494 ##                                           ^-                     file_names[1] modification time 0x00
495 ##                                             ^--------            file_names[2] file name "b.c\0"
496 ##                                                      ^-          file_names[2] directory index (ULEB128) 0x02
497 ##                                                         ^-       file_names[2] file length (ULEB128) 0x00
498 ##                                                           ^-     file_names[2] modification time 0x00
499 ##                                                             ^-   file_names null byte
500 ##                                                               ^- DW_LNS_extended_op
501 # INFER-LENGTH-NEXT: 0x00000030 0101ffff ffff2500 00000000 00000400 ......%.........
502 ##                              ^-                                  extended op length (ULEB128) 0x01
503 ##                                ^-                                DW_LNE_end_sequence
504 ##                                  ^--------------------------     unit_length (12-byte)
505 ##                                                             ^--- version (2-byte)
506 # INFER-LENGTH-NEXT: 0x00000040 18000000 00000000 010101fb 0e040001 ................
507 ##                              ^----------------                   header_length (8-byte)
508 ##                                                ^-                minimum_instruction_length (1-byte)
509 ##                                                  ^-              maximum_operations_per_instruction (1-byte)
510 ##                                                    ^-            default_is_stmt (1-byte)
511 ##                                                      ^-          line_base (1-byte) -5
512 ##                                                         ^-       line_range (1-byte)
513 ##                                                           ^-     opcode_base (1-byte)
514 ##                                                             ^--- standard_opcode_lengths (3-byte)
515 # INFER-LENGTH-NEXT: 0x00000050 0174656d 70330000 632e6300 01000000 .temp3..c.c.....
516 ##                              --
517 ##                                ^------------                     include_directories[1] "temp3\0"
518 ##                                             ^-                   include_directories null byte
519 ##                                                ^-------          file_names[1] file name "a.c\0"
520 ##                                                         ^-       file_names[1] directory index (ULEB128) 0x01
521 ##                                                           ^-     file_names[1] file length (ULEB128) 0x00
522 ##                                                             ^-   file_names[1] modification time 0x00
523 ##                                                               ^- file_names null byte
524 # INFER-LENGTH-NEXT: 0x00000060 000101                              ...
525 ##                              ^-                                  DW_LNS_extended_op
526 ##                                ^-                                extended op length (ULEB128) 0x01
527 ##                                  ^-                              DW_LNE_end_sequence
529 --- !ELF
530 FileHeader:
531   Class: ELFCLASS64
532   Data:  ELFDATA2LSB
533   Type:  ET_EXEC
534 DWARF:
535   debug_line:
536     - Version:               4
537       MinInstLength:         1
538       MaxOpsPerInst:         1
539       DefaultIsStmt:         1
540       LineBase:              251
541       LineRange:             14
542       OpcodeBase:            4
543       StandardOpcodeLengths: [ 0, 1, 1 ]
544       IncludeDirs:
545         - temp1
546         - temp2
547       Files:
548         - Name:    a.c
549           DirIdx:  1
550           ModTime: 0
551           Length:  0
552         - Name:    b.c
553           DirIdx:  2
554           ModTime: 0
555           Length:  0
556       Opcodes:
557         - Opcode:    DW_LNS_extended_op
558           ExtLen:    1
559           SubOpcode: DW_LNE_end_sequence
560     - Format:                DWARF64
561       Version:               4
562       MinInstLength:         1
563       MaxOpsPerInst:         1
564       DefaultIsStmt:         1
565       LineBase:              251
566       LineRange:             14
567       OpcodeBase:            4
568       StandardOpcodeLengths: [ 0, 1, 1 ]
569       IncludeDirs:
570         - temp3
571       Files:
572         - Name:    c.c
573           DirIdx:  1
574           ModTime: 0
575           Length:  0
576       Opcodes:
577         - Opcode:    DW_LNS_extended_op
578           ExtLen:    1
579           SubOpcode: DW_LNE_end_sequence
581 ## k) Test that we can omit the include_directories, file_names and opcodes
582 ## fields of the line table.
584 # RUN: yaml2obj --docnum=11 %s -o %t11.o
585 # RUN: llvm-readelf --hex-dump=.debug_line %t11.o | \
586 # RUN:   FileCheck %s --check-prefix=OMIT-FIELDS
588 #      OMIT-FIELDS: Hex dump of section '.debug_line':
589 # OMIT-FIELDS-NEXT: 0x00000000 11000000 04000b00 00000101 01fb0e04 ................
590 ##                             ^-------                            unit_length (4-byte)
591 ##                                      ^---                       version (2-byte)
592 ##                                          ^--------              header_length (4-byte)
593 ##                                                   ^-            minimum_instruction_length (1-byte)
594 ##                                                     ^-          maximum_operations_per_instruction (1-byte)
595 ##                                                        ^-       default_is_stmt (1-byte)
596 ##                                                          ^-     line_base (1-byte) -5
597 ##                                                            ^-   line_range (1-byte)
598 ##                                                              ^- opcode_base (1-byte)
599 # OMIT-FIELDS-NEXT: 0x00000010 00010100 00                         .....
600 ##                             ^-----                              standard_opcode_lengths (3-byte)
601 ##                                   ^-                            include_directories null byte (1-byte)
602 ##                                      ^-                         file_names null byte (1-byte)
604 --- !ELF
605 FileHeader:
606   Class: ELFCLASS64
607   Data:  ELFDATA2LSB
608   Type:  ET_EXEC
609 DWARF:
610   debug_line:
611     - Version:               4
612       MinInstLength:         1
613       MaxOpsPerInst:         1
614       DefaultIsStmt:         1
615       LineBase:              251
616       LineRange:             14
617       OpcodeBase:            4
618       StandardOpcodeLengths: [ 0, 1, 1 ]
620 ## l) Test that we can specify or omit the ExtLen field of extended opcodes.
622 # RUN: yaml2obj --docnum=12 %s -o %t12.o
623 # RUN: llvm-readelf --hex-dump=.debug_line %t12.o | \
624 # RUN:   FileCheck %s --check-prefix=EXTLEN --strict-whitespace
626 #      EXTLEN: Hex dump of section '.debug_line':
627 # EXTLEN-NEXT: 0x00000000 20000000 04000800 00000101 01fb0e01
628 ##                        ^---------------------------------- line number program header
629 # EXTLEN-NEXT: 0x00000010 0000000c 03616263 6400b424 b424b424
630 ##                        ----
631 ##                            ^-                              DW_LNS_extended_op
632 ##                              ^-                            extended opcode length (ULEB128) 12
633 ##                                 ^-                         DW_LNE_define_file
634 ##                                   ^----------              "abcd\0"
635 ##                                              ^---          directory index (ULEB128) 0x1234
636 ##                                                   ^---     modification time (ULEB128) 0x1234
637 ##                                                       ^--- file length (ULEB128) 0x1234
638 # EXTLEN-NEXT: 0x00000020 00b42401{{  }}
639 ##                        ^-                                  DW_LNS_extended_op
640 ##                          ^---                              extended opcode length (ULEB128) 0x1234
641 ##                              ^-                            DW_LNE_end_sequence
643 --- !ELF
644 FileHeader:
645   Class: ELFCLASS64
646   Data:  ELFDATA2LSB
647   Type:  ET_EXEC
648 DWARF:
649   debug_line:
650     - Version:               4
651       MinInstLength:         1
652       MaxOpsPerInst:         1
653       DefaultIsStmt:         1
654       LineBase:              251
655       LineRange:             14
656       OpcodeBase:            1
657       StandardOpcodeLengths: []
658       Opcodes:
659         - Opcode:    DW_LNS_extended_op
660           ## Omit the ExtLen field.
661           SubOpcode: DW_LNE_define_file
662           FileEntry:
663             Name:    abcd
664             DirIdx:  0x1234
665             ModTime: 0x1234
666             Length:  0x1234
667         - Opcode:    DW_LNS_extended_op
668           ## Specify the ExtLen field.
669           ExtLen:    0x1234
670           SubOpcode: DW_LNE_end_sequence
672 ## m) Test how yaml2obj generates the opcode_base and the
673 ## standard_opcode_lengths fields.
675 ## Both the opcode_base and the standard_opcode_lengths fields are not
676 ## specified (DWARFv2).
678 # RUN: yaml2obj --docnum=13 -DVERSION=2 -DMAXOPSPERINST='' %s -o %t13.o
679 # RUN: llvm-readelf --hex-dump=.debug_line %t13.o | \
680 # RUN:   FileCheck %s --check-prefix=OPCODEBASEV2
682 #      OPCODEBASEV2: Hex dump of section '.debug_line':
683 # OPCODEBASEV2-NEXT: 0x00000000 16000000 02001000 00000101 00010a00 ................
684 ##                                                             ^-   opcode_base (10)
685 ##                                                               ^- standard_opcode_lengths[DW_LNS_copy] = 0
686 # OPCODEBASEV2-NEXT: 0x00000010 01010101 00000001 0000              ..........
687 ##                              ^-                                  standard_opcode_lengths[DW_LNS_advance_pc] = 1
688 ##                                ^-                                standard_opcode_lengths[DW_LNS_advance_line] = 1
689 ##                                  ^-                              standard_opcode_lengths[DW_LNS_set_file] = 1
690 ##                                    ^-                            standard_opcode_lengths[DW_LNS_set_column] = 1
691 ##                                       ^-                         standard_opcode_lengths[DW_LNS_negate_stmt] = 0
692 ##                                         ^-                       standard_opcode_lengths[DW_LNS_set_basic_block] = 0
693 ##                                           ^-                     standard_opcode_lengths[DW_LNS_const_add_pc] = 0
694 ##                                             ^-                   standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1
695 ##                                                ^---              terminators for include_directories and file_names
697 --- !ELF
698 FileHeader:
699   Class: ELFCLASS64
700   Data:  ELFDATA2LSB
701   Type:  ET_EXEC
702 DWARF:
703   debug_line:
704     - Version:               [[VERSION=4]]
705       MinInstLength:         1
706       [[MAXOPSPERINST=MaxOpsPerInst: 0]]
707       DefaultIsStmt:         1
708       LineBase:              0
709       LineRange:             1
710       OpcodeBase:            [[OPCODEBASE=<none>]]
711       StandardOpcodeLengths: [[STANDARDOPCODELENGTHS=<none>]]
713 ## Both the opcode_base and the standard_opcode_lengths fields are not
714 ## specified (DWARFv3).
716 # RUN: yaml2obj --docnum=13 -DVERSION=3 -DMAXOPSPERINST='' %s -o %t14.o
717 # RUN: llvm-readelf --hex-dump=.debug_line %t14.o | \
718 # RUN:   FileCheck %s --check-prefix=OPCODEBASEV3
720 #      OPCODEBASEV3: Hex dump of section '.debug_line':
721 # OPCODEBASEV3-NEXT: 0x00000000 19000000 03001300 00000101 00010d00 ................
722 ##                                                             ^-   opcode_base (13)
723 ##                                                               ^- standard_opcode_lengths[DW_LNS_copy] = 0
724 # OPCODEBASEV3-NEXT: 0x00000010 01010101 00000001 00000100 00       .............
725 ##                              ^-                                  standard_opcode_lengths[DW_LNS_advance_pc] = 1
726 ##                                ^-                                standard_opcode_lengths[DW_LNS_advance_line] = 1
727 ##                                  ^-                              standard_opcode_lengths[DW_LNS_set_file] = 1
728 ##                                    ^-                            standard_opcode_lengths[DW_LNS_set_column] = 1
729 ##                                       ^-                         standard_opcode_lengths[DW_LNS_negate_stmt] = 0
730 ##                                         ^-                       standard_opcode_lengths[DW_LNS_set_basic_block] = 0
731 ##                                           ^-                     standard_opcode_lengths[DW_LNS_const_add_pc] = 0
732 ##                                             ^-                   standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1
733 ##                                                ^-                standard_opcode_lengths[DW_LNS_set_prologue_end] = 0
734 ##                                                  ^-              standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0
735 ##                                                    ^-            standard_opcode_lengths[DW_LNS_set_isa] = 1
736 ##                                                      ^----       terminators for include_directories and file_names
738 ## Both the opcode_base and the standard_opcode_lengths fields are not
739 ## specified (DWARFv4).
741 # RUN: yaml2obj --docnum=13 %s -o %t15.o
742 # RUN: llvm-readelf --hex-dump=.debug_line %t15.o | \
743 # RUN:   FileCheck %s --check-prefix=OPCODEBASEV4
745 #      OPCODEBASEV4: Hex dump of section '.debug_line':
746 # OPCODEBASEV4-NEXT: 0x00000000 1a000000 04001400 00000100 0100010d ................
747 ##                                                              ^- opcode_base (13)
748 # OPCODEBASEV4-NEXT: 0x00000010 00010101 01000000 01000001 0000     ..............
749 ##                              ^-                                  standard_opcode_lengths[DW_LNS_copy] = 0
750 ##                                ^-                                standard_opcode_lengths[DW_LNS_advance_pc] = 1
751 ##                                  ^-                              standard_opcode_lengths[DW_LNS_advance_line] = 1
752 ##                                    ^-                            standard_opcode_lengths[DW_LNS_set_file] = 1
753 ##                                       ^-                         standard_opcode_lengths[DW_LNS_set_column] = 1
754 ##                                         ^-                       standard_opcode_lengths[DW_LNS_negate_stmt] = 0
755 ##                                           ^-                     standard_opcode_lengths[DW_LNS_set_basic_block] = 0
756 ##                                             ^-                   standard_opcode_lengths[DW_LNS_const_add_pc] = 0
757 ##                                                ^-                standard_opcode_lengths[DW_LNS_fixed_advance_pc] = 1
758 ##                                                  ^-              standard_opcode_lengths[DW_LNS_set_prologue_end] = 0
759 ##                                                    ^-            standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0
760 ##                                                      ^-          standard_opcode_lengths[DW_LNS_set_isa] = 1
761 ##                                                         ^---     terminators for include_directories and file_names
763 ## Specify the opcode_base field (opcode_base == 0).
765 # RUN: yaml2obj --docnum=13 -DOPCODEBASE=0 %s -o %t16.o
766 # RUN: llvm-readelf --hex-dump=.debug_line %t16.o | \
767 # RUN:   FileCheck %s --check-prefix=ZERO-OPCODEBASE
769 #      ZERO-OPCODEBASE: Hex dump of section '.debug_line':
770 # ZERO-OPCODEBASE-NEXT: 0x00000000 0e000000 04000800 00000100 01000100 ................
771 ##                                                                  ^- opcode_base (0)
772 # ZERO-OPCODEBASE-NEXT: 0x00000010 0000                                ..
773 ##                                 ^---                                terminators for include_directories and file_names
775 ## Specify the opcode_base field (opcode_base != 0, opcode_base - 1 < 12).
776 ## The standard_opcode_lengths array will be truncated.
778 # RUN: yaml2obj --docnum=13 -DOPCODEBASE=4 %s -o %t17.o
779 # RUN: llvm-readelf --hex-dump=.debug_line %t17.o | \
780 # RUN:   FileCheck %s --check-prefix=OPCODEBASE
782 #      OPCODEBASE: Hex dump of section '.debug_line':
783 # OPCODEBASE-NEXT: 0x00000000 11000000 04000b00 00000100 01000104 ................
784 ##                                                             ^- opcode_base (4)
785 # OPCODEBASE-NEXT: 0x00000010 00010100 00                         .....
786 ##                            ^-----                              standard_opcode_lengths (3-byte)
787 ##                                  ^----                         terminators for include_directories and file_names
789 ## Specify the opcode_base field (opcode_base != 0, opcode_base - 1 > 12).
790 ## The standard_opcode_lengths array will be extended.
792 # RUN: yaml2obj --docnum=13 -DOPCODEBASE=20 %s -o %t18.o
793 # RUN: llvm-readelf --hex-dump=.debug_line %t18.o | \
794 # RUN:   FileCheck %s --check-prefix=OPCODEBASE1
796 #      OPCODEBASE1: Hex dump of section '.debug_line':
797 # OPCODEBASE1-NEXT: 0x00000000 21000000 04001b00 00000100 01000114 !...............
798 ##                                                              ^- opcode_base (20)
799 # OPCODEBASE1-NEXT: 0x00000010 00010101 01000000 01000001 00000000 ................
800 ##                             ^-------------------------          standard_opcode_lengths defined in DWARFv5 (12-byte)
801 ##                                                        ^------- extended standard_opcode_lengths (7-byte)
802 # OPCODEBASE1-NEXT: 0x00000020 00000000 00                         .....
803 ##                             ------
804 ##                                   ^----                         terminators for include_directories and file_names
806 ## Specify the standard_opcode_lengths field.
808 # RUN: yaml2obj --docnum=13 -DSTANDARDOPCODELENGTHS=[0,1,0] %s -o %t19.o
809 # RUN: llvm-readelf --hex-dump=.debug_line %t19.o | \
810 # RUN:   FileCheck %s --check-prefix=OPCODELENGTHS
812 #      OPCODELENGTHS: Hex dump of section '.debug_line':
813 # OPCODELENGTHS-NEXT: 0x00000000 11000000 04000b00 00000100 01000104 ................
814 ##                                                                ^- opcode_base (4)
815 # OPCODELENGTHS-NEXT: 0x00000010 00010000 00                         .....
816 ##                               ^-----                              standard_opcode_lengths (3-byte)
817 ##                                     ^----                         terminators for include_directories and file_names
819 ## Specify both the opcode_base and the standard_opcode_lengths fields.
821 # RUN: yaml2obj --docnum=13 -DOPCODEBASE=2 -DSTANDARDOPCODELENGTHS=[0,1,0] %s -o %t20.o
822 # RUN: llvm-readelf --hex-dump=.debug_line %t20.o | \
823 # RUN:   FileCheck %s --check-prefix=OPCODEBASE-LENGTHS
825 #      OPCODEBASE-LENGTHS: Hex dump of section '.debug_line':
826 # OPCODEBASE-LENGTHS-NEXT: 0x00000000 11000000 04000b00 00000100 01000102 ................
827 ##                                                                     ^- opcode_base (2)
828 # OPCODEBASE-LENGTHS-NEXT: 0x00000010 00010000 00                         .....
829 ##                                    ^-----                              standard_opcode_lengths (3-byte)
830 ##                                          ^----                         terminators for include_directories and file_names