- Add some extra methods to DataReader which obtain a new reader with additional restrictions.

- Use new methods to simplify a few places in DwarfFile.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39918 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Rene Gollent
2010-12-22 20:30:53 +00:00
parent b27cf34dc1
commit 521f1d058d
3 changed files with 22 additions and 13 deletions
+15
View File
@@ -36,6 +36,21 @@ public:
fOverflow = false;
}
DataReader RestrictedReader()
{
return *this;
}
DataReader RestrictedReader(off_t maxLength)
{
return DataReader(fData, maxLength, fAddressSize);
}
DataReader RestrictedReader(off_t relativeOffset, off_t maxLength)
{
return DataReader(fData + relativeOffset, maxLength, fAddressSize);
}
bool HasData() const
{
return fSize > 0;
+6 -11
View File
@@ -672,8 +672,10 @@ DwarfFile::UnwindCallFrame(CompilationUnit* unit,
if (error != B_OK)
return error;
DataReader restrictedReader =
dataReader.RestrictedReader(remaining);
error = _ParseFrameInfoInstructions(unit, context,
dataReader.Offset(), remaining);
restrictedReader);
if (error != B_OK)
return error;
@@ -1604,22 +1606,15 @@ DwarfFile::_ParseCIE(CompilationUnit* unit, CfaContext& context,
if (remaining < 0)
return B_BAD_DATA;
return _ParseFrameInfoInstructions(unit, context,
cieOffset + dataReader.Offset(), remaining);
DataReader restrictedReader = dataReader.RestrictedReader(remaining);
return _ParseFrameInfoInstructions(unit, context, restrictedReader);
}
status_t
DwarfFile::_ParseFrameInfoInstructions(CompilationUnit* unit,
CfaContext& context, off_t instructionOffset, off_t instructionSize)
CfaContext& context, DataReader& dataReader)
{
if (instructionSize <= 0)
return B_OK;
DataReader dataReader(
(uint8*)fDebugFrameSection->Data() + instructionOffset,
instructionSize, unit->AddressSize());
while (dataReader.BytesRemaining() > 0) {
TRACE_CFI(" [%2lld]", dataReader.BytesRemaining());
+1 -2
View File
@@ -116,8 +116,7 @@ private:
CIEAugmentation& cieAugmentation);
status_t _ParseFrameInfoInstructions(
CompilationUnit* unit, CfaContext& context,
off_t instructionOffset,
off_t instructionSize);
DataReader& dataReader);
status_t _ParsePublicTypesInfo();
status_t _ParsePublicTypesInfo(DataReader& dataReader,