Fix windows test failure caused by r323638

The test was failing because of an incorrect sizeof check in the name
index parsing code. This code was meant to check that we have enough
input to parse the fixed-size part of the dwarf header, which it did by
comparing the input to sizeof(Header). Originally struct Header only
contained the fixed-size part, but during review, we've moved additional
members into it, which rendered the sizeof check invalid.

I resolve this by moving the fixed-size part to a separate struct and
updating the sizeof-expression to use that.

llvm-svn: 323648
This commit is contained in:
Pavel Labath 2018-01-29 13:53:48 +00:00
parent dffb1a806c
commit e7264106d4
2 changed files with 8 additions and 4 deletions

View File

@ -164,9 +164,8 @@ public:
/// referenced by the name table and interpreted with the help of the
/// abbreviation table.
class DWARFDebugNames : public DWARFAcceleratorTable {
public:
/// Dwarf 5 Name Index header.
struct Header {
/// The fixed-size part of a Dwarf 5 Name Index header
struct HeaderPOD {
uint32_t UnitLength;
uint16_t Version;
uint16_t Padding;
@ -177,6 +176,11 @@ public:
uint32_t NameCount;
uint32_t AbbrevTableSize;
uint32_t AugmentationStringSize;
};
public:
/// Dwarf 5 Name Index header.
struct Header : public HeaderPOD {
SmallString<8> AugmentationString;
Error extract(const DWARFDataExtractor &AS, uint32_t *Offset);

View File

@ -331,7 +331,7 @@ void DWARFDebugNames::Header::dump(ScopedPrinter &W) const {
llvm::Error DWARFDebugNames::Header::extract(const DWARFDataExtractor &AS,
uint32_t *Offset) {
// Check that we can read the fixed-size part.
if (!AS.isValidOffset(*Offset + sizeof(Header) - 1))
if (!AS.isValidOffset(*Offset + sizeof(HeaderPOD) - 1))
return make_error<StringError>("Section too small: cannot read header.",
inconvertibleErrorCode());