From 521f1d058d89a669cd62ab584379b15c48c8a944 Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Wed, 22 Dec 2010 20:30:53 +0000 Subject: [PATCH] - 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 --- src/apps/debugger/dwarf/DataReader.h | 15 +++++++++++++++ src/apps/debugger/dwarf/DwarfFile.cpp | 17 ++++++----------- src/apps/debugger/dwarf/DwarfFile.h | 3 +-- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/apps/debugger/dwarf/DataReader.h b/src/apps/debugger/dwarf/DataReader.h index ee1cab3d50..e6c2e8d765 100644 --- a/src/apps/debugger/dwarf/DataReader.h +++ b/src/apps/debugger/dwarf/DataReader.h @@ -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; diff --git a/src/apps/debugger/dwarf/DwarfFile.cpp b/src/apps/debugger/dwarf/DwarfFile.cpp index 5cfb3a446d..3b2fe4548a 100644 --- a/src/apps/debugger/dwarf/DwarfFile.cpp +++ b/src/apps/debugger/dwarf/DwarfFile.cpp @@ -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()); diff --git a/src/apps/debugger/dwarf/DwarfFile.h b/src/apps/debugger/dwarf/DwarfFile.h index c6f8d196b1..a979c6fa9e 100644 --- a/src/apps/debugger/dwarf/DwarfFile.h +++ b/src/apps/debugger/dwarf/DwarfFile.h @@ -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,