forked from OSchip/llvm-project
[DebugInfo] Fix DebugLine::Prologue::getLength
The function a) returned 32-bits when in DWARF64, the PrologueLength field is 64-bits in size, and b) didn't work for DWARF version 5. Also deleted some related dead code. With this deletion, getLength is itself dead, but another change is about to make use of it. Reviewed by: probinson Differential Revision: https://reviews.llvm.org/D73626
This commit is contained in:
parent
676c29694c
commit
021f531786
|
@ -108,15 +108,7 @@ public:
|
|||
bool totalLengthIsValid() const;
|
||||
|
||||
/// Length of the prologue in bytes.
|
||||
uint32_t getLength() const {
|
||||
return PrologueLength + sizeofTotalLength() + sizeof(getVersion()) +
|
||||
sizeofPrologueLength();
|
||||
}
|
||||
|
||||
/// Length of the line table data in bytes (not including the prologue).
|
||||
uint32_t getStatementTableLength() const {
|
||||
return TotalLength + sizeofTotalLength() - getLength();
|
||||
}
|
||||
uint64_t getLength() const;
|
||||
|
||||
int32_t getMaxLineIncrementForSpecialOpcode() const {
|
||||
return LineBase + (int8_t)LineRange - 1;
|
||||
|
|
|
@ -299,6 +299,14 @@ parseV5DirFileTables(const DWARFDataExtractor &DebugLineData,
|
|||
return Error::success();
|
||||
}
|
||||
|
||||
uint64_t DWARFDebugLine::Prologue::getLength() const {
|
||||
uint64_t Length = PrologueLength + sizeofTotalLength() +
|
||||
sizeof(getVersion()) + sizeofPrologueLength();
|
||||
if (getVersion() >= 5)
|
||||
Length += 2; // Address + Segment selector sizes.
|
||||
return Length;
|
||||
}
|
||||
|
||||
Error DWARFDebugLine::Prologue::parse(
|
||||
const DWARFDataExtractor &DebugLineData, uint64_t *OffsetPtr,
|
||||
function_ref<void(Error)> RecoverableErrorCallback, const DWARFContext &Ctx,
|
||||
|
|
|
@ -235,6 +235,29 @@ TEST_F(DebugLineBasicFixture, GetOrParseLineTableAtInvalidOffsetAfterData) {
|
|||
"offset 0x00000001 is not a valid debug line section offset", 1);
|
||||
}
|
||||
|
||||
TEST_P(DebugLineParameterisedFixture, PrologueGetLength) {
|
||||
if (!setupGenerator(Version))
|
||||
return;
|
||||
LineTable < = Gen->addLineTable(Format);
|
||||
DWARFDebugLine::Prologue Prologue = LT.createBasicPrologue();
|
||||
LT.setPrologue(Prologue);
|
||||
generate();
|
||||
|
||||
// + 10 for sizes of DWARF-32 unit length, version, prologue length.
|
||||
uint64_t ExpectedLength = Prologue.PrologueLength + 10;
|
||||
if (Version == 5)
|
||||
// Add address and segment selector size fields.
|
||||
ExpectedLength += 2;
|
||||
if (Format == DWARF64)
|
||||
// Unit length grows by 8, prologue length by 4.
|
||||
ExpectedLength += 12;
|
||||
|
||||
auto ExpectedLineTable = Line.getOrParseLineTable(LineData, 0, *Context,
|
||||
nullptr, RecordRecoverable);
|
||||
ASSERT_THAT_EXPECTED(ExpectedLineTable, Succeeded());
|
||||
EXPECT_EQ((*ExpectedLineTable)->Prologue.getLength(), ExpectedLength);
|
||||
}
|
||||
|
||||
TEST_P(DebugLineParameterisedFixture, GetOrParseLineTableValidTable) {
|
||||
if (!setupGenerator(Version))
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue