diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2020-07-26 19:36:28 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2020-07-26 19:36:28 +0000 |
commit | cfca06d7963fa0909f90483b42a6d7d194d01e08 (patch) | |
tree | 209fb2a2d68f8f277793fc8df46c753d31bc853b /lldb/source/Breakpoint/BreakpointResolverAddress.cpp | |
parent | 706b4fc47bbc608932d3b491ae19a3b9cde9497b (diff) |
Notes
Diffstat (limited to 'lldb/source/Breakpoint/BreakpointResolverAddress.cpp')
-rw-r--r-- | lldb/source/Breakpoint/BreakpointResolverAddress.cpp | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/lldb/source/Breakpoint/BreakpointResolverAddress.cpp b/lldb/source/Breakpoint/BreakpointResolverAddress.cpp index b98568098b4b5..2c56912b56af8 100644 --- a/lldb/source/Breakpoint/BreakpointResolverAddress.cpp +++ b/lldb/source/Breakpoint/BreakpointResolverAddress.cpp @@ -1,4 +1,4 @@ -//===-- BreakpointResolverAddress.cpp ---------------------------*- C++ -*-===// +//===-- BreakpointResolverAddress.cpp -------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -22,21 +22,19 @@ using namespace lldb_private; // BreakpointResolverAddress: BreakpointResolverAddress::BreakpointResolverAddress( - Breakpoint *bkpt, const Address &addr, const FileSpec &module_spec) + const BreakpointSP &bkpt, const Address &addr, const FileSpec &module_spec) : BreakpointResolver(bkpt, BreakpointResolver::AddressResolver), m_addr(addr), m_resolved_addr(LLDB_INVALID_ADDRESS), m_module_filespec(module_spec) {} -BreakpointResolverAddress::BreakpointResolverAddress(Breakpoint *bkpt, +BreakpointResolverAddress::BreakpointResolverAddress(const BreakpointSP &bkpt, const Address &addr) : BreakpointResolver(bkpt, BreakpointResolver::AddressResolver), m_addr(addr), m_resolved_addr(LLDB_INVALID_ADDRESS), m_module_filespec() { } -BreakpointResolverAddress::~BreakpointResolverAddress() {} - BreakpointResolver *BreakpointResolverAddress::CreateFromStructuredData( - Breakpoint *bkpt, const StructuredData::Dictionary &options_dict, + const BreakpointSP &bkpt, const StructuredData::Dictionary &options_dict, Status &error) { llvm::StringRef module_name; lldb::addr_t addr_offset; @@ -100,7 +98,7 @@ void BreakpointResolverAddress::ResolveBreakpoint(SearchFilter &filter) { bool re_resolve = false; if (m_addr.GetSection() || m_module_filespec) re_resolve = true; - else if (m_breakpoint->GetNumLocations() == 0) + else if (GetBreakpoint()->GetNumLocations() == 0) re_resolve = true; if (re_resolve) @@ -113,7 +111,7 @@ void BreakpointResolverAddress::ResolveBreakpointInModules( bool re_resolve = false; if (m_addr.GetSection()) re_resolve = true; - else if (m_breakpoint->GetNumLocations() == 0) + else if (GetBreakpoint()->GetNumLocations() == 0) re_resolve = true; if (re_resolve) @@ -122,15 +120,16 @@ void BreakpointResolverAddress::ResolveBreakpointInModules( Searcher::CallbackReturn BreakpointResolverAddress::SearchCallback( SearchFilter &filter, SymbolContext &context, Address *addr) { - assert(m_breakpoint != nullptr); + BreakpointSP breakpoint_sp = GetBreakpoint(); + Breakpoint &breakpoint = *breakpoint_sp; if (filter.AddressPasses(m_addr)) { - if (m_breakpoint->GetNumLocations() == 0) { + if (breakpoint.GetNumLocations() == 0) { // If the address is just an offset, and we're given a module, see if we // can find the appropriate module loaded in the binary, and fix up // m_addr to use that. if (!m_addr.IsSectionOffset() && m_module_filespec) { - Target &target = m_breakpoint->GetTarget(); + Target &target = breakpoint.GetTarget(); ModuleSpec module_spec(m_module_filespec); ModuleSP module_sp = target.GetImages().FindFirstModule(module_spec); if (module_sp) { @@ -140,9 +139,9 @@ Searcher::CallbackReturn BreakpointResolverAddress::SearchCallback( } } - m_resolved_addr = m_addr.GetLoadAddress(&m_breakpoint->GetTarget()); + m_resolved_addr = m_addr.GetLoadAddress(&breakpoint.GetTarget()); BreakpointLocationSP bp_loc_sp(AddLocation(m_addr)); - if (bp_loc_sp && !m_breakpoint->IsInternal()) { + if (bp_loc_sp && !breakpoint.IsInternal()) { StreamString s; bp_loc_sp->GetDescription(&s, lldb::eDescriptionLevelVerbose); Log *log( @@ -150,9 +149,9 @@ Searcher::CallbackReturn BreakpointResolverAddress::SearchCallback( LLDB_LOGF(log, "Added location: %s\n", s.GetData()); } } else { - BreakpointLocationSP loc_sp = m_breakpoint->GetLocationAtIndex(0); + BreakpointLocationSP loc_sp = breakpoint.GetLocationAtIndex(0); lldb::addr_t cur_load_location = - m_addr.GetLoadAddress(&m_breakpoint->GetTarget()); + m_addr.GetLoadAddress(&breakpoint.GetTarget()); if (cur_load_location != m_resolved_addr) { m_resolved_addr = cur_load_location; loc_sp->ClearBreakpointSite(); @@ -169,7 +168,7 @@ lldb::SearchDepth BreakpointResolverAddress::GetDepth() { void BreakpointResolverAddress::GetDescription(Stream *s) { s->PutCString("address = "); - m_addr.Dump(s, m_breakpoint->GetTarget().GetProcessSP().get(), + m_addr.Dump(s, GetBreakpoint()->GetTarget().GetProcessSP().get(), Address::DumpStyleModuleWithFileAddress, Address::DumpStyleLoadAddress); } @@ -177,8 +176,8 @@ void BreakpointResolverAddress::GetDescription(Stream *s) { void BreakpointResolverAddress::Dump(Stream *s) const {} lldb::BreakpointResolverSP -BreakpointResolverAddress::CopyForBreakpoint(Breakpoint &breakpoint) { +BreakpointResolverAddress::CopyForBreakpoint(BreakpointSP &breakpoint) { lldb::BreakpointResolverSP ret_sp( - new BreakpointResolverAddress(&breakpoint, m_addr)); + new BreakpointResolverAddress(breakpoint, m_addr)); return ret_sp; } |