]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/tools/llvm-dwarfdump/X86/debug_rnglists_invalid.s
Vendor import of llvm trunk r338150:
[FreeBSD/FreeBSD.git] / test / tools / llvm-dwarfdump / X86 / debug_rnglists_invalid.s
1 # RUN: llvm-mc %S/Inputs/debug_rnglists_short_section.s -filetype obj -triple x86_64-pc-linux -o - | \
2 # RUN: llvm-dwarfdump --debug-rnglists - 2>&1 | FileCheck %s --check-prefix=SHORT
3 # SHORT-NOT: error:
4 # SHORT-NOT: range list header
5 # SHORT: error: section is not large enough to contain a .debug_rnglists table length at offset 0
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: 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, 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, 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 2
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: insufficient space remaining in table for 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 # RUN: llvm-mc %S/Inputs/debug_rnglists_DWARF64.s -filetype obj -triple x86_64-pc-linux -o - | \
41 # RUN: llvm-dwarfdump --debug-rnglists - 2>&1 | FileCheck %s --check-prefix=DWARF64
42
43 # DWARF64: DWARF64 is not supported in .debug_rnglists at offset 0x0
44
45 .section .debug_rnglists,"",@progbits
46
47 # Table 1 (good)
48 .long 30 # Table length
49 .short 5 # Version
50 .byte 8  # Address size
51 .byte 0  # Segment selector size
52 .long 1  # Offset entry count
53
54 # Offsets
55 .long 4
56
57 # First range list
58 .byte 6         # DW_RLE_start_length
59 .quad 0x10, 0x20   # Encoding payload
60 .byte 0         # DW_RLE_end_of_list
61
62 # Table 2 (length too small for header)
63 .long 7  # Table length
64 .short 5 # Version
65 .byte 8  # Address size
66 .byte 0  # Segment selector size
67 .byte 0, 0, 0  # Truncated offset entry count
68
69 # Table 3 (unknown version)
70 .long 8  # Table length
71 .short 4 # Version
72 .byte 8  # Address size
73 .byte 0  # Segment selector size
74 .long 0  # Offset entry count
75
76 # Table 4 (unsupported address size)
77 .long 8  # Table length
78 .short 5 # Version
79 .byte 2  # Address size
80 .byte 0  # Segment selector size
81 .long 0  # Offset entry count
82
83 # Table 5 (unsupported segment selector size)
84 .long 8  # Table length
85 .short 5 # Version
86 .byte 8  # Address size
87 .byte 4  # Segment selector size
88 .long 0  # Offset entry count
89
90 # Table 6 (bad offset entry count)
91 .long 8  # Table length
92 .short 5 # Version
93 .byte 8  # Address size
94 .byte 0  # Segment selector size
95 .long 12345678  # Offset entry count
96
97 # Table 7 (malformed DW_RLE_start_end)
98 .long 21 # Table length
99 .short 5 # Version
100 .byte 8  # Address size
101 .byte 0  # Segment selector size
102 .long 0  # Offset entry count
103
104 # First range list
105 .byte 6          # DW_RLE_start_end
106 .quad 1            # Start address
107 .long 4            # Truncated end address
108
109 # Table 8 (malformed DW_RLE_start_length)
110 .long 18 # Table length
111 .short 5 # Version
112 .byte 8  # Address size
113 .byte 0  # Segment selector size
114 .long 0  # Offset entry count
115
116 # First range list
117 .byte 7          # DW_RLE_start_length
118 .quad 1            # Start address
119 .byte 0xFF         # Length - invalid ULEB, so will continue reading past the end
120
121 # Table 9 (unknown encoding)
122 .long 26 # Table length
123 .short 5 # Version
124 .byte 8  # Address size
125 .byte 0  # Segment selector size
126 .long 0  # Offset entry count
127
128 # First range list
129 .byte 42         # Unknown encoding
130 .quad 0x10, 0x20   # Encoding payload
131 .byte 0          # DW_RLE_end_of_list
132
133 # Table 10 (missing end of list marker)
134 .long 25 # Table length
135 .short 5 # Version
136 .byte 8  # Address size
137 .byte 0  # Segment selector size
138 .long 0  # Offset entry count
139
140 # First range list
141 .byte 6         # DW_RLE_start_length
142 .quad 0x10, 0x20   # Encoding payload
143
144 # Table 11 (good)
145 .long 26 # Table length
146 .short 5 # Version
147 .byte 8  # Address size
148 .byte 0  # Segment selector size
149 .long 0  # Offset entry count
150
151 # First range list
152 .byte 6         # DW_RLE_start_length
153 .quad 0x30, 0x40   # Encoding payload
154 .byte 0         # DW_RLE_end_of_list
155
156 # Table 12 (length too long)
157 .long 27 # Table length - 1 greater than actual contents
158 .short 5 # Version
159 .byte 8  # Address size
160 .byte 0  # Segment selector size
161 .long 0  # Offset entry count
162
163 # First range list
164 .byte 6          # DW_RLE_start_end
165 .quad 1, 2         # Start, end address
166 .byte 0          # DW_RLE_end_of_list