aboutsummaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/Commands/CommandObjectFrame.cpp6
-rw-r--r--source/Commands/CommandObjectTarget.cpp14
-rw-r--r--source/Core/ValueObject.cpp20
-rw-r--r--source/Symbol/Declaration.cpp7
-rw-r--r--source/Symbol/SymbolContext.cpp27
-rw-r--r--source/Symbol/Variable.cpp26
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