blob: f8eff8f2702c2149e79fb6500346f68530afc94a [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- 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
23using namespace lldb;
24using namespace lldb_private;
25
26//----------------------------------------------------------------------
27// BreakpointResolverAddress:
28//----------------------------------------------------------------------
29BreakpointResolverAddress::BreakpointResolverAddress
30(
31 Breakpoint *bkpt,
32 const Address &addr
33) :
Johnny Chena62ad7c2010-10-28 17:27:46 +000034 BreakpointResolver (bkpt, BreakpointResolver::AddressResolver),
Chris Lattner24943d22010-06-08 16:52:24 +000035 m_addr (addr)
36{
37}
38
39BreakpointResolverAddress::~BreakpointResolverAddress ()
40{
41
42}
43
44void
45BreakpointResolverAddress::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
54void
55BreakpointResolverAddress::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
68Searcher::CallbackReturn
69BreakpointResolverAddress::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);
Greg Claytone005f2c2010-11-06 01:53:30 +000086 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_BREAKPOINTS));
Chris Lattner24943d22010-06-08 16:52:24 +000087 if (log)
88 log->Printf ("Added location: %s\n", s.GetData());
89 }
90 }
91 return Searcher::eCallbackReturnStop;
92}
93
94Searcher::Depth
95BreakpointResolverAddress::GetDepth()
96{
97 return Searcher::eDepthTarget;
98}
99
100void
101BreakpointResolverAddress::GetDescription (Stream *s)
102{
Greg Clayton12bec712010-06-28 21:30:43 +0000103 s->PutCString ("address = ");
Chris Lattner24943d22010-06-08 16:52:24 +0000104 m_addr.Dump(s, m_breakpoint->GetTarget().GetProcessSP().get(), Address::DumpStyleLoadAddress, Address::DumpStyleModuleWithFileAddress);
105}
106
107void
108BreakpointResolverAddress::Dump (Stream *s) const
109{
110
111}