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 ();
git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@126892 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/API/SBFunction.cpp b/source/API/SBFunction.cpp
index 853a6ff..c8ce1c3 100644
--- a/source/API/SBFunction.cpp
+++ b/source/API/SBFunction.cpp
@@ -156,3 +156,38 @@
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;
+}
+
+
diff --git a/source/API/SBSymbol.cpp b/source/API/SBSymbol.cpp
index 8f6593c..96a5a21 100644
--- a/source/API/SBSymbol.cpp
+++ b/source/API/SBSymbol.cpp
@@ -153,3 +153,47 @@
{
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;
+}