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_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