diff options
| author | Greg Clayton <gclayton@apple.com> | 2010-10-06 03:09:58 +0000 |
|---|---|---|
| committer | Greg Clayton <gclayton@apple.com> | 2010-10-06 03:09:58 +0000 |
| commit | 1d273166064c5163a1ca2be9a8e65cb628fc3524 (patch) | |
| tree | 1471372d3bfb657f1e6820d0bc5aa13e33d13684 /lldb/source/API/SBInstructionList.cpp | |
| parent | 32c4085ba2d259ff9a4365b1962362248de2c655 (diff) | |
| download | bcm5719-llvm-1d273166064c5163a1ca2be9a8e65cb628fc3524.tar.gz bcm5719-llvm-1d273166064c5163a1ca2be9a8e65cb628fc3524.zip | |
Added the ability to get the disassembly instructions from the function and
symbol.
llvm-svn: 115734
Diffstat (limited to 'lldb/source/API/SBInstructionList.cpp')
| -rw-r--r-- | lldb/source/API/SBInstructionList.cpp | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/lldb/source/API/SBInstructionList.cpp b/lldb/source/API/SBInstructionList.cpp index d34e9d100a9..b27ddfa5011 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 @@ SBInstructionList::~SBInstructionList () size_t SBInstructionList::GetSize () { + if (m_opaque_sp) + return m_opaque_sp->GetInstructionList().GetSize(); return 0; } @@ -31,12 +38,15 @@ SBInstruction 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 @@ SBInstructionList::AppendInstruction (SBInstruction insn) } 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; +} + + |

