• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===-- BreakpointResolverAddress.cpp ---------------------------*- 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 #include "lldb/Breakpoint/BreakpointResolverAddress.h"
11 
12 // C Includes
13 // C++ Includes
14 // Other libraries and framework includes
15 // Project includes
16 #include "lldb/lldb-private-log.h"
17 
18 #include "lldb/Breakpoint/BreakpointLocation.h"
19 #include "lldb/Core/Log.h"
20 #include "lldb/Core/StreamString.h"
21 #include "lldb/Target/Target.h"
22 
23 using namespace lldb;
24 using namespace lldb_private;
25 
26 //----------------------------------------------------------------------
27 // BreakpointResolverAddress:
28 //----------------------------------------------------------------------
BreakpointResolverAddress(Breakpoint * bkpt,const Address & addr)29 BreakpointResolverAddress::BreakpointResolverAddress
30 (
31     Breakpoint *bkpt,
32     const Address &addr
33 ) :
34     BreakpointResolver (bkpt, BreakpointResolver::AddressResolver),
35     m_addr (addr)
36 {
37 }
38 
~BreakpointResolverAddress()39 BreakpointResolverAddress::~BreakpointResolverAddress ()
40 {
41 
42 }
43 
44 void
ResolveBreakpoint(SearchFilter & filter)45 BreakpointResolverAddress::ResolveBreakpoint (SearchFilter &filter)
46 {
47     // The address breakpoint only takes once, so if we've already set it we're done.
48     if (m_breakpoint->GetNumLocations() > 0)
49         return;
50     else
51         BreakpointResolver::ResolveBreakpoint(filter);
52 }
53 
54 void
ResolveBreakpointInModules(SearchFilter & filter,ModuleList & modules)55 BreakpointResolverAddress::ResolveBreakpointInModules
56 (
57     SearchFilter &filter,
58     ModuleList &modules
59 )
60 {
61     // The address breakpoint only takes once, so if we've already set it we're done.
62     if (m_breakpoint->GetNumLocations() > 0)
63         return;
64     else
65         BreakpointResolver::ResolveBreakpointInModules (filter, modules);
66 }
67 
68 Searcher::CallbackReturn
SearchCallback(SearchFilter & filter,SymbolContext & context,Address * addr,bool containing)69 BreakpointResolverAddress::SearchCallback
70 (
71     SearchFilter &filter,
72     SymbolContext &context,
73     Address *addr,
74     bool containing
75 )
76 {
77     assert (m_breakpoint != NULL);
78 
79     if (filter.AddressPasses (m_addr))
80     {
81         BreakpointLocationSP bp_loc_sp(m_breakpoint->AddLocation(m_addr));
82         if (bp_loc_sp && !m_breakpoint->IsInternal())
83         {
84             StreamString s;
85             bp_loc_sp->GetDescription(&s, lldb::eDescriptionLevelVerbose);
86             Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_BREAKPOINTS));
87             if (log)
88                 log->Printf ("Added location: %s\n", s.GetData());
89         }
90     }
91     return Searcher::eCallbackReturnStop;
92 }
93 
94 Searcher::Depth
GetDepth()95 BreakpointResolverAddress::GetDepth()
96 {
97     return Searcher::eDepthTarget;
98 }
99 
100 void
GetDescription(Stream * s)101 BreakpointResolverAddress::GetDescription (Stream *s)
102 {
103     s->PutCString ("address = ");
104     m_addr.Dump(s, m_breakpoint->GetTarget().GetProcessSP().get(), Address::DumpStyleLoadAddress, Address::DumpStyleModuleWithFileAddress);
105 }
106 
107 void
Dump(Stream * s) const108 BreakpointResolverAddress::Dump (Stream *s) const
109 {
110 
111 }
112