116a0313eSIgor Kudrin //===- DWARFAcceleratorTableTest.cpp --------------------------------------===//
216a0313eSIgor Kudrin //
316a0313eSIgor Kudrin // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
416a0313eSIgor Kudrin // See https://llvm.org/LICENSE.txt for license information.
516a0313eSIgor Kudrin // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
616a0313eSIgor Kudrin //
716a0313eSIgor Kudrin //===----------------------------------------------------------------------===//
816a0313eSIgor Kudrin
916a0313eSIgor Kudrin #include "llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h"
1016a0313eSIgor Kudrin #include "llvm/DebugInfo/DWARF/DWARFContext.h"
11*a8b4c11fSFelipe de Azevedo Piovezan #include "llvm/ObjectYAML/DWARFEmitter.h"
12dba683ccSPavel Labath #include "llvm/Testing/Support/Error.h"
1316a0313eSIgor Kudrin #include "gtest/gtest.h"
1416a0313eSIgor Kudrin
1516a0313eSIgor Kudrin using namespace llvm;
1616a0313eSIgor Kudrin
ExtractDebugNames(StringRef NamesSecData,StringRef StrSecData)17dba683ccSPavel Labath static Error ExtractDebugNames(StringRef NamesSecData, StringRef StrSecData) {
18dba683ccSPavel Labath DWARFDataExtractor NamesExtractor(NamesSecData,
1916a0313eSIgor Kudrin /*isLittleEndian=*/true,
2016a0313eSIgor Kudrin /*AddrSize=*/4);
2116a0313eSIgor Kudrin DataExtractor StrExtractor(StrSecData,
2216a0313eSIgor Kudrin /*isLittleEndian=*/true,
2316a0313eSIgor Kudrin /*AddrSize=*/4);
2416a0313eSIgor Kudrin DWARFDebugNames Table(NamesExtractor, StrExtractor);
25dba683ccSPavel Labath return Table.extract();
2616a0313eSIgor Kudrin }
2716a0313eSIgor Kudrin
28dba683ccSPavel Labath namespace {
29dba683ccSPavel Labath
TEST(DWARFDebugNames,ReservedUnitLength)3016a0313eSIgor Kudrin TEST(DWARFDebugNames, ReservedUnitLength) {
3116a0313eSIgor Kudrin static const char NamesSecData[64] =
3216a0313eSIgor Kudrin "\xf0\xff\xff\xff"; // Reserved unit length value
33dba683ccSPavel Labath EXPECT_THAT_ERROR(
34dba683ccSPavel Labath ExtractDebugNames(StringRef(NamesSecData, sizeof(NamesSecData)),
35dba683ccSPavel Labath StringRef()),
36dba683ccSPavel Labath FailedWithMessage("parsing .debug_names header at 0x0: unsupported "
37dba683ccSPavel Labath "reserved unit length of value 0xfffffff0"));
3816a0313eSIgor Kudrin }
3916a0313eSIgor Kudrin
TEST(DWARFDebugNames,TooSmallForDWARF64)4016a0313eSIgor Kudrin TEST(DWARFDebugNames, TooSmallForDWARF64) {
4116a0313eSIgor Kudrin // DWARF64 header takes at least 44 bytes.
4216a0313eSIgor Kudrin static const char NamesSecData[43] = "\xff\xff\xff\xff"; // DWARF64 mark
43dba683ccSPavel Labath EXPECT_THAT_ERROR(
44dba683ccSPavel Labath ExtractDebugNames(StringRef(NamesSecData, sizeof(NamesSecData)),
45dba683ccSPavel Labath StringRef()),
46dba683ccSPavel Labath FailedWithMessage("parsing .debug_names header at 0x0: unexpected end of "
4704aea769SPavel Labath "data at offset 0x2b while reading [0x28, 0x2c)"));
4816a0313eSIgor Kudrin }
4916a0313eSIgor Kudrin
TEST(DWARFDebugNames,BasicTestEntries)50*a8b4c11fSFelipe de Azevedo Piovezan TEST(DWARFDebugNames, BasicTestEntries) {
51*a8b4c11fSFelipe de Azevedo Piovezan const char *Yamldata = R"(
52*a8b4c11fSFelipe de Azevedo Piovezan --- !ELF
53*a8b4c11fSFelipe de Azevedo Piovezan debug_str:
54*a8b4c11fSFelipe de Azevedo Piovezan - 'NameType1'
55*a8b4c11fSFelipe de Azevedo Piovezan - 'NameType2'
56*a8b4c11fSFelipe de Azevedo Piovezan
57*a8b4c11fSFelipe de Azevedo Piovezan debug_names:
58*a8b4c11fSFelipe de Azevedo Piovezan Abbreviations:
59*a8b4c11fSFelipe de Azevedo Piovezan - Code: 0x1
60*a8b4c11fSFelipe de Azevedo Piovezan Tag: DW_TAG_namespace
61*a8b4c11fSFelipe de Azevedo Piovezan Indices:
62*a8b4c11fSFelipe de Azevedo Piovezan - Idx: DW_IDX_compile_unit
63*a8b4c11fSFelipe de Azevedo Piovezan Form: DW_FORM_data4
64*a8b4c11fSFelipe de Azevedo Piovezan - Idx: DW_IDX_die_offset
65*a8b4c11fSFelipe de Azevedo Piovezan Form: DW_FORM_ref4
66*a8b4c11fSFelipe de Azevedo Piovezan Entries:
67*a8b4c11fSFelipe de Azevedo Piovezan - Name: 0x0 # strp to NameType1
68*a8b4c11fSFelipe de Azevedo Piovezan Code: 0x1
69*a8b4c11fSFelipe de Azevedo Piovezan Values:
70*a8b4c11fSFelipe de Azevedo Piovezan - 0x0 # Compile unit
71*a8b4c11fSFelipe de Azevedo Piovezan - 0x0 # DIE Offset
72*a8b4c11fSFelipe de Azevedo Piovezan - Name: 0xa # strp to NameType2
73*a8b4c11fSFelipe de Azevedo Piovezan Code: 0x1
74*a8b4c11fSFelipe de Azevedo Piovezan Values:
75*a8b4c11fSFelipe de Azevedo Piovezan - 0x1 # Compile unit
76*a8b4c11fSFelipe de Azevedo Piovezan - 0x1 # DIE Offset
77*a8b4c11fSFelipe de Azevedo Piovezan - Name: 0x0 # strp to NameType1
78*a8b4c11fSFelipe de Azevedo Piovezan Code: 0x1
79*a8b4c11fSFelipe de Azevedo Piovezan Values:
80*a8b4c11fSFelipe de Azevedo Piovezan - 0x2 # Compile unit
81*a8b4c11fSFelipe de Azevedo Piovezan - 0x2 # DIE Offset
82*a8b4c11fSFelipe de Azevedo Piovezan
83*a8b4c11fSFelipe de Azevedo Piovezan )";
84*a8b4c11fSFelipe de Azevedo Piovezan
85*a8b4c11fSFelipe de Azevedo Piovezan Expected<StringMap<std::unique_ptr<MemoryBuffer>>> Sections =
86*a8b4c11fSFelipe de Azevedo Piovezan DWARFYAML::emitDebugSections(Yamldata,
87*a8b4c11fSFelipe de Azevedo Piovezan /*IsLittleEndian=*/true,
88*a8b4c11fSFelipe de Azevedo Piovezan /*Is64BitAddrSize=*/true);
89*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_THAT_EXPECTED(Sections, Succeeded());
90*a8b4c11fSFelipe de Azevedo Piovezan auto Ctx = DWARFContext::create(*Sections, 4, /*isLittleEndian=*/true);
91*a8b4c11fSFelipe de Azevedo Piovezan const DWARFDebugNames &DebugNames = Ctx->getDebugNames();
92*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_NE(DebugNames.begin(), DebugNames.end());
93*a8b4c11fSFelipe de Azevedo Piovezan const DWARFDebugNames::NameIndex &NameIndex = *DebugNames.begin();
94*a8b4c11fSFelipe de Azevedo Piovezan
95*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(NameIndex.getNameCount(), 2u);
96*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(NameIndex.getBucketCount(), 0u);
97*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(NameIndex.getCUCount(), 1u);
98*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(NameIndex.getCUOffset(0), 0u);
99*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(NameIndex.getForeignTUCount(), 0u);
100*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(NameIndex.getLocalTUCount(), 0u);
101*a8b4c11fSFelipe de Azevedo Piovezan
102*a8b4c11fSFelipe de Azevedo Piovezan // Check "NameEntries": there should be one per unique name.
103*a8b4c11fSFelipe de Azevedo Piovezan // These are indexed starting on 1.
104*a8b4c11fSFelipe de Azevedo Piovezan DWARFDebugNames::NameTableEntry FirstEntry = NameIndex.getNameTableEntry(1);
105*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(FirstEntry.getString(), StringRef("NameType1"));
106*a8b4c11fSFelipe de Azevedo Piovezan DWARFDebugNames::NameTableEntry SecondEntry = NameIndex.getNameTableEntry(2);
107*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(SecondEntry.getString(), StringRef("NameType2"));
108*a8b4c11fSFelipe de Azevedo Piovezan
109*a8b4c11fSFelipe de Azevedo Piovezan SmallVector<DWARFDebugNames::Entry> FirstNameEntries =
110*a8b4c11fSFelipe de Azevedo Piovezan to_vector_of<DWARFDebugNames::Entry>(NameIndex.equal_range("NameType1"));
111*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(FirstNameEntries.size(), 2u);
112*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(FirstNameEntries[0].getCUIndex(), 0u);
113*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(FirstNameEntries[1].getCUIndex(), 0x2);
114*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(FirstNameEntries[0].getDIEUnitOffset(), 0x0);
115*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(FirstNameEntries[1].getDIEUnitOffset(), 0x2);
116*a8b4c11fSFelipe de Azevedo Piovezan
117*a8b4c11fSFelipe de Azevedo Piovezan SmallVector<DWARFDebugNames::Entry> SecondNameEntries =
118*a8b4c11fSFelipe de Azevedo Piovezan to_vector_of<DWARFDebugNames::Entry>(NameIndex.equal_range("NameType2"));
119*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(SecondNameEntries.size(), 1u);
120*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(SecondNameEntries[0].getCUIndex(), 0x1);
121*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(SecondNameEntries[0].getDIEUnitOffset(), 0x1);
122*a8b4c11fSFelipe de Azevedo Piovezan }
123*a8b4c11fSFelipe de Azevedo Piovezan
TEST(DWARFDebugNames,ParentEntries)124*a8b4c11fSFelipe de Azevedo Piovezan TEST(DWARFDebugNames, ParentEntries) {
125*a8b4c11fSFelipe de Azevedo Piovezan const char *Yamldata = R"(
126*a8b4c11fSFelipe de Azevedo Piovezan --- !ELF
127*a8b4c11fSFelipe de Azevedo Piovezan debug_str:
128*a8b4c11fSFelipe de Azevedo Piovezan - 'Name1'
129*a8b4c11fSFelipe de Azevedo Piovezan - 'Name2'
130*a8b4c11fSFelipe de Azevedo Piovezan - 'Name3'
131*a8b4c11fSFelipe de Azevedo Piovezan - 'Name4'
132*a8b4c11fSFelipe de Azevedo Piovezan debug_names:
133*a8b4c11fSFelipe de Azevedo Piovezan Abbreviations:
134*a8b4c11fSFelipe de Azevedo Piovezan - Code: 0x11
135*a8b4c11fSFelipe de Azevedo Piovezan Tag: DW_TAG_namespace
136*a8b4c11fSFelipe de Azevedo Piovezan Indices:
137*a8b4c11fSFelipe de Azevedo Piovezan - Idx: DW_IDX_parent
138*a8b4c11fSFelipe de Azevedo Piovezan Form: DW_FORM_flag_present
139*a8b4c11fSFelipe de Azevedo Piovezan - Idx: DW_IDX_die_offset
140*a8b4c11fSFelipe de Azevedo Piovezan Form: DW_FORM_ref4
141*a8b4c11fSFelipe de Azevedo Piovezan - Code: 0x22
142*a8b4c11fSFelipe de Azevedo Piovezan Tag: DW_TAG_namespace
143*a8b4c11fSFelipe de Azevedo Piovezan Indices:
144*a8b4c11fSFelipe de Azevedo Piovezan - Idx: DW_IDX_parent
145*a8b4c11fSFelipe de Azevedo Piovezan Form: DW_FORM_ref4
146*a8b4c11fSFelipe de Azevedo Piovezan - Idx: DW_IDX_die_offset
147*a8b4c11fSFelipe de Azevedo Piovezan Form: DW_FORM_ref4
148*a8b4c11fSFelipe de Azevedo Piovezan - Code: 0x33
149*a8b4c11fSFelipe de Azevedo Piovezan Tag: DW_TAG_namespace
150*a8b4c11fSFelipe de Azevedo Piovezan Indices:
151*a8b4c11fSFelipe de Azevedo Piovezan - Idx: DW_IDX_die_offset
152*a8b4c11fSFelipe de Azevedo Piovezan Form: DW_FORM_ref4
153*a8b4c11fSFelipe de Azevedo Piovezan Entries:
154*a8b4c11fSFelipe de Azevedo Piovezan - Name: 0x0 # strp to Name1
155*a8b4c11fSFelipe de Azevedo Piovezan Code: 0x11
156*a8b4c11fSFelipe de Azevedo Piovezan Values:
157*a8b4c11fSFelipe de Azevedo Piovezan - 0x0 # Die offset
158*a8b4c11fSFelipe de Azevedo Piovezan - Name: 0x6 # strp to Name2
159*a8b4c11fSFelipe de Azevedo Piovezan Code: 0x22
160*a8b4c11fSFelipe de Azevedo Piovezan Values:
161*a8b4c11fSFelipe de Azevedo Piovezan - 0x0 # Parent = First entry
162*a8b4c11fSFelipe de Azevedo Piovezan - 0x1 # Die offset
163*a8b4c11fSFelipe de Azevedo Piovezan - Name: 0xc # strp to Name3
164*a8b4c11fSFelipe de Azevedo Piovezan Code: 0x22
165*a8b4c11fSFelipe de Azevedo Piovezan Values:
166*a8b4c11fSFelipe de Azevedo Piovezan - 0x6 # Parent = Second entry
167*a8b4c11fSFelipe de Azevedo Piovezan - 0x1 # Die offset
168*a8b4c11fSFelipe de Azevedo Piovezan - Name: 0x12 # strp to Name4
169*a8b4c11fSFelipe de Azevedo Piovezan Code: 0x33
170*a8b4c11fSFelipe de Azevedo Piovezan Values:
171*a8b4c11fSFelipe de Azevedo Piovezan - 0x1 # Die offset
172*a8b4c11fSFelipe de Azevedo Piovezan )";
173*a8b4c11fSFelipe de Azevedo Piovezan
174*a8b4c11fSFelipe de Azevedo Piovezan Expected<StringMap<std::unique_ptr<MemoryBuffer>>> Sections =
175*a8b4c11fSFelipe de Azevedo Piovezan DWARFYAML::emitDebugSections(Yamldata,
176*a8b4c11fSFelipe de Azevedo Piovezan /*IsLittleEndian=*/true,
177*a8b4c11fSFelipe de Azevedo Piovezan /*Is64BitAddrSize=*/true);
178*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_THAT_EXPECTED(Sections, Succeeded());
179*a8b4c11fSFelipe de Azevedo Piovezan auto Ctx = DWARFContext::create(*Sections, 4, /*isLittleEndian=*/true);
180*a8b4c11fSFelipe de Azevedo Piovezan const DWARFDebugNames &DebugNames = Ctx->getDebugNames();
181*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_NE(DebugNames.begin(), DebugNames.end());
182*a8b4c11fSFelipe de Azevedo Piovezan const DWARFDebugNames::NameIndex &NameIndex = *DebugNames.begin();
183*a8b4c11fSFelipe de Azevedo Piovezan
184*a8b4c11fSFelipe de Azevedo Piovezan SmallVector<DWARFDebugNames::Entry> Name1Entries =
185*a8b4c11fSFelipe de Azevedo Piovezan to_vector_of<DWARFDebugNames::Entry>(NameIndex.equal_range("Name1"));
186*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(Name1Entries.size(), 1u);
187*a8b4c11fSFelipe de Azevedo Piovezan Expected<std::optional<DWARFDebugNames::Entry>> Name1Parent =
188*a8b4c11fSFelipe de Azevedo Piovezan Name1Entries[0].getParentDIEEntry();
189*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_THAT_EXPECTED(Name1Parent, Succeeded());
190*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(*Name1Parent, std::nullopt); // Name1 has no parent
191*a8b4c11fSFelipe de Azevedo Piovezan
192*a8b4c11fSFelipe de Azevedo Piovezan SmallVector<DWARFDebugNames::Entry> Name2Entries =
193*a8b4c11fSFelipe de Azevedo Piovezan to_vector_of<DWARFDebugNames::Entry>(NameIndex.equal_range("Name2"));
194*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(Name2Entries.size(), 1u);
195*a8b4c11fSFelipe de Azevedo Piovezan Expected<std::optional<DWARFDebugNames::Entry>> Name2Parent =
196*a8b4c11fSFelipe de Azevedo Piovezan Name2Entries[0].getParentDIEEntry();
197*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_THAT_EXPECTED(Name2Parent, Succeeded());
198*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ((**Name2Parent).getDIEUnitOffset(), 0x0); // Name2 parent == Name1
199*a8b4c11fSFelipe de Azevedo Piovezan
200*a8b4c11fSFelipe de Azevedo Piovezan SmallVector<DWARFDebugNames::Entry> Name3Entries =
201*a8b4c11fSFelipe de Azevedo Piovezan to_vector_of<DWARFDebugNames::Entry>(NameIndex.equal_range("Name3"));
202*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(Name3Entries.size(), 1u);
203*a8b4c11fSFelipe de Azevedo Piovezan Expected<std::optional<DWARFDebugNames::Entry>> Name3Parent =
204*a8b4c11fSFelipe de Azevedo Piovezan Name3Entries[0].getParentDIEEntry();
205*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_THAT_EXPECTED(Name3Parent, Succeeded());
206*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ((**Name3Parent).getDIEUnitOffset(), 0x1); // Name3 parent == Name2
207*a8b4c11fSFelipe de Azevedo Piovezan
208*a8b4c11fSFelipe de Azevedo Piovezan SmallVector<DWARFDebugNames::Entry> Name4Entries =
209*a8b4c11fSFelipe de Azevedo Piovezan to_vector_of<DWARFDebugNames::Entry>(NameIndex.equal_range("Name4"));
210*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_EQ(Name4Entries.size(), 1u);
211*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_FALSE(Name4Entries[0].hasParentInformation());
212*a8b4c11fSFelipe de Azevedo Piovezan }
213*a8b4c11fSFelipe de Azevedo Piovezan
TEST(DWARFDebugNames,InvalidAbbrevCode)214*a8b4c11fSFelipe de Azevedo Piovezan TEST(DWARFDebugNames, InvalidAbbrevCode) {
215*a8b4c11fSFelipe de Azevedo Piovezan const char *Yamldata = R"(
216*a8b4c11fSFelipe de Azevedo Piovezan --- !ELF
217*a8b4c11fSFelipe de Azevedo Piovezan debug_str:
218*a8b4c11fSFelipe de Azevedo Piovezan - 'NameType1'
219*a8b4c11fSFelipe de Azevedo Piovezan
220*a8b4c11fSFelipe de Azevedo Piovezan debug_names:
221*a8b4c11fSFelipe de Azevedo Piovezan Abbreviations:
222*a8b4c11fSFelipe de Azevedo Piovezan - Code: 0x1
223*a8b4c11fSFelipe de Azevedo Piovezan Tag: DW_TAG_namespace
224*a8b4c11fSFelipe de Azevedo Piovezan Indices:
225*a8b4c11fSFelipe de Azevedo Piovezan - Idx: DW_IDX_compile_unit
226*a8b4c11fSFelipe de Azevedo Piovezan Form: DW_FORM_data4
227*a8b4c11fSFelipe de Azevedo Piovezan Entries:
228*a8b4c11fSFelipe de Azevedo Piovezan - Name: 0x0 # strp to NameType1
229*a8b4c11fSFelipe de Azevedo Piovezan Code: 0x123456
230*a8b4c11fSFelipe de Azevedo Piovezan Values:
231*a8b4c11fSFelipe de Azevedo Piovezan - 0x0 # Compile unit
232*a8b4c11fSFelipe de Azevedo Piovezan )";
233*a8b4c11fSFelipe de Azevedo Piovezan
234*a8b4c11fSFelipe de Azevedo Piovezan Expected<StringMap<std::unique_ptr<MemoryBuffer>>> Sections =
235*a8b4c11fSFelipe de Azevedo Piovezan DWARFYAML::emitDebugSections(Yamldata,
236*a8b4c11fSFelipe de Azevedo Piovezan /*IsLittleEndian=*/true,
237*a8b4c11fSFelipe de Azevedo Piovezan /*Is64BitAddrSize=*/true);
238*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_THAT_EXPECTED(
239*a8b4c11fSFelipe de Azevedo Piovezan Sections,
240*a8b4c11fSFelipe de Azevedo Piovezan FailedWithMessage("did not find an Abbreviation for this code"));
241*a8b4c11fSFelipe de Azevedo Piovezan }
242*a8b4c11fSFelipe de Azevedo Piovezan
TEST(DWARFDebugNames,InvalidNumOfValues)243*a8b4c11fSFelipe de Azevedo Piovezan TEST(DWARFDebugNames, InvalidNumOfValues) {
244*a8b4c11fSFelipe de Azevedo Piovezan const char *Yamldata = R"(
245*a8b4c11fSFelipe de Azevedo Piovezan --- !ELF
246*a8b4c11fSFelipe de Azevedo Piovezan debug_str:
247*a8b4c11fSFelipe de Azevedo Piovezan - 'NameType1'
248*a8b4c11fSFelipe de Azevedo Piovezan
249*a8b4c11fSFelipe de Azevedo Piovezan debug_names:
250*a8b4c11fSFelipe de Azevedo Piovezan Abbreviations:
251*a8b4c11fSFelipe de Azevedo Piovezan - Code: 0x1
252*a8b4c11fSFelipe de Azevedo Piovezan Tag: DW_TAG_namespace
253*a8b4c11fSFelipe de Azevedo Piovezan Indices:
254*a8b4c11fSFelipe de Azevedo Piovezan - Idx: DW_IDX_compile_unit
255*a8b4c11fSFelipe de Azevedo Piovezan Form: DW_FORM_data4
256*a8b4c11fSFelipe de Azevedo Piovezan Entries:
257*a8b4c11fSFelipe de Azevedo Piovezan - Name: 0x0 # strp to NameType1
258*a8b4c11fSFelipe de Azevedo Piovezan Code: 0x1
259*a8b4c11fSFelipe de Azevedo Piovezan Values:
260*a8b4c11fSFelipe de Azevedo Piovezan - 0x0 # Compile unit
261*a8b4c11fSFelipe de Azevedo Piovezan - 0x0 # Compile unit
262*a8b4c11fSFelipe de Azevedo Piovezan - 0x0 # Compile unit
263*a8b4c11fSFelipe de Azevedo Piovezan )";
264*a8b4c11fSFelipe de Azevedo Piovezan
265*a8b4c11fSFelipe de Azevedo Piovezan Expected<StringMap<std::unique_ptr<MemoryBuffer>>> Sections =
266*a8b4c11fSFelipe de Azevedo Piovezan DWARFYAML::emitDebugSections(Yamldata,
267*a8b4c11fSFelipe de Azevedo Piovezan /*IsLittleEndian=*/true,
268*a8b4c11fSFelipe de Azevedo Piovezan /*Is64BitAddrSize=*/true);
269*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_THAT_EXPECTED(
270*a8b4c11fSFelipe de Azevedo Piovezan Sections, FailedWithMessage(
271*a8b4c11fSFelipe de Azevedo Piovezan "mismatch between provided and required number of values"));
272*a8b4c11fSFelipe de Azevedo Piovezan }
273*a8b4c11fSFelipe de Azevedo Piovezan
TEST(DWARFDebugNames,UnsupportedForm)274*a8b4c11fSFelipe de Azevedo Piovezan TEST(DWARFDebugNames, UnsupportedForm) {
275*a8b4c11fSFelipe de Azevedo Piovezan const char *Yamldata = R"(
276*a8b4c11fSFelipe de Azevedo Piovezan --- !ELF
277*a8b4c11fSFelipe de Azevedo Piovezan debug_str:
278*a8b4c11fSFelipe de Azevedo Piovezan - 'NameType1'
279*a8b4c11fSFelipe de Azevedo Piovezan
280*a8b4c11fSFelipe de Azevedo Piovezan debug_names:
281*a8b4c11fSFelipe de Azevedo Piovezan Abbreviations:
282*a8b4c11fSFelipe de Azevedo Piovezan - Code: 0x1
283*a8b4c11fSFelipe de Azevedo Piovezan Tag: DW_TAG_namespace
284*a8b4c11fSFelipe de Azevedo Piovezan Indices:
285*a8b4c11fSFelipe de Azevedo Piovezan - Idx: DW_IDX_compile_unit
286*a8b4c11fSFelipe de Azevedo Piovezan Form: DW_FORM_strx
287*a8b4c11fSFelipe de Azevedo Piovezan Entries:
288*a8b4c11fSFelipe de Azevedo Piovezan - Name: 0x0 # strp to NameType1
289*a8b4c11fSFelipe de Azevedo Piovezan Code: 0x1
290*a8b4c11fSFelipe de Azevedo Piovezan Values:
291*a8b4c11fSFelipe de Azevedo Piovezan - 0x0 # Compile unit
292*a8b4c11fSFelipe de Azevedo Piovezan )";
293*a8b4c11fSFelipe de Azevedo Piovezan
294*a8b4c11fSFelipe de Azevedo Piovezan Expected<StringMap<std::unique_ptr<MemoryBuffer>>> Sections =
295*a8b4c11fSFelipe de Azevedo Piovezan DWARFYAML::emitDebugSections(Yamldata,
296*a8b4c11fSFelipe de Azevedo Piovezan /*IsLittleEndian=*/true,
297*a8b4c11fSFelipe de Azevedo Piovezan /*Is64BitAddrSize=*/true);
298*a8b4c11fSFelipe de Azevedo Piovezan ASSERT_THAT_EXPECTED(
299*a8b4c11fSFelipe de Azevedo Piovezan Sections,
300*a8b4c11fSFelipe de Azevedo Piovezan FailedWithMessage("unsupported Form for YAML debug_names emitter"));
301*a8b4c11fSFelipe de Azevedo Piovezan }
30216a0313eSIgor Kudrin } // end anonymous namespace
303