Cleaned up the output of "image lookup --address <ADDR>" which involved
cleaning up the output of many GetDescription objects that are part of a symbol context. This fixes an issue where no ranges were being printed out for functions, blocks and symbols. llvm-svn: 113571
This commit is contained in:
parent
bf4070756f
commit
c9800667e4
|
@ -381,7 +381,7 @@ Address::Dump (Stream *s, ExecutionContextScope *exe_scope, DumpStyle style, Dum
|
|||
addr_size = sizeof(addr_t);
|
||||
}
|
||||
|
||||
lldb_private::Address so_addr;
|
||||
Address so_addr;
|
||||
switch (style)
|
||||
{
|
||||
case DumpStyleInvalid:
|
||||
|
@ -448,7 +448,7 @@ Address::Dump (Stream *s, ExecutionContextScope *exe_scope, DumpStyle style, Dum
|
|||
}
|
||||
|
||||
uint32_t pointer_size = 4;
|
||||
lldb_private::Module *module = GetModule();
|
||||
Module *module = GetModule();
|
||||
if (process)
|
||||
pointer_size = process->GetAddressByteSize();
|
||||
else if (module)
|
||||
|
@ -488,7 +488,7 @@ Address::Dump (Stream *s, ExecutionContextScope *exe_scope, DumpStyle style, Dum
|
|||
{
|
||||
if (target && so_addr.IsSectionOffset())
|
||||
{
|
||||
lldb_private::SymbolContext func_sc;
|
||||
SymbolContext func_sc;
|
||||
target->GetImages().ResolveSymbolContextForAddress (so_addr,
|
||||
eSymbolContextEverything,
|
||||
func_sc);
|
||||
|
@ -577,7 +577,7 @@ Address::Dump (Stream *s, ExecutionContextScope *exe_scope, DumpStyle style, Dum
|
|||
showed_info = true;
|
||||
if (so_addr.IsSectionOffset())
|
||||
{
|
||||
lldb_private::SymbolContext pointer_sc;
|
||||
SymbolContext pointer_sc;
|
||||
if (target)
|
||||
{
|
||||
target->GetImages().ResolveSymbolContextForAddress (so_addr,
|
||||
|
@ -603,7 +603,7 @@ Address::Dump (Stream *s, ExecutionContextScope *exe_scope, DumpStyle style, Dum
|
|||
{
|
||||
if (module)
|
||||
{
|
||||
lldb_private::SymbolContext sc;
|
||||
SymbolContext sc;
|
||||
module->ResolveSymbolContextForAddress(*this, eSymbolContextEverything, sc);
|
||||
if (sc.function || sc.symbol)
|
||||
{
|
||||
|
@ -656,18 +656,10 @@ Address::Dump (Stream *s, ExecutionContextScope *exe_scope, DumpStyle style, Dum
|
|||
case DumpStyleDetailedSymbolContext:
|
||||
if (IsSectionOffset())
|
||||
{
|
||||
lldb::AddressType addr_type = eAddressTypeLoad;
|
||||
addr_t addr = GetLoadAddress (process);
|
||||
if (addr == LLDB_INVALID_ADDRESS)
|
||||
{
|
||||
addr = GetFileAddress();
|
||||
addr_type = eAddressTypeFile;
|
||||
}
|
||||
|
||||
lldb_private::Module *module = GetModule();
|
||||
Module *module = GetModule();
|
||||
if (module)
|
||||
{
|
||||
lldb_private::SymbolContext sc;
|
||||
SymbolContext sc;
|
||||
module->ResolveSymbolContextForAddress(*this, eSymbolContextEverything, sc);
|
||||
if (sc.symbol)
|
||||
{
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "lldb/Core/AddressRange.h"
|
||||
#include "lldb/Core/Module.h"
|
||||
#include "lldb/Core/Stream.h"
|
||||
#include "lldb/Target/Process.h"
|
||||
|
||||
|
@ -144,11 +145,11 @@ AddressRange::Dump(Stream *s, Process *process, Address::DumpStyle style, Addres
|
|||
if (process)
|
||||
addr_size = process->GetAddressByteSize ();
|
||||
|
||||
bool show_module = false;
|
||||
switch (style)
|
||||
{
|
||||
default:
|
||||
break;
|
||||
|
||||
case Address::DumpStyleSectionNameOffset:
|
||||
case Address::DumpStyleSectionPointerOffset:
|
||||
s->PutChar ('[');
|
||||
|
@ -159,6 +160,9 @@ AddressRange::Dump(Stream *s, Process *process, Address::DumpStyle style, Addres
|
|||
return true;
|
||||
break;
|
||||
|
||||
case Address::DumpStyleModuleWithFileAddress:
|
||||
show_module = true;
|
||||
// fall through
|
||||
case Address::DumpStyleFileAddress:
|
||||
vmaddr = m_base_addr.GetFileAddress();
|
||||
break;
|
||||
|
@ -170,9 +174,19 @@ AddressRange::Dump(Stream *s, Process *process, Address::DumpStyle style, Addres
|
|||
|
||||
if (vmaddr != LLDB_INVALID_ADDRESS)
|
||||
{
|
||||
if (show_module)
|
||||
{
|
||||
Module *module = GetBaseAddress().GetModule();
|
||||
if (module)
|
||||
s->Printf("%s", module->GetFileSpec().GetFilename().AsCString());
|
||||
}
|
||||
s->AddressRange(vmaddr, vmaddr + GetByteSize(), addr_size);
|
||||
return true;
|
||||
}
|
||||
else if (fallback_style != Address::DumpStyleInvalid)
|
||||
{
|
||||
return Dump(s, process, fallback_style, Address::DumpStyleInvalid);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -38,6 +38,8 @@ Block::~Block ()
|
|||
void
|
||||
Block::GetDescription(Stream *s, Function *function, lldb::DescriptionLevel level, Process *process) const
|
||||
{
|
||||
*s << "id = " << ((const UserID&)*this);
|
||||
|
||||
size_t num_ranges = m_ranges.size();
|
||||
if (num_ranges)
|
||||
{
|
||||
|
@ -48,12 +50,11 @@ Block::GetDescription(Stream *s, Function *function, lldb::DescriptionLevel leve
|
|||
if (base_addr == LLDB_INVALID_ADDRESS)
|
||||
base_addr = function->GetAddressRange().GetBaseAddress().GetFileAddress();
|
||||
|
||||
s->Printf("range%s = ", num_ranges > 1 ? "s" : "");
|
||||
s->Printf(", range%s = ", num_ranges > 1 ? "s" : "");
|
||||
std::vector<VMRange>::const_iterator pos, end = m_ranges.end();
|
||||
for (pos = m_ranges.begin(); pos != end; ++pos)
|
||||
pos->Dump(s, base_addr, 4);
|
||||
}
|
||||
*s << ", id = " << ((const UserID&)*this);
|
||||
|
||||
if (m_inlineInfoSP.get() != NULL)
|
||||
m_inlineInfoSP->Dump(s);
|
||||
|
|
|
@ -68,8 +68,7 @@ CompileUnit::DumpSymbolContext(Stream *s)
|
|||
void
|
||||
CompileUnit::GetDescription(Stream *s, lldb::DescriptionLevel level) const
|
||||
{
|
||||
*s << '"' << (const FileSpec&)*this << "\", id = " << (const UserID&)*this
|
||||
<< ", language = " << (const Language&)*this;
|
||||
*s << "id = " << (const UserID&)*this << ", file = \"" << (const FileSpec&)*this << "\", language = \"" << (const Language&)*this << '"';
|
||||
}
|
||||
|
||||
|
||||
|
@ -85,8 +84,8 @@ CompileUnit::Dump(Stream *s, bool show_context) const
|
|||
s->Printf("%.*p: ", (int)sizeof(void*) * 2, this);
|
||||
s->Indent();
|
||||
*s << "CompileUnit" << (const UserID&)*this
|
||||
<< ", language = " << (const Language&)*this
|
||||
<< ", file='" << (const FileSpec&)*this << "'\n";
|
||||
<< ", language = \"" << (const Language&)*this
|
||||
<< "\", file = '" << (const FileSpec&)*this << "'\n";
|
||||
|
||||
// m_types.Dump(s);
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "clang/AST/Type.h"
|
||||
#include "clang/AST/CanonicalType.h"
|
||||
|
||||
using namespace lldb;
|
||||
using namespace lldb_private;
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -328,9 +329,14 @@ void
|
|||
Function::GetDescription(Stream *s, lldb::DescriptionLevel level, Process *process)
|
||||
{
|
||||
Type* func_type = GetType();
|
||||
*s << '"' << func_type->GetName() << "\", id = " << (const UserID&)*this;
|
||||
*s << ", range = ";
|
||||
GetAddressRange().Dump(s, process, Address::DumpStyleLoadAddress, Address::DumpStyleModuleWithFileAddress);
|
||||
*s << "id = " << (const UserID&)*this << ", name = \"" << func_type->GetName() << "\", range = ";
|
||||
|
||||
Address::DumpStyle fallback_style;
|
||||
if (level == eDescriptionLevelVerbose)
|
||||
fallback_style = Address::DumpStyleModuleWithFileAddress;
|
||||
else
|
||||
fallback_style = Address::DumpStyleFileAddress;
|
||||
GetAddressRange().Dump(s, process, Address::DumpStyleLoadAddress, fallback_style);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -151,20 +151,16 @@ LineEntry::GetDescription (Stream *s, lldb::DescriptionLevel level, CompileUnit*
|
|||
|
||||
if (level == lldb::eDescriptionLevelBrief || level == lldb::eDescriptionLevelFull)
|
||||
{
|
||||
// Show address only
|
||||
if (show_address_only)
|
||||
{
|
||||
s->PutCString ("address = ");
|
||||
range.GetBaseAddress().Dump(s, process, Address::DumpStyleLoadAddress, Address::DumpStyleFileAddress);
|
||||
}
|
||||
else
|
||||
{
|
||||
s->PutCString ("range = ");
|
||||
range.Dump(s, process, Address::DumpStyleLoadAddress, Address::DumpStyleFileAddress);
|
||||
}
|
||||
|
||||
if (file)
|
||||
*s << ' ' << file;
|
||||
*s << ": " << file;
|
||||
|
||||
if (line)
|
||||
{
|
||||
|
@ -173,6 +169,7 @@ LineEntry::GetDescription (Stream *s, lldb::DescriptionLevel level, CompileUnit*
|
|||
s->Printf(":%u", column);
|
||||
}
|
||||
|
||||
|
||||
if (level == lldb::eDescriptionLevelFull)
|
||||
{
|
||||
if (is_start_of_statement)
|
||||
|
|
|
@ -175,19 +175,29 @@ Symbol::IsTrampoline () const
|
|||
void
|
||||
Symbol::GetDescription (Stream *s, lldb::DescriptionLevel level, Process *process) const
|
||||
{
|
||||
*s << '"' << m_mangled.GetName() << "\", id = " << (const UserID&)*this;
|
||||
*s << "id = " << (const UserID&)*this << ", name = \"" << m_mangled.GetName() << '"';
|
||||
const Section *section = m_addr_range.GetBaseAddress().GetSection();
|
||||
if (section != NULL)
|
||||
{
|
||||
if (m_addr_range.GetByteSize() > 0)
|
||||
if (m_addr_range.GetBaseAddress().IsSectionOffset())
|
||||
{
|
||||
s->PutCString(", range = ");
|
||||
m_addr_range.Dump(s, process, Address::DumpStyleLoadAddress, Address::DumpStyleModuleWithFileAddress);
|
||||
if (m_addr_range.GetByteSize() > 0)
|
||||
{
|
||||
s->PutCString (", range = ");
|
||||
m_addr_range.Dump(s, process, Address::DumpStyleLoadAddress, Address::DumpStyleFileAddress);
|
||||
}
|
||||
else
|
||||
{
|
||||
s->PutCString (", address = ");
|
||||
m_addr_range.GetBaseAddress().Dump(s, process, Address::DumpStyleLoadAddress, Address::DumpStyleFileAddress);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
s->PutCString(", address = ");
|
||||
m_addr_range.GetBaseAddress().Dump(s, process, Address::DumpStyleLoadAddress, Address::DumpStyleModuleWithFileAddress);
|
||||
if (m_size_is_sibling)
|
||||
s->Printf (", sibling = %5llu", m_addr_range.GetBaseAddress().GetOffset());
|
||||
else
|
||||
s->Printf (", value = 0x%16.16llx", m_addr_range.GetBaseAddress().GetOffset());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -198,9 +198,11 @@ SymbolContext::GetDescription(Stream *s, lldb::DescriptionLevel level, Process *
|
|||
{
|
||||
if (module_sp)
|
||||
{
|
||||
s->Indent(" Module: \"");
|
||||
s->Indent(" Module: file = \"");
|
||||
module_sp->GetFileSpec().Dump(s);
|
||||
s->PutChar('"');
|
||||
*s << '"';
|
||||
if (module_sp->GetArchitecture().IsValid())
|
||||
s->Printf (", arch = \"%s\"", module_sp->GetArchitecture().AsCString());
|
||||
s->EOL();
|
||||
}
|
||||
|
||||
|
|
|
@ -85,14 +85,11 @@ lldb_private::Type::operator= (const Type& rhs)
|
|||
void
|
||||
lldb_private::Type::GetDescription (Stream *s, lldb::DescriptionLevel level, bool show_name)
|
||||
{
|
||||
if (show_name)
|
||||
{
|
||||
if (m_name)
|
||||
*s << '\"' << m_name << "\", ";
|
||||
}
|
||||
|
||||
*s << "id = " << (const UserID&)*this;
|
||||
|
||||
if (show_name && m_name)
|
||||
*s << ", name = \"" << m_name << '"';
|
||||
|
||||
if (m_byte_size != 0)
|
||||
s->Printf(", byte-size = %zu", m_byte_size);
|
||||
|
||||
|
@ -100,9 +97,9 @@ lldb_private::Type::GetDescription (Stream *s, lldb::DescriptionLevel level, boo
|
|||
|
||||
if (m_clang_qual_type)
|
||||
{
|
||||
*s << ", clang_type = " << m_clang_qual_type << ' ';
|
||||
|
||||
*s << ", clang_type = \"";
|
||||
ClangASTType::DumpTypeDescription (GetClangAST(), m_clang_qual_type, s);
|
||||
*s << '"';
|
||||
}
|
||||
else if (m_encoding_uid != LLDB_INVALID_UID)
|
||||
{
|
||||
|
@ -118,7 +115,7 @@ lldb_private::Type::GetDescription (Stream *s, lldb::DescriptionLevel level, boo
|
|||
case eLValueReferenceToTypeWithUID: s->PutCString(" (unresolved L value reference)"); break;
|
||||
case eRValueReferenceToTypeWithUID: s->PutCString(" (unresolved R value reference)"); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue