1/* 2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef BREAKPOINT_H 6#define BREAKPOINT_H 7 8#include "UserBreakpoint.h" 9 10 11class Image; 12 13 14class BreakpointClient { 15public: 16 virtual ~BreakpointClient(); 17}; 18 19 20class Breakpoint : public BReferenceable { 21public: 22 Breakpoint(Image* image, target_addr_t address); 23 ~Breakpoint(); 24 25 Image* GetImage() const { return fImage; } 26 target_addr_t Address() const { return fAddress; } 27 28 bool IsInstalled() const { return fInstalled; } 29 void SetInstalled(bool installed); 30 31 bool ShouldBeInstalled() const; 32 bool IsUnused() const; 33 bool HasEnabledUserBreakpoint() const; 34 35 UserBreakpointInstance* FirstUserBreakpoint() const 36 { return fUserBreakpoints.Head(); } 37 UserBreakpointInstance* LastUserBreakpoint() const 38 { return fUserBreakpoints.Tail(); } 39 const UserBreakpointInstanceList& UserBreakpoints() const 40 { return fUserBreakpoints; } 41 42 void AddUserBreakpoint( 43 UserBreakpointInstance* instance); 44 void RemoveUserBreakpoint( 45 UserBreakpointInstance* instance); 46 47 bool AddClient(BreakpointClient* client); 48 void RemoveClient(BreakpointClient* client); 49 50 static int CompareBreakpoints(const Breakpoint* a, 51 const Breakpoint* b); 52 static int CompareAddressBreakpoint( 53 const target_addr_t* address, 54 const Breakpoint* breakpoint); 55 56private: 57 typedef BObjectList<BreakpointClient> ClientList; 58 59private: 60 target_addr_t fAddress; 61 Image* fImage; 62 UserBreakpointInstanceList fUserBreakpoints; 63 ClientList fClients; 64 bool fInstalled; 65}; 66 67 68#endif // BREAKPOINT_H 69