Compiler projects using llvm
.section .debug_line,"",@progbits
# Leading good section.
.long   .Lunit1_end - .Lunit1_start # Length of Unit (DWARF-32 format)
.Lunit1_start:
.short  4               # DWARF version number
.long   .Lprologue1_end-.Lprologue1_start # Length of Prologue
.Lprologue1_start:
.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, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 # Standard Opcode Lengths
.asciz "dir1"           # Include table
.asciz "dir2"
.byte   0
.asciz "file1"          # File table
.byte   0, 0, 0
.asciz "file2"
.byte   1, 0, 0
.byte   0
.Lprologue1_end:
.byte   0, 9, 2         # DW_LNE_set_address
.quad   0x0badbeef
.byte   0, 1, 1         # DW_LNE_end_sequence
.Lunit1_end:

# Version 0.
.long   .Lunit_v0_end - .Lunit_v0_start # unit length
.Lunit_v0_start:
.short  0               # version
.Lunit_v0_end:

# Version 1.
.long   .Lunit_v1_end - .Lunit_v1_start # unit length
.Lunit_v1_start:
.short  1               # version
.Lunit_v1_end:

# Version 5 malformed line/include table.
.long   .Lunit_v5_end - .Lunit_v5_start # unit length
.Lunit_v5_start:
.short  5               # version
.byte   8               # address size
.byte   8               # segment selector
.long   .Lprologue_v5_end-.Lprologue_v5_start # Length of Prologue
.Lprologue_v5_start:
.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, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 # Standard Opcode Lengths
.byte   0               # directory table (invalid as no path component)
.Lprologue_v5_end:
.byte   0, 9, 2         # DW_LNE_set_address
.quad   0x8877665544332211
.byte   0, 1, 1         # DW_LNE_end_sequence
.Lunit_v5_end:

# Short prologue.
.long   .Lunit_short_prologue_end - .Lunit_short_prologue_start # unit length
.Lunit_short_prologue_start:
.short  4               # version
.long   .Lprologue_short_prologue_end-.Lprologue_short_prologue_start # Length of Prologue
.Lprologue_short_prologue_start:
.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, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 # Standard Opcode Lengths
.asciz "dir1"           # Include table
.asciz "dir2"
.byte   0
.asciz "file1"          # File table
.byte   1, 2, 3
.asciz "file2"
.byte   1, 2
.Lprologue_short_prologue_end:
.byte   0, 9, 2         # DW_LNE_set_address
.quad   0x1122334455667788
.byte   0, 1, 1         # DW_LNE_end_sequence
.Lunit_short_prologue_end:

# Over-long prologue.
.long   .Lunit_long_prologue_end - .Lunit_long_prologue_start # unit length
.Lunit_long_prologue_start:
.short  4               # version
.long   .Lprologue_long_prologue_end-.Lprologue_long_prologue_start # Length of Prologue
.Lprologue_long_prologue_start:
.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, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 # Standard Opcode Lengths
.asciz "dir1"           # Include table
.asciz "dir2"
.byte   0
.asciz "file1"          # File table
.byte   0, 0, 0
.asciz "file2"
.byte   1, 2, 3
.byte   0
# Skipped byte (treated as part of prologue).
.byte   6
.Lprologue_long_prologue_end:
.byte   0, 9, 2        # DW_LNE_set_address
.quad   0x1111222233334444
.byte   0, 1, 1        # DW_LNE_end_sequence
.Lunit_long_prologue_end:

# Incorrect length extended opcodes.
.long   .Lunit_long_opcode_end - .Lunit_long_opcode_start # unit length
.Lunit_long_opcode_start:
.short  4               # version
.long   .Lprologue_long_opcode_end-.Lprologue_long_opcode_start # Length of Prologue
.Lprologue_long_opcode_start:
.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, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 # Standard Opcode Lengths
.asciz "dir1"           # Include table
.asciz "dir2"
.byte   0
.asciz "file1"          # File table
.byte   0, 0, 0
.asciz "file2"
.byte   1, 0, 0
.byte   0
.Lprologue_long_opcode_end:
.byte   0, 9, 2         # DW_LNE_set_address
.quad   0xabbadaba
.byte   0, 2, 1         # DW_LNE_end_sequence (too long)
.byte   6               # DW_LNS_negate_stmt (but will be consumed with the end sequence above).
.byte   0, 1, 4         # DW_LNE_set_discriminator (too short)
.byte   0xa             # Parsed as argument for set_discriminator and also DW_LNS_set_prologue_end.
.byte   0, 9, 2         # DW_LNE_set_address
.quad   0xbabb1e45
.byte   0, 1, 1         # DW_LNE_end_sequence
.Lunit_long_opcode_end:

# No end of sequence.
.long   .Lunit_no_eos_end - .Lunit_no_eos_start # unit length
.Lunit_no_eos_start:
.short  4               # version
.long   .Lprologue_no_eos_end-.Lprologue_no_eos_start # Length of Prologue
.Lprologue_no_eos_start:
.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, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 # Standard Opcode Lengths
.asciz "dir1"           # Include table
.asciz "dir2"
.byte   0
.asciz "file1"          # File table
.byte   0, 0, 0
.asciz "file2"
.byte   1, 0, 0
.byte   0
.Lprologue_no_eos_end:
.byte   0, 9, 2        # DW_LNE_set_address
.quad   0xdeadfade
.byte   1              # DW_LNS_copy
.Lunit_no_eos_end:

# V5 very short prologue length.
.long   .Linvalid_description_end0-.Linvalid_description_start0   # Length of Unit
.Linvalid_description_start0:
.short  5               # DWARF version number
.byte   8               # Address Size
.byte   0               # Segment Selector Size
.long   .Linvalid_description_header_end0 - .Linvalid_description_params0 # Length of Prologue (invalid)
.Linvalid_description_params0:
.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, 1, 1, 1, 1, 0, 0, 0, 0, 1 # Standard Opcode Lengths
.Linvalid_description_header_end0:
.byte   0, 9, 2        # DW_LNE_set_address
.quad   0xbabb1ebabb1e
.byte   0, 1, 1         # DW_LNE_end_sequence
.Linvalid_description_end0:

# V5 prologue ends during file table.
.long   .Linvalid_file_end0-.Linvalid_file_start0   # Length of Unit
.Linvalid_file_start0:
.short  5               # DWARF version number
.byte   8               # Address Size
.byte   0               # Segment Selector Size
.long   .Linvalid_file_header_end0 - .Linvalid_file_params0 # Length of Prologue (invalid)
.Linvalid_file_params0:
.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, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 # Standard Opcode Lengths
# Directory table format
.byte   1               # One element per directory entry
.byte   1               # DW_LNCT_path
.byte   0x08            # DW_FORM_string
# Directory table entries
.byte   1               # 1 directory
.asciz  "/tmp"
# File table format
.byte   2               # 2 elements per file entry
.byte   1               # DW_LNCT_path
.byte   0x08            # DW_FORM_string
.byte   2               # DW_LNCT_directory_index
.Linvalid_file_header_end0:
.byte   0, 9, 2         # DW_LNE_set_address
.quad   0xab4acadab4a
.byte   0, 1, 1         # DW_LNE_end_sequence
.Linvalid_file_end0:

# V5 prologue ends during directory table.
.long   .Linvalid_dir_end0-.Linvalid_dir_start0   # Length of Unit
.Linvalid_dir_start0:
.short  5               # DWARF version number
.byte   8               # Address Size
.byte   0               # Segment Selector Size
.long   .Linvalid_dir_header_end0 - .Linvalid_dir_params0 # Length of Prologue (invalid)
.Linvalid_dir_params0:
.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, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 # Standard Opcode Lengths
# Directory table format
.byte   1               # One element per directory entry
.byte   1               # DW_LNCT_path
.byte   0x08            # DW_FORM_string
# Directory table entries
.byte   1               # 1 directory
.Linvalid_dir_header_end0:
.byte   0, 9, 2         # DW_LNE_set_address
.quad   0x4444333322221111
.byte   0, 1, 1         # DW_LNE_end_sequence
.Linvalid_dir_end0:

# Header truncated while reading the MD5 data.
.long   .Linvalid_md5_end0-.Linvalid_md5_start0   # Length of Unit
.Linvalid_md5_start0:
.short  5               # DWARF version number
.byte   8               # Address Size
.byte   0               # Segment Selector Size
.long   .Linvalid_md5_header_end0-.Linvalid_md5_params0     # Length of Prologue
.Linvalid_md5_params0:
.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, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 # Standard Opcode Lengths
# Directory table format
.byte   1               # One element per directory entry
.byte   1               # DW_LNCT_path
.byte   0x08            # DW_FORM_string
# Directory table entries
.byte   1               # 1 directory
.asciz  "/tmp"
# File table format
.byte   3               # 3 elements per file entry
.byte   1               # DW_LNCT_path
.byte   0x08            # DW_FORM_string
.byte   5               # DW_LNCT_MD5
.byte   0x1e            # DW_FORM_data16
.byte   2               # DW_LNCT_directory_index
.byte   0x0b            # DW_FORM_data1
# File table entries
.byte   1               # 1 file
.asciz  "a.c"
.byte   0
# Data to show that the rest of the prologue is skipped.
.byte   1
.Linvalid_md5_header_end0:
.byte   0, 9, 2         # DW_LNE_set_address
.quad   0x1234123412341234
.byte   0, 1, 1         # DW_LNE_end_sequence
.Linvalid_md5_end0:

# Header truncated while reading the MD5 form.
.long   .Linvalid_md5_end1-.Linvalid_md5_start1   # Length of Unit
.Linvalid_md5_start1:
.short  5               # DWARF version number
.byte   8               # Address Size
.byte   0               # Segment Selector Size
.long   .Linvalid_md5_header_end1 - .Linvalid_md5_params1 # Length of Prologue
.Linvalid_md5_params1:
.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, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 # Standard Opcode Lengths
# Directory table format
.byte   1               # One element per directory entry
.byte   1               # DW_LNCT_path
.byte   0x08            # DW_FORM_string
# Directory table entries
.byte   1               # 1 directory
.asciz  "/tmp"
# File table format
.byte   2               # 2 elements per file entry
.byte   1               # DW_LNCT_path
.byte   0x08            # DW_FORM_string
.byte   5               # DW_LNCT_MD5
.Linvalid_md5_header_end1:
.byte   0, 9, 2         # DW_LNE_set_address
.quad   0x4321432143214321
.byte   0, 1, 1         # DW_LNE_end_sequence
.Linvalid_md5_end1:

# V5 invalid directory content description has unsupported form.
.long   .Linvalid_dir_form_end0-.Linvalid_dir_form_start0   # Length of Unit
.Linvalid_dir_form_start0:
.short  5               # DWARF version number
.byte   8               # Address Size
.byte   0               # Segment Selector Size
.long   .Linvalid_dir_form_header_end0 - .Linvalid_dir_form_params0
.Linvalid_dir_form_params0:
.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, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 # Standard Opcode Lengths
# Directory table format
.byte   2               # Two elements per directory entry
.byte   1               # DW_LNCT_path
.byte   0x08            # DW_FORM_string
.byte   2               # DW_LNCT_directory_index (ignored)
.byte   0x7f            # Unknown form
# Directory table entries
.byte   2               # 2 directories
.asciz  "/foo"          # Directory name
.byte   0xff            # Arbitrary data for unknown form
.asciz  "/bar"          # Directory name
.byte   0xff            # Arbitrary data for unknown form
# File table format
.byte   1               # 1 element per file entry
.byte   1               # DW_LNCT_path
.byte   0x08            # DW_FORM_string
# File table entries
.byte   1               # 1 file
.asciz  "xyz"           # File names
.Linvalid_dir_form_header_end0:
.byte   0, 9, 2         # DW_LNE_set_address
.quad   0xaaaabbbbccccdddd
.byte   0, 1, 1         # DW_LNE_end_sequence
.Linvalid_dir_form_end0:

# Zero opcode base.
.long   .Lzero_opcode_base_end - .Lzero_opcode_base_start # unit length
.Lzero_opcode_base_start:
.short  4               # version
.long   .Lzero_opcode_base_prologue_end-.Lzero_opcode_base_prologue_start # Length of Prologue
.Lzero_opcode_base_prologue_start:
.byte   1               # Minimum Instruction Length
.byte   1               # Maximum Operations per Instruction
.byte   1               # Default is_stmt
.byte   0               # Line Base
.byte   1               # Line Range
.byte   0               # Opcode Base
.asciz "dir1"           # Include table
.byte   0
.asciz "file1"
.byte   1, 2, 3
.byte   0
.Lzero_opcode_base_prologue_end:
.byte   0, 9, 2        # DW_LNE_set_address
.quad   0xffffeeeeddddcccc
.byte   0x1            # Special opcode
.byte   0, 1, 1        # DW_LNE_end_sequence
.Lzero_opcode_base_end:

# V4 table with unterminated include directory table.
.long   .Lunterminated_include_end - .Lunterminated_include_start # unit length
.Lunterminated_include_start:
.short  4               # version
.long   .Lunterminated_include_prologue_end-.Lunterminated_include_prologue_start # Length of Prologue
.Lunterminated_include_prologue_start:
.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, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 # Standard Opcode Lengths
.asciz  "dir1"          # Include table
.Lunterminated_include_prologue_end:
.byte   0, 9, 2         # DW_LNE_set_address
.quad   0xabcdef0123456789
.byte   0, 1, 1         # DW_LNE_end_sequence
.Lunterminated_include_end:

# V4 table with unterminated file name table.
.long   .Lunterminated_files_end - .Lunterminated_files_start # unit length
.Lunterminated_files_start:
.short  4               # version
.long   .Lunterminated_files_prologue_end-.Lunterminated_files_prologue_start # Length of Prologue
.Lunterminated_files_prologue_start:
.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, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 # Standard Opcode Lengths
.asciz  "dir1"          # Include table
.byte   0
.asciz  "foo.c"         # File table
.byte   1, 2, 3
.Lunterminated_files_prologue_end:
.byte   0, 9, 2         # DW_LNE_set_address
.quad   0xababcdcdefef0909
.byte   0, 1, 1         # DW_LNE_end_sequence
.Lunterminated_files_end:

# Opcode extends past the end of the table, as claimed by the unit length field.
.long   .Lextended_past_end_end - .Lextended_past_end_start # Length of Unit
.Lextended_past_end_start:
.short  4               # DWARF version number
.long   .Lprologue_extended_past_end_end-.Lprologue_extended_past_end_start # Length of Prologue
.Lprologue_extended_past_end_start:
.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, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 # Standard Opcode Lengths
.asciz "dir1"           # Include table
.asciz "dir2"
.byte   0
.asciz "file1"          # File table
.byte   0, 0, 0
.asciz "file2"
.byte   1, 0, 0
.byte   0
.Lprologue_extended_past_end_end:
.byte   0, 9, 2         # DW_LNE_set_address
.quad   0xfeedfeed
.byte   1               # DW_LNS_copy
.byte   0, 9, 2         # DW_LNE_set_address
.long   0xf001f000      # Truncated address (should be 8 bytes)
.byte   0xf0, 0, 1
.Lextended_past_end_end:

# Trailing good section.
.long   .Lunit_good_end - .Lunit_good_start # Length of Unit (DWARF-32 format)
.Lunit_good_start:
.short  4               # DWARF version number
.long   .Lprologue_good_end-.Lprologue_good_start # Length of Prologue
.Lprologue_good_start:
.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, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 # Standard Opcode Lengths
.asciz "dir1"           # Include table
.asciz "dir2"
.byte   0
.asciz "file1"          # File table
.byte   0, 0, 0
.asciz "file2"
.byte   1, 0, 0
.byte   0
.Lprologue_good_end:
.byte   0, 9, 2         # DW_LNE_set_address
.quad   0xcafebabe
.byte   0, 1, 1         # DW_LNE_end_sequence
.Lunit_good_end: