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