diff options
| -rw-r--r-- | lldb/include/lldb/Symbol/Declaration.h | 2 | ||||
| -rw-r--r-- | lldb/include/lldb/Symbol/SymbolContext.h | 2 | ||||
| -rw-r--r-- | lldb/include/lldb/Symbol/Variable.h | 5 | ||||
| -rw-r--r-- | lldb/source/Commands/CommandObjectFrame.cpp | 6 | ||||
| -rw-r--r-- | lldb/source/Commands/CommandObjectTarget.cpp | 14 | ||||
| -rw-r--r-- | lldb/source/Core/ValueObject.cpp | 20 | ||||
| -rw-r--r-- | lldb/source/Symbol/Declaration.cpp | 7 | ||||
| -rw-r--r-- | lldb/source/Symbol/SymbolContext.cpp | 27 | ||||
| -rw-r--r-- | lldb/source/Symbol/Variable.cpp | 26 | 
9 files changed, 89 insertions, 20 deletions
diff --git a/lldb/include/lldb/Symbol/Declaration.h b/lldb/include/lldb/Symbol/Declaration.h index 1f6d697aa64..f014571595f 100644 --- a/lldb/include/lldb/Symbol/Declaration.h +++ b/lldb/include/lldb/Symbol/Declaration.h @@ -141,7 +141,7 @@ public:      void      Dump (Stream *s, bool show_fullpaths) const; -    void +    bool      DumpStopContext (Stream *s, bool show_fullpaths) const;      //------------------------------------------------------------------      /// Get accessor for the declaration column number. diff --git a/lldb/include/lldb/Symbol/SymbolContext.h b/lldb/include/lldb/Symbol/SymbolContext.h index feceb64b587..c653486c6b6 100644 --- a/lldb/include/lldb/Symbol/SymbolContext.h +++ b/lldb/include/lldb/Symbol/SymbolContext.h @@ -160,7 +160,7 @@ public:      /// @param[in] so_addr      ///     The resolved section offset address.      //------------------------------------------------------------------ -    void +    bool      DumpStopContext (Stream *s,                       ExecutionContextScope *exe_scope,                       const Address &so_addr, diff --git a/lldb/include/lldb/Symbol/Variable.h b/lldb/include/lldb/Symbol/Variable.h index d2419ce87da..dec793277cd 100644 --- a/lldb/include/lldb/Symbol/Variable.h +++ b/lldb/include/lldb/Symbol/Variable.h @@ -44,6 +44,11 @@ public:      void      Dump(Stream *s, bool show_context) const; +    bool +    DumpDeclaration (Stream *s,  +                     bool show_fullpaths,  +                     bool show_module); +          const Declaration&      GetDeclaration() const      { diff --git a/lldb/source/Commands/CommandObjectFrame.cpp b/lldb/source/Commands/CommandObjectFrame.cpp index d184e0038d4..f82c06bcc15 100644 --- a/lldb/source/Commands/CommandObjectFrame.cpp +++ b/lldb/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/lldb/source/Commands/CommandObjectTarget.cpp b/lldb/source/Commands/CommandObjectTarget.cpp index 510fe488a46..b957314cbd4 100644 --- a/lldb/source/Commands/CommandObjectTarget.cpp +++ b/lldb/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/lldb/source/Core/ValueObject.cpp b/lldb/source/Core/ValueObject.cpp index 09cbd8c60f9..5c548dfbb97 100644 --- a/lldb/source/Core/ValueObject.cpp +++ b/lldb/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/lldb/source/Symbol/Declaration.cpp b/lldb/source/Symbol/Declaration.cpp index 2b20a24e514..3943f02c547 100644 --- a/lldb/source/Symbol/Declaration.cpp +++ b/lldb/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/lldb/source/Symbol/SymbolContext.cpp b/lldb/source/Symbol/SymbolContext.cpp index 2a56c3444c2..1f24f1339bd 100644 --- a/lldb/source/Symbol/SymbolContext.cpp +++ b/lldb/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/lldb/source/Symbol/Variable.cpp b/lldb/source/Symbol/Variable.cpp index a8ebe85921d..64018692b7c 100644 --- a/lldb/source/Symbol/Variable.cpp +++ b/lldb/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  | 

