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:
Greg Clayton 2010-09-10 01:30:46 +00:00
parent bf4070756f
commit c9800667e4
9 changed files with 65 additions and 47 deletions

View File

@ -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)
{

View File

@ -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;
}

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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)

View File

@ -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());
}
}
}

View File

@ -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();
}

View File

@ -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;
}
}
}
}