Export the ability to get the start and end addresses for functions

and symbols, and also allow clients to get the prologue size in bytes:

    SBAddress
    SBFunction::GetStartAddress ();
    
    SBAddress
    SBFunction::GetEndAddress ();
    
    uint32_t
    SBFunction::GetPrologueByteSize ();

    SBAddress
    SBSymbol::GetStartAddress ();
    
    SBAddress
    SBSymbol::GetEndAddress ();
    
    uint32_t
    SBSymbol::GetPrologueByteSize ();

llvm-svn: 126892
This commit is contained in:
Greg Clayton
2011-03-02 23:01:18 +00:00
parent 1a234ff46f
commit 93d00df578
5 changed files with 101 additions and 0 deletions

View File

@@ -156,3 +156,38 @@ SBFunction::reset (lldb_private::Function *lldb_object_ptr)
m_opaque_ptr = lldb_object_ptr;
}
SBAddress
SBFunction::GetStartAddress ()
{
SBAddress addr;
if (m_opaque_ptr)
addr.SetAddress (&m_opaque_ptr->GetAddressRange().GetBaseAddress());
return addr;
}
SBAddress
SBFunction::GetEndAddress ()
{
SBAddress addr;
if (m_opaque_ptr)
{
addr_t byte_size = m_opaque_ptr->GetAddressRange().GetByteSize();
if (byte_size > 0)
{
addr.SetAddress (&m_opaque_ptr->GetAddressRange().GetBaseAddress());
addr->Slide (byte_size);
}
}
return addr;
}
uint32_t
SBFunction::GetPrologueByteSize ()
{
if (m_opaque_ptr)
return m_opaque_ptr->GetPrologueByteSize();
return 0;
}

View File

@@ -153,3 +153,47 @@ SBSymbol::reset (lldb_private::Symbol *symbol)
{
m_opaque_ptr = symbol;
}
SBAddress
SBSymbol::GetStartAddress ()
{
SBAddress addr;
if (m_opaque_ptr)
{
// Make sure the symbol is an address based symbol first:
AddressRange *symbol_arange_ptr = m_opaque_ptr->GetAddressRangePtr();
if (symbol_arange_ptr)
{
addr.SetAddress (&symbol_arange_ptr->GetBaseAddress());
}
}
return addr;
}
SBAddress
SBSymbol::GetEndAddress ()
{
SBAddress addr;
if (m_opaque_ptr)
{
AddressRange *symbol_arange_ptr = m_opaque_ptr->GetAddressRangePtr();
if (symbol_arange_ptr)
{
addr_t byte_size = symbol_arange_ptr->GetByteSize();
if (byte_size > 0)
{
addr.SetAddress (&symbol_arange_ptr->GetBaseAddress());
addr->Slide (byte_size);
}
}
}
return addr;
}
uint32_t
SBSymbol::GetPrologueByteSize ()
{
if (m_opaque_ptr)
return m_opaque_ptr->GetPrologueByteSize();
return 0;
}