diff options
Diffstat (limited to 'contrib/llvm-project/lldb/source/Symbol/SymbolContext.cpp')
-rw-r--r-- | contrib/llvm-project/lldb/source/Symbol/SymbolContext.cpp | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/contrib/llvm-project/lldb/source/Symbol/SymbolContext.cpp b/contrib/llvm-project/lldb/source/Symbol/SymbolContext.cpp index 12c2077154b9..8cfea35180fa 100644 --- a/contrib/llvm-project/lldb/source/Symbol/SymbolContext.cpp +++ b/contrib/llvm-project/lldb/source/Symbol/SymbolContext.cpp @@ -71,7 +71,8 @@ bool SymbolContext::DumpStopContext(Stream *s, ExecutionContextScope *exe_scope, const Address &addr, bool show_fullpaths, bool show_module, bool show_inlined_frames, bool show_function_arguments, - bool show_function_name) const { + bool show_function_name, + bool show_inline_callsite_line_info) const { bool dumped_something = false; if (show_module && module_sp) { if (show_fullpaths) @@ -127,11 +128,17 @@ bool SymbolContext::DumpStopContext(Stream *s, ExecutionContextScope *exe_scope, s->Printf(" + %" PRIu64, inlined_function_offset); } } - const Declaration &call_site = inlined_block_info->GetCallSite(); - if (call_site.IsValid()) { + if (show_inline_callsite_line_info) { + const Declaration &call_site = inlined_block_info->GetCallSite(); + if (call_site.IsValid()) { + s->PutCString(" at "); + call_site.DumpStopContext(s, show_fullpaths); + } + } else if (line_entry.IsValid()) { s->PutCString(" at "); - call_site.DumpStopContext(s, show_fullpaths); + line_entry.DumpStopContext(s, show_fullpaths); } + if (show_inlined_frames) { s->EOL(); s->Indent(); @@ -204,7 +211,7 @@ void SymbolContext::GetDescription(Stream *s, lldb::DescriptionLevel level, Type *func_type = function->GetType(); if (func_type) { s->Indent(" FuncType: "); - func_type->GetDescription(s, level, false); + func_type->GetDescription(s, level, false, target); s->EOL(); } } @@ -1010,11 +1017,15 @@ void SymbolContextSpecifier::Clear() { m_type = eNothingSpecified; } -bool SymbolContextSpecifier::SymbolContextMatches(SymbolContext &sc) { +bool SymbolContextSpecifier::SymbolContextMatches(const SymbolContext &sc) { if (m_type == eNothingSpecified) return true; - if (m_target_sp.get() != sc.target_sp.get()) + // Only compare targets if this specifier has one and it's not the Dummy + // target. Otherwise if a specifier gets made in the dummy target and + // copied over we'll artificially fail the comparision. + if (m_target_sp && !m_target_sp->IsDummyTarget() && + m_target_sp != sc.target_sp) return false; if (m_type & eModuleSpecified) { |