forked from OSchip/llvm-project
[MachO] Add a test for detecting reserved unit length.
This is a follow-up for D71546 to add a corresponding unit test. Differential Revision: https://reviews.llvm.org/D72695
This commit is contained in:
parent
0dc6c249bf
commit
fcc08aa835
|
@ -97,3 +97,41 @@ TEST(ToAtomsTest, basic_obj_x86_64) {
|
||||||
EXPECT_TRUE(atom4->name().equals("_undef"));
|
EXPECT_TRUE(atom4->name().equals("_undef"));
|
||||||
EXPECT_EQ(lld::Atom::definitionUndefined, atom4->definition());
|
EXPECT_EQ(lld::Atom::definitionUndefined, atom4->definition());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(ToAtomsTest, reservedUnitLength) {
|
||||||
|
static const uint8_t debugInfoWithReservedLengthContent[12] = {
|
||||||
|
0xf0, 0xff, 0xff, 0xff // Reserved length value
|
||||||
|
};
|
||||||
|
static const uint8_t debugInfoWithValidBigLengthContent[12] = {
|
||||||
|
0xef, 0xff, 0xff, 0xff, // The maximum valid length value for DWARF32
|
||||||
|
0x00, 0x00 // Wrong version
|
||||||
|
};
|
||||||
|
static const uint8_t debugAbbrevDummyContent[] = {0x00};
|
||||||
|
|
||||||
|
NormalizedFile fReservedLength, fValidBigLength;
|
||||||
|
fReservedLength.arch = lld::MachOLinkingContext::arch_x86;
|
||||||
|
fValidBigLength.arch = lld::MachOLinkingContext::arch_x86;
|
||||||
|
Section section;
|
||||||
|
section.segmentName = "__DWARF";
|
||||||
|
section.sectionName = "__debug_info";
|
||||||
|
section.content = llvm::makeArrayRef(debugInfoWithReservedLengthContent);
|
||||||
|
fReservedLength.sections.push_back(section);
|
||||||
|
section.content = llvm::makeArrayRef(debugInfoWithValidBigLengthContent);
|
||||||
|
fValidBigLength.sections.push_back(section);
|
||||||
|
section.sectionName = "__debug_abbrev";
|
||||||
|
section.content = llvm::makeArrayRef(debugAbbrevDummyContent);
|
||||||
|
fReservedLength.sections.push_back(section);
|
||||||
|
fValidBigLength.sections.push_back(section);
|
||||||
|
|
||||||
|
auto resultReservedLength = normalizedToAtoms(fReservedLength, "foo", false);
|
||||||
|
auto resultValidBigLength = normalizedToAtoms(fValidBigLength, "foo", false);
|
||||||
|
|
||||||
|
// Both cases should return errors, but different.
|
||||||
|
ASSERT_FALSE(resultReservedLength);
|
||||||
|
ASSERT_FALSE(resultValidBigLength);
|
||||||
|
|
||||||
|
EXPECT_STREQ("Malformed DWARF in foo",
|
||||||
|
toString(resultReservedLength.takeError()).c_str());
|
||||||
|
EXPECT_STREQ("Unsupported DWARF version in foo",
|
||||||
|
toString(resultValidBigLength.takeError()).c_str());
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue