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 23using namespace lldb; 24using namespace lldb_private; 25 26//---------------------------------------------------------------------- 27// BreakpointResolverAddress: 28//---------------------------------------------------------------------- 29BreakpointResolverAddress::BreakpointResolverAddress 30( 31 Breakpoint *bkpt, 32 const Address &addr 33) : 34 BreakpointResolver (bkpt, BreakpointResolver::AddressResolver), 35 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); 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 94Searcher::Depth 95BreakpointResolverAddress::GetDepth() 96{ 97 return Searcher::eDepthTarget; 98} 99 100void 101BreakpointResolverAddress::GetDescription (Stream *s) 102{ 103 s->PutCString ("address = "); 104 m_addr.Dump(s, m_breakpoint->GetTarget().GetProcessSP().get(), Address::DumpStyleLoadAddress, Address::DumpStyleModuleWithFileAddress); 105} 106 107void 108BreakpointResolverAddress::Dump (Stream *s) const 109{ 110 111} 112