Added the ability to get the disassembly instructions from the function and
symbol.
llvm-svn: 115734
diff --git a/lldb/source/API/SBInstructionList.cpp b/lldb/source/API/SBInstructionList.cpp
index d34e9d1..b27ddfa 100644
--- a/lldb/source/API/SBInstructionList.cpp
+++ b/lldb/source/API/SBInstructionList.cpp
@@ -9,11 +9,16 @@
#include "lldb/API/SBInstructionList.h"
#include "lldb/API/SBInstruction.h"
+#include "lldb/API/SBStream.h"
+#include "lldb/Core/Disassembler.h"
+#include "lldb/Core/Stream.h"
using namespace lldb;
+using namespace lldb_private;
-SBInstructionList::SBInstructionList ()
+SBInstructionList::SBInstructionList () :
+ m_opaque_sp()
{
}
@@ -24,6 +29,8 @@
size_t
SBInstructionList::GetSize ()
{
+ if (m_opaque_sp)
+ return m_opaque_sp->GetInstructionList().GetSize();
return 0;
}
@@ -31,12 +38,15 @@
SBInstructionList::GetInstructionAtIndex (uint32_t idx)
{
SBInstruction inst;
+ if (m_opaque_sp && idx < m_opaque_sp->GetInstructionList().GetSize())
+ inst.SetOpaque (m_opaque_sp->GetInstructionList().GetInstructionAtIndex (idx));
return inst;
}
void
SBInstructionList::Clear ()
{
+ m_opaque_sp.reset();
}
void
@@ -45,9 +55,42 @@
}
void
+SBInstructionList::SetDisassembler (const lldb::DisassemblerSP &opaque_sp)
+{
+ m_opaque_sp = opaque_sp;
+}
+
+void
SBInstructionList::Print (FILE *out)
{
if (out == NULL)
return;
}
+
+bool
+SBInstructionList::GetDescription (lldb::SBStream &description)
+{
+ if (m_opaque_sp)
+ {
+ size_t num_instructions = GetSize ();
+ if (num_instructions)
+ {
+ // Call the ref() to make sure a stream is created if one deesn't
+ // exist already inside description...
+ Stream &sref = description.ref();
+ for (size_t i=0; i<num_instructions; ++i)
+ {
+ Instruction *inst = m_opaque_sp->GetInstructionList().GetInstructionAtIndex (i).get();
+ if (inst == NULL)
+ break;
+ inst->Dump (&sref, true, NULL, 0, NULL, false);
+ sref.EOL();
+ }
+ return true;
+ }
+ }
+ return false;
+}
+
+