1 //===-- BreakpointResolverAddress.h -----------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef liblldb_BreakpointResolverAddress_h_ 11 #define liblldb_BreakpointResolverAddress_h_ 12 13 #include "lldb/Breakpoint/BreakpointResolver.h" 14 #include "lldb/Core/ModuleSpec.h" 15 16 namespace lldb_private { 17 18 //---------------------------------------------------------------------- 19 /// @class BreakpointResolverAddress BreakpointResolverAddress.h 20 /// "lldb/Breakpoint/BreakpointResolverAddress.h" This class sets breakpoints 21 /// on a given Address. This breakpoint only takes once, and then it won't 22 /// attempt to reset itself. 23 //---------------------------------------------------------------------- 24 25 class BreakpointResolverAddress : public BreakpointResolver { 26 public: 27 BreakpointResolverAddress(Breakpoint *bkpt, const Address &addr); 28 29 BreakpointResolverAddress(Breakpoint *bkpt, const Address &addr, 30 const FileSpec &module_spec); 31 32 ~BreakpointResolverAddress() override; 33 34 static BreakpointResolver * 35 CreateFromStructuredData(Breakpoint *bkpt, 36 const StructuredData::Dictionary &options_dict, 37 Status &error); 38 39 StructuredData::ObjectSP SerializeToStructuredData() override; 40 41 void ResolveBreakpoint(SearchFilter &filter) override; 42 43 void ResolveBreakpointInModules(SearchFilter &filter, 44 ModuleList &modules) override; 45 46 Searcher::CallbackReturn SearchCallback(SearchFilter &filter, 47 SymbolContext &context, Address *addr, 48 bool containing) override; 49 50 lldb::SearchDepth GetDepth() override; 51 52 void GetDescription(Stream *s) override; 53 54 void Dump(Stream *s) const override; 55 56 /// Methods for support type inquiry through isa, cast, and dyn_cast: classof(const BreakpointResolverAddress *)57 static inline bool classof(const BreakpointResolverAddress *) { return true; } classof(const BreakpointResolver * V)58 static inline bool classof(const BreakpointResolver *V) { 59 return V->getResolverID() == BreakpointResolver::AddressResolver; 60 } 61 62 lldb::BreakpointResolverSP CopyForBreakpoint(Breakpoint &breakpoint) override; 63 64 protected: 65 Address 66 m_addr; // The address - may be Section Offset or may be just an offset 67 lldb::addr_t m_resolved_addr; // The current value of the resolved load 68 // address for this breakpoint, 69 FileSpec m_module_filespec; // If this filespec is Valid, and m_addr is an 70 // offset, then it will be converted 71 // to a Section+Offset address in this module, whenever that module gets 72 // around to being loaded. 73 private: 74 DISALLOW_COPY_AND_ASSIGN(BreakpointResolverAddress); 75 }; 76 77 } // namespace lldb_private 78 79 #endif // liblldb_BreakpointResolverAddress_h_ 80