unknown-section-id.s
5.55 KB
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
## The test checks that llvm-dwp avoids an out of bound access when there is
## an unknown section identifier in an index section. Without the fix, the test
## failed when LLVM is built with UBSan.
## Note that additional sections (.debug_abbrev.dwo, .debug_info.dwo, and
## .debug_types.dwo) are required to reach the test points in the code.
# RUN: llvm-mc -triple x86_64-unknown-linux-gnu %s -filetype=obj -o %t.dwp
# RUN: llvm-dwp %t.dwp -o - | \
# RUN: llvm-dwarfdump -debug-cu-index -debug-tu-index - | \
# RUN: FileCheck %s
## Check that all known sections are preserved and no data for unknown section
## identifiers is copied.
# CHECK: .debug_cu_index contents:
# CHECK-NEXT: version = 2, units = 1, slots = 2
# CHECK: Index Signature INFO ABBREV
# CHECK-NOT: Unknown
# CHECK: -----
# CHECK-NEXT: 1 0x1100002222222222 [0x00000000, 0x00000014) [0x00000000, 0x00000009)
# CHECK-NOT: [
# CHECK: .debug_tu_index contents:
# CHECK-NEXT: version = 2, units = 1, slots = 2
# CHECK: Index Signature TYPES ABBREV
# CHECK-NOT: Unknown
# CHECK: -----
# CHECK-NEXT: 2 0x1100003333333333 [0x00000000, 0x00000019) [0x00000009, 0x00000014)
# CHECK-NOT: [
.section .debug_abbrev.dwo, "e", @progbits
.LCUAbbrevBegin:
.uleb128 1 # Abbreviation Code
.uleb128 0x11 # DW_TAG_compile_unit
.byte 0 # DW_CHILDREN_no
.uleb128 0x2131 # DW_AT_GNU_dwo_id
.uleb128 7 # DW_FORM_data8
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.byte 0 # EOM(3)
.LCUAbbrevEnd:
.LTUAbbrevBegin:
.uleb128 1 # Abbreviation Code
.uleb128 0x41 # DW_TAG_type_unit
.byte 1 # DW_CHILDREN_yes
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.uleb128 2 # Abbreviation Code
.uleb128 0x13 # DW_TAG_structure_type
.byte 0 # DW_CHILDREN_no
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.byte 0 # EOM(3)
.LTUAbbrevEnd:
.section .debug_info.dwo, "e", @progbits
.LCUBegin:
.long .LCUEnd-.LCUVersion # Length of Unit
.LCUVersion:
.short 4 # Version
.long 0 # Abbrev offset
.byte 8 # Address size
.uleb128 1 # Abbrev [1] DW_TAG_compile_unit
.quad 0x1100002222222222 # DW_AT_GNU_dwo_id
.LCUEnd:
.section .debug_types.dwo, "e", @progbits
.LTUBegin:
.long .LTUEnd-.LTUVersion # Length of Unit
.LTUVersion:
.short 4 # Version
.long 0 # Abbrev offset
.byte 8 # Address size
.quad 0x1100003333333333 # Type signature
.long .LTUType-.LTUBegin # Type offset
.uleb128 1 # Abbrev [1] DW_TAG_type_unit
.LTUType:
.uleb128 2 # Abbrev [2] DW_TAG_structure_type
.LTUEnd:
.section .debug_cu_index, "", @progbits
## Header:
.long 2 # Version
.long 4 # Section count
.long 1 # Unit count
.long 2 # Slot count
## Hash Table of Signatures:
.quad 0x1100002222222222
.quad 0
## Parallel Table of Indexes:
.long 1
.long 0
## Table of Section Offsets:
## Row 0:
.long 1 # DW_SECT_INFO
.long 3 # DW_SECT_ABBREV
.long 0 # Invalid ID, less than DW_SECT_INFO
.long 9 # Invalid ID, greater than DW_SECT_MACRO
## Row 1:
.long 0 # Offset in .debug_info.dwo
.long 0 # Offset in .debug_abbrev.dwo
.long 0
.long 0
## Table of Section Sizes:
.long .LCUEnd-.LCUBegin # Size in .debug_info.dwo
.long .LCUAbbrevEnd-.LCUAbbrevBegin # Size in .debug_abbrev.dwo
.long 1
.long 1
.section .debug_tu_index, "", @progbits
## Header:
.long 2 # Version
.long 4 # Section count
.long 1 # Unit count
.long 2 # Slot count
## Hash Table of Signatures:
.quad 0
.quad 0x1100003333333333
## Parallel Table of Indexes:
.long 0
.long 1
## Table of Section Offsets:
## Row 0:
.long 2 # DW_SECT_TYPES
.long 3 # DW_SECT_ABBREV
.long 0 # Invalid ID, less than DW_SECT_INFO
.long 9 # Invalid ID, greater than DW_SECT_MACRO
## Row 1:
.long 0 # Offset in .debug_types.dwo
.long .LTUAbbrevBegin-.debug_abbrev.dwo # Offset in .debug_abbrev.dwo
.long 0
.long 0
## Table of Section Sizes:
.long .LTUEnd-.LTUBegin # Size in .debug_types.dwo
.long .LTUAbbrevEnd-.LTUAbbrevBegin # Size in .debug_abbrev.dwo
.long 1
.long 1