33 changes: 16 additions & 17 deletions lldb/source/Breakpoint/BreakpointResolverAddress.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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) {
Expand All @@ -140,19 +139,19 @@ 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(
lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_BREAKPOINTS));
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();
Expand All @@ -169,16 +168,16 @@ 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);
}

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;
}
12 changes: 4 additions & 8 deletions lldb/source/Breakpoint/BreakpointResolverFileLine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,16 @@ using namespace lldb_private;

// BreakpointResolverFileLine:
BreakpointResolverFileLine::BreakpointResolverFileLine(
Breakpoint *bkpt, const FileSpec &file_spec, uint32_t line_no,
const BreakpointSP &bkpt, const FileSpec &file_spec, uint32_t line_no,
uint32_t column, lldb::addr_t offset, bool check_inlines,
bool skip_prologue, bool exact_match)
: BreakpointResolver(bkpt, BreakpointResolver::FileLineResolver, offset),
m_file_spec(file_spec), m_line_number(line_no), m_column(column),
m_inlines(check_inlines), m_skip_prologue(skip_prologue),
m_exact_match(exact_match) {}

BreakpointResolverFileLine::~BreakpointResolverFileLine() {}

BreakpointResolver *BreakpointResolverFileLine::CreateFromStructuredData(
Breakpoint *bkpt, const StructuredData::Dictionary &options_dict,
const BreakpointSP &bkpt, const StructuredData::Dictionary &options_dict,
Status &error) {
llvm::StringRef filename;
uint32_t line_no;
Expand Down Expand Up @@ -202,8 +200,6 @@ Searcher::CallbackReturn BreakpointResolverFileLine::SearchCallback(
SearchFilter &filter, SymbolContext &context, Address *addr) {
SymbolContextList sc_list;

assert(m_breakpoint != nullptr);

// There is a tricky bit here. You can have two compilation units that
// #include the same file, and in one of them the function at m_line_number
// is used (and so code and a line entry for it is generated) but in the
Expand Down Expand Up @@ -263,9 +259,9 @@ void BreakpointResolverFileLine::GetDescription(Stream *s) {
void BreakpointResolverFileLine::Dump(Stream *s) const {}

lldb::BreakpointResolverSP
BreakpointResolverFileLine::CopyForBreakpoint(Breakpoint &breakpoint) {
BreakpointResolverFileLine::CopyForBreakpoint(BreakpointSP &breakpoint) {
lldb::BreakpointResolverSP ret_sp(new BreakpointResolverFileLine(
&breakpoint, m_file_spec, m_line_number, m_column, m_offset, m_inlines,
breakpoint, m_file_spec, m_line_number, m_column, GetOffset(), m_inlines,
m_skip_prologue, m_exact_match));

return ret_sp;
Expand Down
12 changes: 4 additions & 8 deletions lldb/source/Breakpoint/BreakpointResolverFileRegex.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,14 @@ using namespace lldb_private;

// BreakpointResolverFileRegex:
BreakpointResolverFileRegex::BreakpointResolverFileRegex(
Breakpoint *bkpt, RegularExpression regex,
const lldb::BreakpointSP &bkpt, RegularExpression regex,
const std::unordered_set<std::string> &func_names, bool exact_match)
: BreakpointResolver(bkpt, BreakpointResolver::FileRegexResolver),
m_regex(std::move(regex)), m_exact_match(exact_match),
m_function_names(func_names) {}

BreakpointResolverFileRegex::~BreakpointResolverFileRegex() {}

BreakpointResolver *BreakpointResolverFileRegex::CreateFromStructuredData(
Breakpoint *bkpt, const StructuredData::Dictionary &options_dict,
const lldb::BreakpointSP &bkpt, const StructuredData::Dictionary &options_dict,
Status &error) {
bool success;

Expand Down Expand Up @@ -97,7 +95,6 @@ BreakpointResolverFileRegex::SerializeToStructuredData() {
Searcher::CallbackReturn BreakpointResolverFileRegex::SearchCallback(
SearchFilter &filter, SymbolContext &context, Address *addr) {

assert(m_breakpoint != nullptr);
if (!context.target_sp)
return eCallbackReturnContinue;

Expand Down Expand Up @@ -144,7 +141,6 @@ Searcher::CallbackReturn BreakpointResolverFileRegex::SearchCallback(
BreakpointResolver::SetSCMatchesByLine(filter, sc_list, skip_prologue,
m_regex.GetText());
}
assert(m_breakpoint != nullptr);

return Searcher::eCallbackReturnContinue;
}
Expand All @@ -161,9 +157,9 @@ void BreakpointResolverFileRegex::GetDescription(Stream *s) {
void BreakpointResolverFileRegex::Dump(Stream *s) const {}

lldb::BreakpointResolverSP
BreakpointResolverFileRegex::CopyForBreakpoint(Breakpoint &breakpoint) {
BreakpointResolverFileRegex::CopyForBreakpoint(BreakpointSP &breakpoint) {
lldb::BreakpointResolverSP ret_sp(new BreakpointResolverFileRegex(
&breakpoint, m_regex, m_function_names, m_exact_match));
breakpoint, m_regex, m_function_names, m_exact_match));
return ret_sp;
}

Expand Down
45 changes: 21 additions & 24 deletions lldb/source/Breakpoint/BreakpointResolverName.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@
using namespace lldb;
using namespace lldb_private;

BreakpointResolverName::BreakpointResolverName(
Breakpoint *bkpt, const char *name_cstr, FunctionNameType name_type_mask,
BreakpointResolverName::BreakpointResolverName(const BreakpointSP &bkpt,
const char *name_cstr, FunctionNameType name_type_mask,
LanguageType language, Breakpoint::MatchType type, lldb::addr_t offset,
bool skip_prologue)
: BreakpointResolver(bkpt, BreakpointResolver::NameResolver, offset),
Expand All @@ -45,7 +45,7 @@ BreakpointResolverName::BreakpointResolverName(
}

BreakpointResolverName::BreakpointResolverName(
Breakpoint *bkpt, const char *names[], size_t num_names,
const BreakpointSP &bkpt, const char *names[], size_t num_names,
FunctionNameType name_type_mask, LanguageType language, lldb::addr_t offset,
bool skip_prologue)
: BreakpointResolver(bkpt, BreakpointResolver::NameResolver, offset),
Expand All @@ -56,7 +56,7 @@ BreakpointResolverName::BreakpointResolverName(
}
}

BreakpointResolverName::BreakpointResolverName(Breakpoint *bkpt,
BreakpointResolverName::BreakpointResolverName(const BreakpointSP &bkpt,
std::vector<std::string> names,
FunctionNameType name_type_mask,
LanguageType language,
Expand All @@ -70,7 +70,7 @@ BreakpointResolverName::BreakpointResolverName(Breakpoint *bkpt,
}
}

BreakpointResolverName::BreakpointResolverName(Breakpoint *bkpt,
BreakpointResolverName::BreakpointResolverName(const BreakpointSP &bkpt,
RegularExpression func_regex,
lldb::LanguageType language,
lldb::addr_t offset,
Expand All @@ -80,18 +80,16 @@ BreakpointResolverName::BreakpointResolverName(Breakpoint *bkpt,
m_match_type(Breakpoint::Regexp), m_language(language),
m_skip_prologue(skip_prologue) {}

BreakpointResolverName::~BreakpointResolverName() = default;

BreakpointResolverName::BreakpointResolverName(
const BreakpointResolverName &rhs)
: BreakpointResolver(rhs.m_breakpoint, BreakpointResolver::NameResolver,
rhs.m_offset),
: BreakpointResolver(rhs.GetBreakpoint(), BreakpointResolver::NameResolver,
rhs.GetOffset()),
m_lookups(rhs.m_lookups), m_class_name(rhs.m_class_name),
m_regex(rhs.m_regex), m_match_type(rhs.m_match_type),
m_language(rhs.m_language), m_skip_prologue(rhs.m_skip_prologue) {}

BreakpointResolver *BreakpointResolverName::CreateFromStructuredData(
Breakpoint *bkpt, const StructuredData::Dictionary &options_dict,
const BreakpointSP &bkpt, const StructuredData::Dictionary &options_dict,
Status &error) {
LanguageType language = eLanguageTypeUnknown;
llvm::StringRef language_name;
Expand Down Expand Up @@ -251,21 +249,15 @@ void BreakpointResolverName::AddNameLookup(ConstString name,
Searcher::CallbackReturn
BreakpointResolverName::SearchCallback(SearchFilter &filter,
SymbolContext &context, Address *addr) {
SymbolContextList func_list;
// SymbolContextList sym_list;

uint32_t i;
bool new_location;
Address break_addr;
assert(m_breakpoint != nullptr);

Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_BREAKPOINTS));

if (m_class_name) {
if (log)
log->Warning("Class/method function specification not supported yet.\n");
return Searcher::eCallbackReturnStop;
}

SymbolContextList func_list;
bool filter_by_cu =
(filter.GetFilterRequiredItems() & eSymbolContextCompUnit) != 0;
bool filter_by_language = (m_language != eLanguageTypeUnknown);
Expand Down Expand Up @@ -334,10 +326,14 @@ BreakpointResolverName::SearchCallback(SearchFilter &filter,
}
}

BreakpointSP breakpoint_sp = GetBreakpoint();
Breakpoint &breakpoint = *breakpoint_sp;
Address break_addr;

// Remove any duplicates between the function list and the symbol list
SymbolContext sc;
if (func_list.GetSize()) {
for (i = 0; i < func_list.GetSize(); i++) {
for (uint32_t i = 0; i < func_list.GetSize(); i++) {
if (func_list.GetContextAtIndex(i, sc)) {
bool is_reexported = false;

Expand All @@ -355,7 +351,7 @@ BreakpointResolverName::SearchCallback(SearchFilter &filter,
} else if (sc.symbol) {
if (sc.symbol->GetType() == eSymbolTypeReExported) {
const Symbol *actual_symbol =
sc.symbol->ResolveReExportedSymbol(m_breakpoint->GetTarget());
sc.symbol->ResolveReExportedSymbol(breakpoint.GetTarget());
if (actual_symbol) {
is_reexported = true;
break_addr = actual_symbol->GetAddress();
Expand All @@ -371,7 +367,7 @@ BreakpointResolverName::SearchCallback(SearchFilter &filter,
break_addr.SetOffset(break_addr.GetOffset() + prologue_byte_size);
else {
const Architecture *arch =
m_breakpoint->GetTarget().GetArchitecturePlugin();
breakpoint.GetTarget().GetArchitecturePlugin();
if (arch)
arch->AdjustBreakpointAddress(*sc.symbol, break_addr);
}
Expand All @@ -380,10 +376,11 @@ BreakpointResolverName::SearchCallback(SearchFilter &filter,

if (break_addr.IsValid()) {
if (filter.AddressPasses(break_addr)) {
bool new_location;
BreakpointLocationSP bp_loc_sp(
AddLocation(break_addr, &new_location));
bp_loc_sp->SetIsReExported(is_reexported);
if (bp_loc_sp && new_location && !m_breakpoint->IsInternal()) {
if (bp_loc_sp && new_location && !breakpoint.IsInternal()) {
if (log) {
StreamString s;
bp_loc_sp->GetDescription(&s, lldb::eDescriptionLevelVerbose);
Expand Down Expand Up @@ -427,8 +424,8 @@ void BreakpointResolverName::GetDescription(Stream *s) {
void BreakpointResolverName::Dump(Stream *s) const {}

lldb::BreakpointResolverSP
BreakpointResolverName::CopyForBreakpoint(Breakpoint &breakpoint) {
BreakpointResolverName::CopyForBreakpoint(BreakpointSP &breakpoint) {
lldb::BreakpointResolverSP ret_sp(new BreakpointResolverName(*this));
ret_sp->SetBreakpoint(&breakpoint);
ret_sp->SetBreakpoint(breakpoint);
return ret_sp;
}
54 changes: 26 additions & 28 deletions lldb/source/Breakpoint/BreakpointResolverScripted.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,42 +26,42 @@ using namespace lldb_private;

// BreakpointResolverScripted:
BreakpointResolverScripted::BreakpointResolverScripted(
Breakpoint *bkpt, const llvm::StringRef class_name, lldb::SearchDepth depth,
StructuredDataImpl *args_data)
const BreakpointSP &bkpt, const llvm::StringRef class_name,
lldb::SearchDepth depth, StructuredDataImpl *args_data)
: BreakpointResolver(bkpt, BreakpointResolver::PythonResolver),
m_class_name(std::string(class_name)), m_depth(depth),
m_args_ptr(args_data) {
CreateImplementationIfNeeded();
CreateImplementationIfNeeded(bkpt);
}

void BreakpointResolverScripted::CreateImplementationIfNeeded() {
void BreakpointResolverScripted::CreateImplementationIfNeeded(
BreakpointSP breakpoint_sp) {
if (m_implementation_sp)
return;

if (m_class_name.empty())
return;

if (m_breakpoint) {
TargetSP target_sp = m_breakpoint->GetTargetSP();
ScriptInterpreter *script_interp = target_sp->GetDebugger()
.GetScriptInterpreter();
if (!script_interp)
return;
lldb::BreakpointSP bkpt_sp(m_breakpoint->shared_from_this());
m_implementation_sp = script_interp->CreateScriptedBreakpointResolver(
m_class_name.c_str(), m_args_ptr, bkpt_sp);
}

if (!breakpoint_sp)
return;

TargetSP target_sp = breakpoint_sp->GetTargetSP();
ScriptInterpreter *script_interp = target_sp->GetDebugger()
.GetScriptInterpreter();
if (!script_interp)
return;

m_implementation_sp = script_interp->CreateScriptedBreakpointResolver(
m_class_name.c_str(), m_args_ptr, breakpoint_sp);
}

void BreakpointResolverScripted::NotifyBreakpointSet() {
CreateImplementationIfNeeded();
CreateImplementationIfNeeded(GetBreakpoint());
}

BreakpointResolverScripted::~BreakpointResolverScripted() {}

BreakpointResolver *
BreakpointResolverScripted::CreateFromStructuredData(
Breakpoint *bkpt, const StructuredData::Dictionary &options_dict,
const BreakpointSP &bkpt, const StructuredData::Dictionary &options_dict,
Status &error) {
llvm::StringRef class_name;
bool success;
Expand Down Expand Up @@ -102,29 +102,27 @@ BreakpointResolverScripted::SerializeToStructuredData() {
}

ScriptInterpreter *BreakpointResolverScripted::GetScriptInterpreter() {
return m_breakpoint->GetTarget().GetDebugger().GetScriptInterpreter();
return GetBreakpoint()->GetTarget().GetDebugger().GetScriptInterpreter();
}

Searcher::CallbackReturn BreakpointResolverScripted::SearchCallback(
SearchFilter &filter, SymbolContext &context, Address *addr) {
assert(m_breakpoint != nullptr);
bool should_continue = true;
if (!m_implementation_sp)
return Searcher::eCallbackReturnStop;

ScriptInterpreter *interp = GetScriptInterpreter();
should_continue = interp->ScriptedBreakpointResolverSearchCallback(
m_implementation_sp,
&context);
if (should_continue)
return Searcher::eCallbackReturnContinue;
else
return Searcher::eCallbackReturnStop;

return Searcher::eCallbackReturnStop;
}

lldb::SearchDepth
BreakpointResolverScripted::GetDepth() {
assert(m_breakpoint != nullptr);
lldb::SearchDepth depth = lldb::eSearchDepthModule;
if (m_implementation_sp) {
ScriptInterpreter *interp = GetScriptInterpreter();
Expand Down Expand Up @@ -152,11 +150,11 @@ void BreakpointResolverScripted::GetDescription(Stream *s) {
void BreakpointResolverScripted::Dump(Stream *s) const {}

lldb::BreakpointResolverSP
BreakpointResolverScripted::CopyForBreakpoint(Breakpoint &breakpoint) {
BreakpointResolverScripted::CopyForBreakpoint(BreakpointSP &breakpoint) {
// FIXME: Have to make a copy of the arguments from the m_args_ptr and then
// pass that to the new resolver.
lldb::BreakpointResolverSP ret_sp(
new BreakpointResolverScripted(&breakpoint, m_class_name, m_depth,
new BreakpointResolverScripted(breakpoint, m_class_name, m_depth,
nullptr));
return ret_sp;
}
Original file line number Diff line number Diff line change
Expand Up @@ -418,12 +418,13 @@ lldb_private::ConstString ItaniumABILanguageRuntime::GetPluginName() {
uint32_t ItaniumABILanguageRuntime::GetPluginVersion() { return 1; }

BreakpointResolverSP ItaniumABILanguageRuntime::CreateExceptionResolver(
Breakpoint *bkpt, bool catch_bp, bool throw_bp) {
const BreakpointSP &bkpt, bool catch_bp, bool throw_bp) {
return CreateExceptionResolver(bkpt, catch_bp, throw_bp, false);
}

BreakpointResolverSP ItaniumABILanguageRuntime::CreateExceptionResolver(
Breakpoint *bkpt, bool catch_bp, bool throw_bp, bool for_expressions) {
const BreakpointSP &bkpt, bool catch_bp, bool throw_bp,
bool for_expressions) {
// One complication here is that most users DON'T want to stop at
// __cxa_allocate_expression, but until we can do anything better with
// predicting unwinding the expression parser does. So we have two forms of
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,9 @@ class ItaniumABILanguageRuntime : public lldb_private::CPPLanguageRuntime {

bool ExceptionBreakpointsExplainStop(lldb::StopInfoSP stop_reason) override;

lldb::BreakpointResolverSP CreateExceptionResolver(Breakpoint *bkpt,
bool catch_bp,
bool throw_bp) override;
lldb::BreakpointResolverSP
CreateExceptionResolver(const lldb::BreakpointSP &bkpt,
bool catch_bp, bool throw_bp) override;

lldb::SearchFilterSP CreateExceptionSearchFilter() override;

Expand All @@ -81,10 +81,9 @@ class ItaniumABILanguageRuntime : public lldb_private::CPPLanguageRuntime {
uint32_t GetPluginVersion() override;

protected:
lldb::BreakpointResolverSP CreateExceptionResolver(Breakpoint *bkpt,
bool catch_bp,
bool throw_bp,
bool for_expressions);
lldb::BreakpointResolverSP
CreateExceptionResolver(const lldb::BreakpointSP &bkpt,
bool catch_bp, bool throw_bp, bool for_expressions);

lldb::BreakpointSP CreateExceptionBreakpoint(bool catch_bp, bool throw_bp,
bool for_expressions,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,8 @@ ConstString AppleObjCRuntimeV1::GetPluginName() {
uint32_t AppleObjCRuntimeV1::GetPluginVersion() { return 1; }

BreakpointResolverSP
AppleObjCRuntimeV1::CreateExceptionResolver(Breakpoint *bkpt, bool catch_bp,
bool throw_bp) {
AppleObjCRuntimeV1::CreateExceptionResolver(const BreakpointSP &bkpt,
bool catch_bp, bool throw_bp) {
BreakpointResolverSP resolver_sp;

if (throw_bp)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,9 +113,9 @@ class AppleObjCRuntimeV1 : public AppleObjCRuntime {
DeclVendor *GetDeclVendor() override;

protected:
lldb::BreakpointResolverSP CreateExceptionResolver(Breakpoint *bkpt,
bool catch_bp,
bool throw_bp) override;
lldb::BreakpointResolverSP
CreateExceptionResolver(const lldb::BreakpointSP &bkpt,
bool catch_bp, bool throw_bp) override;

class HashTableSignature {
public:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -825,8 +825,8 @@ lldb_private::ConstString AppleObjCRuntimeV2::GetPluginName() {
uint32_t AppleObjCRuntimeV2::GetPluginVersion() { return 1; }

BreakpointResolverSP
AppleObjCRuntimeV2::CreateExceptionResolver(Breakpoint *bkpt, bool catch_bp,
bool throw_bp) {
AppleObjCRuntimeV2::CreateExceptionResolver(const BreakpointSP &bkpt,
bool catch_bp, bool throw_bp) {
BreakpointResolverSP resolver_sp;

if (throw_bp)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,9 +103,9 @@ class AppleObjCRuntimeV2 : public AppleObjCRuntime {
static const ObjCLanguageRuntime::ObjCISA g_objc_Tagged_ISA_NSDate = 6;

protected:
lldb::BreakpointResolverSP CreateExceptionResolver(Breakpoint *bkpt,
bool catch_bp,
bool throw_bp) override;
lldb::BreakpointResolverSP
CreateExceptionResolver(const lldb::BreakpointSP &bkpt,
bool catch_bp, bool throw_bp) override;

private:
class HashTableSignature {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -793,6 +793,9 @@ RenderScriptRuntime::CreateInstance(Process *process,
Searcher::CallbackReturn
RSBreakpointResolver::SearchCallback(SearchFilter &filter,
SymbolContext &context, Address *) {
BreakpointSP breakpoint_sp = GetBreakpoint();
assert(breakpoint_sp);

ModuleSP module = context.module_sp;

if (!module || !IsRenderScriptScriptModule(module))
Expand All @@ -813,7 +816,7 @@ RSBreakpointResolver::SearchCallback(SearchFilter &filter,
if (kernel_sym) {
Address bp_addr = kernel_sym->GetAddress();
if (filter.AddressPasses(bp_addr))
m_breakpoint->AddLocation(bp_addr);
breakpoint_sp->AddLocation(bp_addr);
}

return Searcher::eCallbackReturnContinue;
Expand All @@ -823,6 +826,9 @@ Searcher::CallbackReturn
RSReduceBreakpointResolver::SearchCallback(lldb_private::SearchFilter &filter,
lldb_private::SymbolContext &context,
Address *) {
BreakpointSP breakpoint_sp = GetBreakpoint();
assert(breakpoint_sp);

// We need to have access to the list of reductions currently parsed, as
// reduce names don't actually exist as symbols in a module. They are only
// identifiable by parsing the .rs.info packet, or finding the expand symbol.
Expand Down Expand Up @@ -869,7 +875,7 @@ RSReduceBreakpointResolver::SearchCallback(lldb_private::SearchFilter &filter,
if (!SkipPrologue(module, address)) {
LLDB_LOGF(log, "%s: Error trying to skip prologue", __FUNCTION__);
}
m_breakpoint->AddLocation(address, &new_bp);
breakpoint_sp->AddLocation(address, &new_bp);
LLDB_LOGF(log, "%s: %s reduction breakpoint on %s in %s",
__FUNCTION__, new_bp ? "new" : "existing",
kernel_name.GetCString(),
Expand All @@ -884,7 +890,8 @@ RSReduceBreakpointResolver::SearchCallback(lldb_private::SearchFilter &filter,
Searcher::CallbackReturn RSScriptGroupBreakpointResolver::SearchCallback(
SearchFilter &filter, SymbolContext &context, Address *addr) {

if (!m_breakpoint)
BreakpointSP breakpoint_sp = GetBreakpoint();
if (!breakpoint_sp)
return eCallbackReturnContinue;

Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_BREAKPOINTS));
Expand All @@ -894,7 +901,8 @@ Searcher::CallbackReturn RSScriptGroupBreakpointResolver::SearchCallback(
return Searcher::eCallbackReturnContinue;

std::vector<std::string> names;
m_breakpoint->GetNames(names);
Breakpoint& breakpoint = *breakpoint_sp;
breakpoint.GetNames(names);
if (names.empty())
return eCallbackReturnContinue;

Expand Down Expand Up @@ -934,7 +942,7 @@ Searcher::CallbackReturn RSScriptGroupBreakpointResolver::SearchCallback(
}

bool new_bp;
m_breakpoint->AddLocation(address, &new_bp);
breakpoint.AddLocation(address, &new_bp);

LLDB_LOGF(log, "%s: Placed %sbreakpoint on %s", __FUNCTION__,
new_bp ? "new " : "", k.m_name.AsCString());
Expand Down Expand Up @@ -1031,8 +1039,8 @@ bool RenderScriptRuntime::CouldHaveDynamicValue(ValueObject &in_value) {
}

lldb::BreakpointResolverSP
RenderScriptRuntime::CreateExceptionResolver(Breakpoint *bp, bool catch_bp,
bool throw_bp) {
RenderScriptRuntime::CreateExceptionResolver(const lldb::BreakpointSP &bp,
bool catch_bp, bool throw_bp) {
BreakpointResolverSP resolver_sp;
return resolver_sp;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ struct RSCoordinate {
// for .expand kernels as a fallback.
class RSBreakpointResolver : public BreakpointResolver {
public:
RSBreakpointResolver(Breakpoint *bp, ConstString name)
RSBreakpointResolver(const lldb::BreakpointSP &bp, ConstString name)
: BreakpointResolver(bp, BreakpointResolver::NameResolver),
m_kernel_name(name) {}

Expand All @@ -77,9 +77,9 @@ class RSBreakpointResolver : public BreakpointResolver {
lldb::SearchDepth GetDepth() override { return lldb::eSearchDepthModule; }

lldb::BreakpointResolverSP
CopyForBreakpoint(Breakpoint &breakpoint) override {
CopyForBreakpoint(lldb::BreakpointSP &breakpoint) override {
lldb::BreakpointResolverSP ret_sp(
new RSBreakpointResolver(&breakpoint, m_kernel_name));
new RSBreakpointResolver(breakpoint, m_kernel_name));
return ret_sp;
}

Expand All @@ -100,7 +100,7 @@ class RSReduceBreakpointResolver : public BreakpointResolver {
};

RSReduceBreakpointResolver(
Breakpoint *breakpoint, ConstString reduce_name,
const lldb::BreakpointSP &breakpoint, ConstString reduce_name,
std::vector<lldb_renderscript::RSModuleDescriptorSP> *rs_modules,
int kernel_types = eKernelTypeAll)
: BreakpointResolver(breakpoint, BreakpointResolver::NameResolver),
Expand All @@ -127,9 +127,9 @@ class RSReduceBreakpointResolver : public BreakpointResolver {
lldb::SearchDepth GetDepth() override { return lldb::eSearchDepthModule; }

lldb::BreakpointResolverSP
CopyForBreakpoint(Breakpoint &breakpoint) override {
CopyForBreakpoint(lldb::BreakpointSP &breakpoint) override {
lldb::BreakpointResolverSP ret_sp(new RSReduceBreakpointResolver(
&breakpoint, m_reduce_name, m_rsmodules, m_kernel_types));
breakpoint, m_reduce_name, m_rsmodules, m_kernel_types));
return ret_sp;
}

Expand Down Expand Up @@ -250,7 +250,8 @@ typedef std::vector<RSScriptGroupDescriptorSP> RSScriptGroupList;

class RSScriptGroupBreakpointResolver : public BreakpointResolver {
public:
RSScriptGroupBreakpointResolver(Breakpoint *bp, ConstString name,
RSScriptGroupBreakpointResolver(const lldb::BreakpointSP &bp,
ConstString name,
const RSScriptGroupList &groups,
bool stop_on_all)
: BreakpointResolver(bp, BreakpointResolver::NameResolver),
Expand All @@ -272,9 +273,9 @@ class RSScriptGroupBreakpointResolver : public BreakpointResolver {
lldb::SearchDepth GetDepth() override { return lldb::eSearchDepthModule; }

lldb::BreakpointResolverSP
CopyForBreakpoint(Breakpoint &breakpoint) override {
CopyForBreakpoint(lldb::BreakpointSP &breakpoint) override {
lldb::BreakpointResolverSP ret_sp(new RSScriptGroupBreakpointResolver(
&breakpoint, m_group_name, m_script_groups, m_stop_on_all));
breakpoint, m_group_name, m_script_groups, m_stop_on_all));
return ret_sp;
}

Expand Down Expand Up @@ -347,9 +348,9 @@ class RenderScriptRuntime : public lldb_private::CPPLanguageRuntime {

bool CouldHaveDynamicValue(ValueObject &in_value) override;

lldb::BreakpointResolverSP CreateExceptionResolver(Breakpoint *bp,
bool catch_bp,
bool throw_bp) override;
lldb::BreakpointResolverSP
CreateExceptionResolver(const lldb::BreakpointSP &bp,
bool catch_bp, bool throw_bp) override;

bool LoadModule(const lldb::ModuleSP &module_sp);

Expand Down
12 changes: 6 additions & 6 deletions lldb/source/Target/LanguageRuntime.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -153,17 +153,17 @@ class ExceptionBreakpointResolver : public BreakpointResolver {
}

protected:
BreakpointResolverSP CopyForBreakpoint(Breakpoint &breakpoint) override {
BreakpointResolverSP CopyForBreakpoint(BreakpointSP &breakpoint) override {
BreakpointResolverSP ret_sp(
new ExceptionBreakpointResolver(m_language, m_catch_bp, m_throw_bp));
ret_sp->SetBreakpoint(&breakpoint);
ret_sp->SetBreakpoint(breakpoint);
return ret_sp;
}

bool SetActualResolver() {
ProcessSP process_sp;
if (m_breakpoint) {
process_sp = m_breakpoint->GetTarget().GetProcessSP();
BreakpointSP breakpoint_sp = GetBreakpoint();
if (breakpoint_sp) {
ProcessSP process_sp = breakpoint_sp->GetTarget().GetProcessSP();
if (process_sp) {
bool refreash_resolver = !m_actual_resolver_sp;
if (m_language_runtime == nullptr) {
Expand All @@ -180,7 +180,7 @@ class ExceptionBreakpointResolver : public BreakpointResolver {

if (refreash_resolver && m_language_runtime) {
m_actual_resolver_sp = m_language_runtime->CreateExceptionResolver(
m_breakpoint, m_catch_bp, m_throw_bp);
breakpoint_sp, m_catch_bp, m_throw_bp);
}
} else {
m_actual_resolver_sp.reset();
Expand Down
2 changes: 1 addition & 1 deletion lldb/source/Target/Target.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -622,7 +622,7 @@ BreakpointSP Target::CreateBreakpoint(SearchFilterSP &filter_sp,
const bool hardware = request_hardware || GetRequireHardwareBreakpoints();
bp_sp.reset(new Breakpoint(*this, filter_sp, resolver_sp, hardware,
resolve_indirect_symbols));
resolver_sp->SetBreakpoint(bp_sp.get());
resolver_sp->SetBreakpoint(bp_sp);
AddBreakpoint(bp_sp, internal);
}
return bp_sp;
Expand Down