[PATCH] D67276: [DWARF] Add a unit test for DWARFUnit::getLength().
Igor Kudrin via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 6 07:18:36 PDT 2019
ikudrin created this revision.
ikudrin added reviewers: dblaikie, probinson, aprantl, MaskRay.
ikudrin added projects: debug-info, LLVM.
This is a follow-up of D66472 <https://reviews.llvm.org/D66472>, where the return value of `DWARFUnit::getLength()` was changed from `uint32_t` to `uint64_t`.
The test checks that a unit header with Length > 4G can be successfully parsed and the value of the Length field is not truncated.
Repository:
rL LLVM
https://reviews.llvm.org/D67276
Files:
unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp
Index: unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp
===================================================================
--- unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp
+++ unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp
@@ -3158,4 +3158,44 @@
AssertRangesIntersect(Ranges, {{0x20, 0x21}, {0x2f, 0x31}});
}
+TEST(DWARFDebugInfo, TestDWARF64UnitLength) {
+ static const char DebugInfoSecRaw[] =
+ "\xff\xff\xff\xff" // DWARF64 mark
+ "\x88\x77\x66\x55\x44\x33\x22\x11" // Length
+ "\x05\x00" // Version
+ "\x01" // DW_UT_compile
+ "\x04" // Address size
+ "\0\0\0\0\0\0\0\0"; // Offset Into Abbrev. Sec.
+ StringMap<std::unique_ptr<MemoryBuffer>> Sections;
+ Sections.insert(std::make_pair(
+ "debug_info", MemoryBuffer::getMemBuffer(
+ StringRef(DebugInfoSecRaw, sizeof(DebugInfoSecRaw)))));
+ auto Context = DWARFContext::create(Sections, 8, true);
+ const auto &Obj = Context->getDWARFObj();
+ Obj.forEachInfoSections([&](const DWARFSection &Sec) {
+ DWARFUnitHeader Header;
+ DWARFDataExtractor Data(Obj, Sec, true, 8);
+ uint64_t Offset = 0;
+ EXPECT_FALSE(Header.extract(*Context, Data, &Offset));
+ // Header.extract() returns false because there is not enough space
+ // in the section for the declared length. Anyway, we can check that
+ // the properties are read correctly.
+ ASSERT_EQ(DwarfFormat::DWARF64, Header.getFormat());
+ ASSERT_EQ(0x1122334455667788ULL, Header.getLength());
+ ASSERT_EQ(5, Header.getVersion());
+ ASSERT_EQ(DW_UT_compile, Header.getUnitType());
+ ASSERT_EQ(4, Header.getAddressByteSize());
+
+ // Check that the length can be correctly read in the unit class.
+ DWARFUnitVector DummyUnitVector;
+ DWARFSection DummySec;
+ DWARFCompileUnit CU(*Context, Sec, Header, /* DA = */ 0, /* RS = */ 0,
+ /* LocSection = */ 0, /* SS = */ StringRef(),
+ /* SOS = */ DummySec, /* AOS = */ 0,
+ /* LS = */ DummySec, /* LE = */ true,
+ /* isDWO= */ false, DummyUnitVector);
+ ASSERT_EQ(0x1122334455667788ULL, CU.getLength());
+ });
+}
+
} // end anonymous namespace
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D67276.219093.patch
Type: text/x-patch
Size: 2324 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190906/417a9b98/attachment.bin>
More information about the llvm-commits
mailing list