1# RUN: llvm-mc %S/Inputs/debug_rnglists_short_section.s -filetype obj -triple x86_64-pc-linux -o - | \ 2# RUN: not llvm-dwarfdump --debug-rnglists - 2>&1 | FileCheck %s --check-prefix=SHORT 3# SHORT-NOT: error: 4# SHORT-NOT: range list header 5# SHORT: error: parsing .debug_rnglists table at offset 0x0: unexpected end of data at offset 0x3 6# SHORT-NOT: range list header 7# SHORT-NOT: error: 8 9# RUN: llvm-mc %s -filetype obj -triple x86_64-pc-linux -o - | \ 10# RUN: not llvm-dwarfdump --debug-rnglists - 2> %t.err | FileCheck %s --check-prefix=GOOD 11# RUN: FileCheck %s --input-file %t.err 12 13# GOOD: .debug_rnglists contents: 14# GOOD-NEXT: range list header: length = 0x0000001e, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000001 15# GOOD-NEXT: offsets: [ 16# GOOD-NEXT: 0x00000004 17# GOOD-NEXT: ] 18# GOOD-NEXT: ranges: 19# GOOD-NEXT: [0x0000000000000010, 0x0000000000000020) 20# GOOD-NEXT: <End of list> 21# GOOD-NEXT: range list header: length = 0x0000001a, format = DWARF32, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000 22# GOOD-NEXT: ranges: 23# GOOD-NEXT: [0x0000000000000030, 0x0000000000000040) 24# GOOD-NEXT: <End of list> 25# GOOD-NOT: range list header 26 27# CHECK-NOT: error: 28# CHECK: error: .debug_rnglists table at offset 0x22 has too small length (0xb) to contain a complete header 29# CHECK-NEXT: error: unrecognised .debug_rnglists table version 4 in table at offset 0x2d 30# CHECK-NEXT: error: .debug_rnglists table at offset 0x39 has unsupported address size: 3 31# CHECK-NEXT: error: .debug_rnglists table at offset 0x45 has unsupported segment selector size 4 32# CHECK-NEXT: error: .debug_rnglists table at offset 0x51 has more offset entries (12345678) than there is space for 33# CHECK-NEXT: error: read past end of table when reading DW_RLE_start_end encoding at offset 0x69 34# CHECK-NEXT: error: read past end of table when reading DW_RLE_start_length encoding at offset 0x82 35# CHECK-NEXT: error: unknown rnglists encoding 0x2a at offset 0x98 36# CHECK-NEXT: error: no end of list marker detected at end of .debug_rnglists table starting at offset 0xaa 37# CHECK-NEXT: error: section is not large enough to contain a .debug_rnglists table of length 0x1f at offset 0xe5 38# CHECK-NOT: error: 39 40.section .debug_rnglists,"",@progbits 41 42# Table 1 (good) 43.long 30 # Table length 44.short 5 # Version 45.byte 8 # Address size 46.byte 0 # Segment selector size 47.long 1 # Offset entry count 48 49# Offsets 50.long 4 51 52# First range list 53.byte 6 # DW_RLE_start_length 54.quad 0x10, 0x20 # Encoding payload 55.byte 0 # DW_RLE_end_of_list 56 57# Table 2 (length too small for header) 58.long 7 # Table length 59.short 5 # Version 60.byte 8 # Address size 61.byte 0 # Segment selector size 62.byte 0, 0, 0 # Truncated offset entry count 63 64# Table 3 (unknown version) 65.long 8 # Table length 66.short 4 # Version 67.byte 8 # Address size 68.byte 0 # Segment selector size 69.long 0 # Offset entry count 70 71# Table 4 (unsupported address size) 72.long 8 # Table length 73.short 5 # Version 74.byte 3 # Address size 75.byte 0 # Segment selector size 76.long 0 # Offset entry count 77 78# Table 5 (unsupported segment selector size) 79.long 8 # Table length 80.short 5 # Version 81.byte 8 # Address size 82.byte 4 # Segment selector size 83.long 0 # Offset entry count 84 85# Table 6 (bad offset entry count) 86.long 8 # Table length 87.short 5 # Version 88.byte 8 # Address size 89.byte 0 # Segment selector size 90.long 12345678 # Offset entry count 91 92# Table 7 (malformed DW_RLE_start_end) 93.long 21 # Table length 94.short 5 # Version 95.byte 8 # Address size 96.byte 0 # Segment selector size 97.long 0 # Offset entry count 98 99# First range list 100.byte 6 # DW_RLE_start_end 101.quad 1 # Start address 102.long 4 # Truncated end address 103 104# Table 8 (malformed DW_RLE_start_length) 105.long 18 # Table length 106.short 5 # Version 107.byte 8 # Address size 108.byte 0 # Segment selector size 109.long 0 # Offset entry count 110 111# First range list 112.byte 7 # DW_RLE_start_length 113.quad 1 # Start address 114.byte 0xFF # Length - invalid ULEB, so will continue reading past the end 115 116# Table 9 (unknown encoding) 117.long 26 # Table length 118.short 5 # Version 119.byte 8 # Address size 120.byte 0 # Segment selector size 121.long 0 # Offset entry count 122 123# First range list 124.byte 42 # Unknown encoding 125.quad 0x10, 0x20 # Encoding payload 126.byte 0 # DW_RLE_end_of_list 127 128# Table 10 (missing end of list marker) 129.long 25 # Table length 130.short 5 # Version 131.byte 8 # Address size 132.byte 0 # Segment selector size 133.long 0 # Offset entry count 134 135# First range list 136.byte 6 # DW_RLE_start_length 137.quad 0x10, 0x20 # Encoding payload 138 139# Table 11 (good) 140.long 26 # Table length 141.short 5 # Version 142.byte 8 # Address size 143.byte 0 # Segment selector size 144.long 0 # Offset entry count 145 146# First range list 147.byte 6 # DW_RLE_start_length 148.quad 0x30, 0x40 # Encoding payload 149.byte 0 # DW_RLE_end_of_list 150 151# Table 12 (length too long) 152.long 27 # Table length - 1 greater than actual contents 153.short 5 # Version 154.byte 8 # Address size 155.byte 0 # Segment selector size 156.long 0 # Offset entry count 157 158# First range list 159.byte 6 # DW_RLE_start_end 160.quad 1, 2 # Start, end address 161.byte 0 # DW_RLE_end_of_list 162