From 1c6fd17f75bd67d7135d31ffb138e19abec4de89 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Fri, 26 Jun 2009 00:39:23 +0000 Subject: [PATCH] Pulled interface TeamMemory out of DebuggerInterface to make the arch and model packages indepent of the latter. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31246 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/debugger/Jamfile | 1 + src/apps/debugger/arch/Architecture.cpp | 4 ++-- src/apps/debugger/arch/Architecture.h | 7 +++---- src/apps/debugger/arch/ArchitectureTypes.h | 2 ++ .../debugger/arch/x86/ArchitectureX86.cpp | 21 +++++++++---------- src/apps/debugger/arch/x86/ArchitectureX86.h | 3 +-- .../debugger_interface/DebuggerInterface.h | 7 ++++--- src/apps/debugger/model/TeamDebugModel.cpp | 4 ++-- src/apps/debugger/model/TeamDebugModel.h | 10 ++++----- src/apps/debugger/model/TeamMemory.cpp | 11 ++++++++++ src/apps/debugger/model/TeamMemory.h | 21 +++++++++++++++++++ 11 files changed, 62 insertions(+), 29 deletions(-) create mode 100644 src/apps/debugger/model/TeamMemory.cpp create mode 100644 src/apps/debugger/model/TeamMemory.h diff --git a/src/apps/debugger/Jamfile b/src/apps/debugger/Jamfile index 6b63258fc8..61f79dcade 100644 --- a/src/apps/debugger/Jamfile +++ b/src/apps/debugger/Jamfile @@ -71,6 +71,7 @@ Application Debugger : SymbolInfo.cpp Team.cpp TeamDebugModel.cpp + TeamMemory.cpp Thread.cpp ThreadInfo.cpp diff --git a/src/apps/debugger/arch/Architecture.cpp b/src/apps/debugger/arch/Architecture.cpp index a775d27202..acf46f2b4b 100644 --- a/src/apps/debugger/arch/Architecture.cpp +++ b/src/apps/debugger/arch/Architecture.cpp @@ -20,9 +20,9 @@ #include "Team.h" -Architecture::Architecture(DebuggerInterface* debuggerInterface) +Architecture::Architecture(TeamMemory* teamMemory) : - fDebuggerInterface(debuggerInterface) + fTeamMemory(teamMemory) { } diff --git a/src/apps/debugger/arch/Architecture.h b/src/apps/debugger/arch/Architecture.h index 467aa5ea5a..4575b8ed48 100644 --- a/src/apps/debugger/arch/Architecture.h +++ b/src/apps/debugger/arch/Architecture.h @@ -13,7 +13,6 @@ class CpuState; -class DebuggerInterface; class FunctionDebugInfo; class Image; class ImageDebugInfoProvider; @@ -24,12 +23,12 @@ class StackFrame; class StackTrace; class Statement; class Team; +class TeamMemory; class Architecture : public Referenceable { public: - Architecture( - DebuggerInterface* debuggerInterface); + Architecture(TeamMemory* teamMemory); virtual ~Architecture(); virtual status_t Init(); @@ -72,7 +71,7 @@ public: // team is not locked protected: - DebuggerInterface* fDebuggerInterface; + TeamMemory* fTeamMemory; }; diff --git a/src/apps/debugger/arch/ArchitectureTypes.h b/src/apps/debugger/arch/ArchitectureTypes.h index 15460d16da..82753bf192 100644 --- a/src/apps/debugger/arch/ArchitectureTypes.h +++ b/src/apps/debugger/arch/ArchitectureTypes.h @@ -5,6 +5,8 @@ #ifndef ARCHITECTURE_TYPES_H #define ARCHITECTURE_TYPES_H +#include + typedef uint64 target_addr_t; typedef uint64 target_size_t; diff --git a/src/apps/debugger/arch/x86/ArchitectureX86.cpp b/src/apps/debugger/arch/x86/ArchitectureX86.cpp index d4df937d86..6238aedd4a 100644 --- a/src/apps/debugger/arch/x86/ArchitectureX86.cpp +++ b/src/apps/debugger/arch/x86/ArchitectureX86.cpp @@ -12,19 +12,19 @@ #include #include "CpuStateX86.h" -#include "DebuggerInterface.h" #include "DisassembledCode.h" #include "FunctionDebugInfo.h" #include "InstructionInfo.h" #include "StackFrame.h" #include "Statement.h" +#include "TeamMemory.h" #include "disasm/DisassemblerX86.h" -ArchitectureX86::ArchitectureX86(DebuggerInterface* debuggerInterface) +ArchitectureX86::ArchitectureX86(TeamMemory* teamMemory) : - Architecture(debuggerInterface) + Architecture(teamMemory) { } @@ -138,7 +138,7 @@ ArchitectureX86::CreateStackFrame(Image* image, FunctionDebugInfo* function, // stack. uint32 esp = cpuState->IntRegisterValue(X86_REGISTER_ESP); uint32 address; - if (fDebuggerInterface->ReadMemory(esp, &address, 4) == 4) { + if (fTeamMemory->ReadMemory(esp, &address, 4) == 4) { returnAddress = address; previousFramePointer = framePointer; framePointer = 0; @@ -171,7 +171,7 @@ ArchitectureX86::CreateStackFrame(Image* image, FunctionDebugInfo* function, // The epilogue is a single "pop %ebp", so we check whether the // current instruction is already a "ret". uint8 code[1]; - if (fDebuggerInterface->ReadMemory(eip, &code, 1) == 1 + if (fTeamMemory->ReadMemory(eip, &code, 1) == 1 && code[0] == 0xc3) { stack = cpuState->IntRegisterValue(X86_REGISTER_ESP); } @@ -179,7 +179,7 @@ ArchitectureX86::CreateStackFrame(Image* image, FunctionDebugInfo* function, if (stack != 0) { uint32 address; - if (fDebuggerInterface->ReadMemory(stack, &address, 4) == 4) { + if (fTeamMemory->ReadMemory(stack, &address, 4) == 4) { returnAddress = address; previousFramePointer = framePointer; framePointer = 0; @@ -201,8 +201,7 @@ ArchitectureX86::CreateStackFrame(Image* image, FunctionDebugInfo* function, if (readStandardFrame) { uint32 frameData[2]; if (framePointer != 0 - && fDebuggerInterface->ReadMemory(framePointer, frameData, 8) - == 8) { + && fTeamMemory->ReadMemory(framePointer, frameData, 8) == 8) { previousFramePointer = frameData[0]; returnAddress = frameData[1]; } @@ -252,7 +251,7 @@ ArchitectureX86::UpdateStackFrameCpuState(const StackFrame* frame, MemoryDeleter bufferDeleter(buffer); // read the code - ssize_t bytesRead = fDebuggerInterface->ReadMemory(functionAddress, buffer, + ssize_t bytesRead = fTeamMemory->ReadMemory(functionAddress, buffer, bufferSize); if (bytesRead != (ssize_t)bufferSize) return; @@ -339,7 +338,7 @@ ArchitectureX86::GetInstructionInfo(target_addr_t address, // read the code uint8 buffer[16]; // TODO: What's the maximum instruction size? - ssize_t bytesRead = fDebuggerInterface->ReadMemory(address, buffer, + ssize_t bytesRead = fTeamMemory->ReadMemory(address, buffer, sizeof(buffer)); if (bytesRead < 0) return bytesRead; @@ -410,7 +409,7 @@ ArchitectureX86::_HasFunctionPrologue(FunctionDebugInfo* function) const return false; uint8 buffer[3]; - if (fDebuggerInterface->ReadMemory(function->Address(), buffer, 3) != 3) + if (fTeamMemory->ReadMemory(function->Address(), buffer, 3) != 3) return false; return buffer[0] == 0x55 && buffer[1] == 0x89 && buffer[2] == 0xe5; diff --git a/src/apps/debugger/arch/x86/ArchitectureX86.h b/src/apps/debugger/arch/x86/ArchitectureX86.h index 83e12b02e3..68aac4b4ae 100644 --- a/src/apps/debugger/arch/x86/ArchitectureX86.h +++ b/src/apps/debugger/arch/x86/ArchitectureX86.h @@ -12,8 +12,7 @@ class ArchitectureX86 : public Architecture { public: - ArchitectureX86( - DebuggerInterface* debuggerInterface); + ArchitectureX86(TeamMemory* teamMemory); virtual ~ArchitectureX86(); virtual status_t Init(); diff --git a/src/apps/debugger/debugger_interface/DebuggerInterface.h b/src/apps/debugger/debugger_interface/DebuggerInterface.h index 7ef3e62563..2e3038ba21 100644 --- a/src/apps/debugger/debugger_interface/DebuggerInterface.h +++ b/src/apps/debugger/debugger_interface/DebuggerInterface.h @@ -10,7 +10,7 @@ #include #include -#include "ArchitectureTypes.h" +#include "TeamMemory.h" class Architecture; @@ -21,7 +21,7 @@ class SymbolInfo; class ThreadInfo; -class DebuggerInterface { +class DebuggerInterface : public TeamMemory { public: DebuggerInterface(team_id teamID); virtual ~DebuggerInterface(); @@ -54,7 +54,8 @@ public: CpuState*& _state); // returns a reference to the caller - ssize_t ReadMemory(target_addr_t address, void* buffer, + // TeamMemory + virtual ssize_t ReadMemory(target_addr_t address, void* buffer, size_t size); private: diff --git a/src/apps/debugger/model/TeamDebugModel.cpp b/src/apps/debugger/model/TeamDebugModel.cpp index 4a87f8fb67..a9bb938800 100644 --- a/src/apps/debugger/model/TeamDebugModel.cpp +++ b/src/apps/debugger/model/TeamDebugModel.cpp @@ -37,11 +37,11 @@ private: // #pragma mark - TeamDebugModel -TeamDebugModel::TeamDebugModel(Team* team, DebuggerInterface* debuggerInterface, +TeamDebugModel::TeamDebugModel(Team* team, TeamMemory* teamMemory, Architecture* architecture) : fTeam(team), - fDebuggerInterface(debuggerInterface), + fTeamMemory(teamMemory), fArchitecture(architecture) { } diff --git a/src/apps/debugger/model/TeamDebugModel.h b/src/apps/debugger/model/TeamDebugModel.h index c1d9383131..1ae6882e4d 100644 --- a/src/apps/debugger/model/TeamDebugModel.h +++ b/src/apps/debugger/model/TeamDebugModel.h @@ -22,7 +22,7 @@ enum { class Architecture; class Breakpoint; -class DebuggerInterface; +class TeamMemory; class TeamDebugModel { @@ -33,7 +33,7 @@ public: public: TeamDebugModel(Team* team, - DebuggerInterface* debuggerInterface, + TeamMemory* teamMemory, Architecture* architecture); ~TeamDebugModel(); @@ -43,8 +43,8 @@ public: void Unlock() { fTeam->Unlock(); } Team* GetTeam() const { return fTeam; } - DebuggerInterface* GetDebuggerInterface() const - { return fDebuggerInterface; } + TeamMemory* GetTeamMemory() const + { return fTeamMemory; } Architecture* GetArchitecture() const { return fArchitecture; } @@ -79,7 +79,7 @@ private: private: Team* fTeam; - DebuggerInterface* fDebuggerInterface; + TeamMemory* fTeamMemory; Architecture* fArchitecture; BreakpointList fBreakpoints; ListenerList fListeners; diff --git a/src/apps/debugger/model/TeamMemory.cpp b/src/apps/debugger/model/TeamMemory.cpp new file mode 100644 index 0000000000..e46e31e115 --- /dev/null +++ b/src/apps/debugger/model/TeamMemory.cpp @@ -0,0 +1,11 @@ +/* + * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. + * Distributed under the terms of the MIT License. + */ + +#include "TeamMemory.h" + + +TeamMemory::~TeamMemory() +{ +} diff --git a/src/apps/debugger/model/TeamMemory.h b/src/apps/debugger/model/TeamMemory.h new file mode 100644 index 0000000000..75d5e05707 --- /dev/null +++ b/src/apps/debugger/model/TeamMemory.h @@ -0,0 +1,21 @@ +/* + * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. + * Distributed under the terms of the MIT License. + */ +#ifndef TEAM_MEMORY_H +#define TEAM_MEMORY_H + +#include "TargetAddressRange.h" + + +class TeamMemory { +public: + virtual ~TeamMemory(); + + + virtual ssize_t ReadMemory(target_addr_t address, void* buffer, + size_t size) = 0; +}; + + +#endif // TEAM_MEMORY_H