# Dump the complete .debug_line.dwo, then just one part.
#
# RUN: llvm-mc -triple x86_64-unknown-unknown -filetype=obj %s -o %t.o
# RUN: llvm-dwarfdump -debug-line %t.o | FileCheck %s --check-prefixes=PART1,PART2
# RUN: llvm-dwarfdump -debug-line=0x32 %t.o | FileCheck %s --check-prefix=PART2

        .section .debug_line.dwo,"",@progbits
LH_1_start:
        .long   LH_1_end-LH_1_version   # Length of Unit
LH_1_version:
        .short  4               # DWARF version number
        .long   LH_1_header_end-LH_1_params     # Length of Prologue
LH_1_params:
        .byte   1               # Minimum Instruction Length
        .byte   1               # Maximum Operations per Instruction
        .byte   1               # Default is_stmt
        .byte   -5              # Line Base
        .byte   14              # Line Range
        .byte   13              # Opcode Base
        .byte   0               # Standard Opcode Lengths
        .byte   1
        .byte   1
        .byte   1
        .byte   1
        .byte   0
        .byte   0
        .byte   0
        .byte   1
        .byte   0
        .byte   0
        .byte   1
        # Directory table
        .asciz  "Directory1"
        .byte   0
        # File table
        .asciz  "File1"         # File name
        .byte   1               # Directory index
        .byte   0x41            # Timestamp
        .byte   0x42            # File Size
        .byte   0               # End of list
LH_1_header_end:
        # Line number program, which is empty.
LH_1_end:

# PART1:      Line table prologue:
# PART1-NEXT: total_length: 0x0000002e
# PART1-NEXT: version: 4
# PART1-NEXT: prologue_length: 0x00000028
# PART1:      include_directories[  1] = "Directory1"
# PART1:      file_names[  1]
# PART1:      name: "File1"

# Second line table.
LH_2_start:
        .long   LH_2_end-LH_2_version   # Length of Unit
LH_2_version:
        .short  4               # DWARF version number
        .long   LH_2_header_end-LH_2_params     # Length of Prologue
LH_2_params:
        .byte   1               # Minimum Instruction Length
        .byte   1               # Maximum Operations per Instruction
        .byte   1               # Default is_stmt
        .byte   -5              # Line Base
        .byte   14              # Line Range
        .byte   13              # Opcode Base
        .byte   0               # Standard Opcode Lengths
        .byte   1
        .byte   1
        .byte   1
        .byte   1
        .byte   0
        .byte   0
        .byte   0
        .byte   1
        .byte   0
        .byte   0
        .byte   1
        # Directory table
        .asciz  "Dir2"
        .byte   0
        # File table
        .asciz  "File2"         # File name
        .byte   1               # Directory index
        .byte   0x14            # Timestamp
        .byte   0x24            # File Size
        .byte   0               # End of list
LH_2_header_end:
        # Line number program, which is empty.
LH_2_end:

# PART2:      Line table prologue:
# PART2-NEXT: total_length: 0x00000028
# PART2-NEXT: version: 4
# PART2-NEXT: prologue_length: 0x00000022
# PART2-NOT:  prologue:
# PART2:      include_directories[  1] = "Dir2"
# PART2:      file_names[  1]
# PART2:      name: "File2"
# PART2-NOT:  prologue:
