# RUN: llvm-mc %s -filetype obj -triple x86_64-pc-linux -o %t.o
# RUN: llvm-dwarfdump --debug-rnglists %t.o 2> %t.err | FileCheck %s --check-prefixes=TERSE,BOTH
# RUN: FileCheck %s --allow-empty --input-file %t.err --check-prefix=ERR
# RUN: llvm-dwarfdump -v --debug-rnglists %t.o 2> %t.err | FileCheck %s --check-prefixes=VERBOSE,BOTH
# RUN: FileCheck %s --allow-empty --input-file %t.err --check-prefix=ERR
# BOTH: .debug_rnglists contents:
# TERSE-NEXT: range list header: length = 0x00000037, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
# VERBOSE-NEXT: 0x{{[0-9a-f]*}}:
# VERBOSE-SAME: range list header: length = 0x00000037, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
# BOTH-NEXT: ranges:
# TERSE-NEXT: [0x0000000000000010, 0x0000000000000020)
# TERSE-NEXT: [0x0000000000000025, 0x00000000000000a5)
# TERSE-NEXT: <End of list>
# TERSE-NEXT: [0x0000000000000100, 0x0000000000000200)
# TERSE-NEXT: <End of list>
# VERBOSE-NEXT: 0x0000000c: [DW_RLE_start_end ]: [0x0000000000000010, 0x0000000000000020)
# VERBOSE-NEXT: 0x0000001d: [DW_RLE_start_length]: 0x0000000000000025, 0x0000000000000080
# VERBOSE-SAME: => [0x0000000000000025, 0x00000000000000a5)
# VERBOSE-NEXT: 0x00000028: [DW_RLE_end_of_list ]
# VERBOSE-NEXT: 0x00000029: [DW_RLE_start_end ]: [0x0000000000000100, 0x0000000000000200)
# VERBOSE-NEXT: 0x0000003a: [DW_RLE_end_of_list ]
# TERSE-NEXT: range list header: length = 0x0000002b, format = DWARF32, version = 0x0005, addr_size = 0x04, seg_size = 0x00, offset_entry_count = 0x00000002
# VERBOSE-NEXT: 0x{{[0-9a-f]*}}:
# VERBOSE-SAME: range list header: length = 0x0000002b, format = DWARF32, version = 0x0005, addr_size = 0x04, seg_size = 0x00, offset_entry_count = 0x00000002
# BOTH-NEXT: offsets: [
# BOTH-NEXT: 0x00000008
# VERBOSE-SAME: => 0x0000004f
# BOTH-NEXT: 0x0000001b
# VERBOSE-SAME: => 0x00000062
# BOTH-NEXT: ]
# BOTH-NEXT: ranges:
# TERSE-NEXT: [0x00000000, 0x00000000)
# TERSE-NEXT: [0x00000002, 0x00000006)
# TERSE-NEXT: <End of list>
# TERSE-NEXT: [0x00000036, 0x00000136)
# TERSE-NEXT: <End of list>
# VERBOSE-NEXT: 0x0000004f: [DW_RLE_start_end ]: [0x00000000, 0x00000000)
# VERBOSE-NEXT: 0x00000058: [DW_RLE_start_end ]: [0x00000002, 0x00000006)
# VERBOSE-NEXT: 0x00000061: [DW_RLE_end_of_list ]
# VERBOSE-NEXT: 0x00000062: [DW_RLE_start_length]: 0x00000036, 0x00000100 => [0x00000036, 0x00000136)
# VERBOSE-NEXT: 0x00000069: [DW_RLE_end_of_list ]
# TERSE-NEXT: range list header: length = 0x00000008, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
# VERBOSE-NEXT: 0x{{[0-9a-f]*}}:
# VERBOSE-SAME: range list header: length = 0x00000008, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
# BOTH-NOT: offsets:
# BOTH: ranges:
# BOTH-NOT: [
# TERSE-NEXT: range list header: length = 0x0000000b, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
# VERBOSE-NEXT: 0x{{[0-9a-f]*}}:
# VERBOSE-SAME: range list header: length = 0x0000000b, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
# BOTH-NEXT: ranges:
# TERSE-NEXT: <End of list>
# VERBOSE-NEXT: 0x00000082: [DW_RLE_base_addressx]: 0x0000000000000000
# VERBOSE-NEXT: 0x00000084: [DW_RLE_end_of_list ]
# TERSE-NEXT: range list header: length = 0x0000000c, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
# VERBOSE-NEXT: 0x{{[0-9a-f]*}}:
# VERBOSE-SAME: range list header: length = 0x0000000c, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
# BOTH-NEXT: ranges:
# TERSE-NEXT: [0x0000000000000000, 0x0000000000000000)
# TERSE-NEXT: <End of list>
# VERBOSE-NEXT: 0x00000091: [DW_RLE_startx_endx]: 0x0000000000000001, 0x000000000000000a => [0x0000000000000000, 0x0000000000000000)
# VERBOSE-NEXT: 0x00000094: [DW_RLE_end_of_list]
# TERSE-NEXT: range list header: length = 0x0000000c, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
# VERBOSE-NEXT: 0x{{[0-9a-f]*}}:
# VERBOSE-SAME: range list header: length = 0x0000000c, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
# BOTH-NEXT: ranges:
# TERSE-NEXT: [0x0000000000000000, 0x000000000000002a)
# TERSE-NEXT: <End of list>
# VERBOSE-NEXT: 0x000000a1: [DW_RLE_startx_length]: 0x0000000000000002, 0x000000000000002a => [0x0000000000000000, 0x000000000000002a)
# VERBOSE-NEXT: 0x000000a4: [DW_RLE_end_of_list ]
# TERSE-NEXT: range list header: length = 0x0000000e, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
# VERBOSE-NEXT: 0x{{[0-9a-f]*}}:
# VERBOSE-SAME: range list header: length = 0x0000000e, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
# BOTH-NEXT: ranges:
# TERSE-NEXT: [0x0000000000000800, 0x0000000000001000)
# TERSE-NEXT: <End of list>
# VERBOSE-NEXT: 0x000000b1: [DW_RLE_offset_pair]: 0x0000000000000800, 0x0000000000001000 =>
# VERBOSE-SAME: [0x0000000000000800, 0x0000000000001000)
# VERBOSE-NEXT: 0x000000b6: [DW_RLE_end_of_list]
# TERSE-NEXT: range list header: length = 0x00000017, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
# VERBOSE-NEXT: 0x{{[0-9a-f]*}}:
# VERBOSE-SAME: range list header: length = 0x00000017, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
# BOTH-NEXT: ranges:
# TERSE-NEXT: [0x0000000000001800, 0x0000000000002000)
# TERSE-NEXT: <End of list>
# VERBOSE-NEXT: 0x000000c3: [DW_RLE_base_address]: 0x0000000000001000
# VERBOSE-NEXT: 0x000000cc: [DW_RLE_offset_pair ]: 0x0000000000000800, 0x0000000000001000 =>
# VERBOSE-SAME: [0x0000000000001800, 0x0000000000002000)
# VERBOSE-NEXT: 0x000000d1: [DW_RLE_end_of_list ]
# BOTH-NOT: range list header:
# ERR-NOT: error:
.section .debug_rnglists,"",@progbits
# First table (tests DW_RLE_end_of_list, start_end, and start_length encodings)
.long 55 # Table length
.short 5 # Version
.byte 8 # Address size
.byte 0 # Segment selector size
.long 0 # Offset entry count
# First range list
.byte 6 # DW_RLE_start_end
.quad 0x10, 0x20 # Start, end address
.byte 7 # DW_RLE_start_length
.quad 0x25 # Start address
.byte 0x80, 0x01 # Length
.byte 0 # DW_RLE_end_of_list
# Second range list
.byte 6 # DW_RLE_start_end
.quad 0x100, 0x200 # Start, end address
.byte 0 # DW_RLE_end_of_list
# Second table (shows support for size 4 addresses)
.long 43 # Table length
.short 5 # Version
.byte 4 # Address size
.byte 0 # Segment selector size
.long 2 # Offset entry count
# Offset array
.long 8 # Offset Entry 0
.long 27 # Offset Entry 1
# First range list
.byte 6 # DW_RLE_start_end
.long 0, 0 # Start, end address
.byte 6 # DW_RLE_start_end
.long 0x2, 0x6 # Start, end address
.byte 0 # DW_RLE_end_of_list
# Second range list
.byte 7 # DW_RLE_start_length
.long 0x36 # Start address
.byte 0x80, 0x02 # Length
.byte 0 # DW_RLE_end_of_list
# Third (empty) table
.long 8 # Table length
.short 5 # Version
.byte 8 # Address size
.byte 0 # Segment selector size
.long 0 # Offset entry count
# The following entries are for encodings unsupported at the time of writing.
# The test should be updated as these encodings are supported.
# Fourth table (testing DW_RLE_base_addressx)
.long 11 # Table length
.short 5 # Version
.byte 8 # Address size
.byte 0 # Segment selector size
.long 0 # Offset entry count
# First range list
.byte 1 # DW_RLE_base_addressx
.byte 0 # Base address (index 0 in .debug_addr)
.byte 0 # DW_RLE_end_of_list
# Fifth table (testing DW_RLE_startx_endx)
.long 12 # Table length
.short 5 # Version
.byte 8 # Address size
.byte 0 # Segment selector size
.long 0 # Offset entry count
# First range list
.byte 2 # DW_RLE_startx_endx
.byte 1 # Start address (index in .debug_addr)
.byte 10 # End address (index in .debug_addr)
.byte 0 # DW_RLE_end_of_list
# Sixth table (testing DW_RLE_startx_length)
.long 12 # Table length
.short 5 # Version
.byte 8 # Address size
.byte 0 # Segment selector size
.long 0 # Offset entry count
# First range list
.byte 3 # DW_RLE_startx_length
.byte 2 # Start address (index in .debug_addr)
.byte 42 # Length
.byte 0 # DW_RLE_end_of_list
# Seventh table (testing DW_RLE_offset_pair)
.long 14 # Table length
.short 5 # Version
.byte 8 # Address size
.byte 0 # Segment selector size
.long 0 # Offset entry count
# First range list
.byte 4 # DW_RLE_offset_pair
.byte 0x80, 0x10 # Start offset
.byte 0x80, 0x20 # End offset (index in .debug_addr)
.byte 0 # DW_RLE_end_of_list
# Eigth table (testing DW_RLE_base_address and its impact
# on DW_RLE_offset_pair)
.long 23 # Table length
.short 5 # Version
.byte 8 # Address size
.byte 0 # Segment selector size
.long 0 # Offset entry count
# First range list
.byte 5 # DW_RLE_base_address
.quad 0x1000 # Base address
.byte 4 # DW_RLE_offset_pair
.byte 0x80, 0x10 # Start offset
.byte 0x80, 0x20 # End offset
.byte 0 # DW_RLE_end_of_list