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