diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/Commands/CommandObjectFrame.cpp | 6 | ||||
-rw-r--r-- | source/Commands/CommandObjectTarget.cpp | 14 | ||||
-rw-r--r-- | source/Core/ValueObject.cpp | 20 | ||||
-rw-r--r-- | source/Symbol/Declaration.cpp | 7 | ||||
-rw-r--r-- | source/Symbol/SymbolContext.cpp | 27 | ||||
-rw-r--r-- | source/Symbol/Variable.cpp | 26 |
6 files changed, 82 insertions, 18 deletions
diff --git a/source/Commands/CommandObjectFrame.cpp b/source/Commands/CommandObjectFrame.cpp index d184e0038..f82c06bcc 100644 --- a/source/Commands/CommandObjectFrame.cpp +++ b/source/Commands/CommandObjectFrame.cpp @@ -479,8 +479,10 @@ public: if (m_option_variable.show_decl && var_sp->GetDeclaration ().GetFile()) { - var_sp->GetDeclaration ().DumpStopContext (&s, false); - s.PutCString (": "); + bool show_fullpaths = false; + bool show_module = true; + if (var_sp->DumpDeclaration(&s, show_fullpaths, show_module)) + s.PutCString (": "); } ValueObject::DumpValueObject (result.GetOutputStream(), diff --git a/source/Commands/CommandObjectTarget.cpp b/source/Commands/CommandObjectTarget.cpp index 510fe488a..b957314cb 100644 --- a/source/Commands/CommandObjectTarget.cpp +++ b/source/Commands/CommandObjectTarget.cpp @@ -466,10 +466,12 @@ public: break; } - if (m_option_variable.show_decl && var_sp->GetDeclaration ().GetFile()) + if (m_option_variable.show_decl) { - var_sp->GetDeclaration ().DumpStopContext (&s, false); - s.PutCString (": "); + bool show_fullpaths = false; + bool show_module = true; + if (var_sp->DumpDeclaration(&s, show_fullpaths, show_module)) + s.PutCString (": "); } const Format format = m_option_variable.format; @@ -528,6 +530,7 @@ public: const char *arg = args.GetArgumentAtIndex(idx); uint32_t matches = 0; + bool use_var_name = false; if (m_option_variable.use_regex) { RegularExpression regex(arg); @@ -537,6 +540,7 @@ public: result.SetStatus (eReturnStatusFailed); return false; } + use_var_name = true; matches = exe_ctx.target->GetImages().FindGlobalVariables (regex, true, UINT32_MAX, @@ -573,10 +577,10 @@ public: { ValueObjectSP valobj_sp (valobj_list.GetValueObjectAtIndex(global_idx)); if (!valobj_sp) - valobj_sp = ValueObjectVariable::Create (exe_ctx.target, var_sp); + valobj_sp = ValueObjectVariable::Create (exe_ctx.GetBestExecutionContextScope(), var_sp); if (valobj_sp) - DumpValueObject (s, var_sp, valobj_sp, arg); + DumpValueObject (s, var_sp, valobj_sp, use_var_name ? var_sp->GetName().GetCString() : arg); } } } diff --git a/source/Core/ValueObject.cpp b/source/Core/ValueObject.cpp index 09cbd8c60..5c548dfbb 100644 --- a/source/Core/ValueObject.cpp +++ b/source/Core/ValueObject.cpp @@ -563,8 +563,8 @@ ValueObject::GetSummaryAsCString () if (type_flags.AnySet (ClangASTContext::eTypeIsArray | ClangASTContext::eTypeIsPointer) && ClangASTContext::IsCharType (elem_or_pointee_clang_type)) { - Process *process = exe_scope->CalculateProcess(); - if (process != NULL) + Target *target = exe_scope->CalculateTarget(); + if (target != NULL) { lldb::addr_t cstr_address = LLDB_INVALID_ADDRESS; AddressType cstr_address_type = eAddressTypeInvalid; @@ -593,15 +593,21 @@ ValueObject::GetSummaryAsCString () } if (cstr_address != LLDB_INVALID_ADDRESS) { + Address cstr_so_addr (NULL, cstr_address); DataExtractor data; size_t bytes_read = 0; std::vector<char> data_buffer; Error error; + bool prefer_file_cache = false; if (cstr_len > 0) { data_buffer.resize(cstr_len); data.SetData (&data_buffer.front(), data_buffer.size(), lldb::endian::InlHostByteOrder()); - bytes_read = process->ReadMemory (cstr_address, &data_buffer.front(), cstr_len, error); + bytes_read = target->ReadMemory (cstr_so_addr, + prefer_file_cache, + &data_buffer.front(), + cstr_len, + error); if (bytes_read > 0) { sstr << '"'; @@ -629,7 +635,11 @@ ValueObject::GetSummaryAsCString () sstr << '"'; data.SetData (&data_buffer.front(), data_buffer.size(), endian::InlHostByteOrder()); - while ((bytes_read = process->ReadMemory (cstr_address, &data_buffer.front(), k_max_buf_size, error)) > 0) + while ((bytes_read = target->ReadMemory (cstr_so_addr, + prefer_file_cache, + &data_buffer.front(), + k_max_buf_size, + error)) > 0) { size_t len = strlen(&data_buffer.front()); if (len == 0) @@ -649,7 +659,7 @@ ValueObject::GetSummaryAsCString () if (len < k_max_buf_size) break; - cstr_address += k_max_buf_size; + cstr_so_addr.Slide (k_max_buf_size); } sstr << '"'; } diff --git a/source/Symbol/Declaration.cpp b/source/Symbol/Declaration.cpp index 2b20a24e5..3943f02c5 100644 --- a/source/Symbol/Declaration.cpp +++ b/source/Symbol/Declaration.cpp @@ -46,7 +46,7 @@ Declaration::Dump(Stream *s, bool show_fullpaths) const } } -void +bool Declaration::DumpStopContext (Stream *s, bool show_fullpaths) const { if (m_file) @@ -62,15 +62,18 @@ Declaration::DumpStopContext (Stream *s, bool show_fullpaths) const if (m_column > 0) s->Printf(":%u", m_column); #endif + return true; } - else + else if (m_line > 0) { s->Printf(" line %u", m_line); #ifdef LLDB_ENABLE_DECLARATION_COLUMNS if (m_column > 0) s->Printf(":%u", m_column); #endif + return true; } + return false; } size_t diff --git a/source/Symbol/SymbolContext.cpp b/source/Symbol/SymbolContext.cpp index 2a56c3444..1f24f1339 100644 --- a/source/Symbol/SymbolContext.cpp +++ b/source/Symbol/SymbolContext.cpp @@ -110,7 +110,7 @@ SymbolContext::Clear() symbol = NULL; } -void +bool SymbolContext::DumpStopContext ( Stream *s, @@ -121,6 +121,7 @@ SymbolContext::DumpStopContext bool show_inlined_frames ) const { + bool dumped_something = false; if (show_module && module_sp) { if (show_fullpaths) @@ -128,18 +129,25 @@ SymbolContext::DumpStopContext else *s << module_sp->GetFileSpec().GetFilename(); s->PutChar('`'); + dumped_something = true; } if (function != NULL) { if (function->GetMangled().GetName()) + { + dumped_something = true; function->GetMangled().GetName().Dump(s); + } if (addr.IsValid()) { const addr_t function_offset = addr.GetOffset() - function->GetAddressRange().GetBaseAddress().GetOffset(); if (function_offset) - s->Printf(" + %llu", function_offset); + { + dumped_something = true; + s->Printf(" + %llu", function_offset); + } } if (block != NULL) @@ -147,11 +155,13 @@ SymbolContext::DumpStopContext s->IndentMore(); block->DumpStopContext (s, this, NULL, show_fullpaths, show_inlined_frames); s->IndentLess(); + dumped_something = true; } else { if (line_entry.IsValid()) { + dumped_something = true; s->PutCString(" at "); if (line_entry.DumpStopContext(s, show_fullpaths)) return; @@ -160,19 +170,28 @@ SymbolContext::DumpStopContext } else if (symbol != NULL) { - symbol->GetMangled().GetName().Dump(s); + if (symbol->GetMangled().GetName()) + { + dumped_something = true; + symbol->GetMangled().GetName().Dump(s); + } if (addr.IsValid() && symbol->GetAddressRangePtr()) { const addr_t symbol_offset = addr.GetOffset() - symbol->GetAddressRangePtr()->GetBaseAddress().GetOffset(); if (symbol_offset) - s->Printf(" + %llu", symbol_offset); + { + dumped_something = true; + s->Printf(" + %llu", symbol_offset); + } } } else if (addr.IsValid()) { addr.Dump(s, exe_scope, Address::DumpStyleModuleWithFileAddress); + dumped_something = true; } + return dumped_something; } void diff --git a/source/Symbol/Variable.cpp b/source/Symbol/Variable.cpp index a8ebe8592..64018692b 100644 --- a/source/Symbol/Variable.cpp +++ b/source/Symbol/Variable.cpp @@ -142,6 +142,32 @@ Variable::Dump(Stream *s, bool show_context) const s->EOL(); } +bool +Variable::DumpDeclaration (Stream *s, bool show_fullpaths, bool show_module) +{ + bool dumped_declaration_info = false; + if (m_owner_scope) + { + SymbolContext sc; + m_owner_scope->CalculateSymbolContext(&sc); + sc.block = NULL; + sc.line_entry.Clear(); + bool show_inlined_frames = false; + + dumped_declaration_info = sc.DumpStopContext (s, + NULL, + Address(), + show_fullpaths, + show_module, + show_inlined_frames); + + if (sc.function) + s->PutChar(':'); + } + if (m_declaration.DumpStopContext (s, false)) + dumped_declaration_info = true; + return dumped_declaration_info; +} size_t Variable::MemorySize() const |