blob: fe22d9c29e4adba666dd6a5cbafcdd2e20b1e4f3 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- SBInstructionList.cpp -----------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "lldb/API/SBInstructionList.h"
11#include "lldb/API/SBInstruction.h"
Greg Clayton5c4c7462010-10-06 03:09:58 +000012#include "lldb/API/SBStream.h"
13#include "lldb/Core/Disassembler.h"
14#include "lldb/Core/Stream.h"
Chris Lattner24943d22010-06-08 16:52:24 +000015
16using namespace lldb;
Greg Clayton5c4c7462010-10-06 03:09:58 +000017using namespace lldb_private;
Chris Lattner24943d22010-06-08 16:52:24 +000018
19
Greg Clayton5c4c7462010-10-06 03:09:58 +000020SBInstructionList::SBInstructionList () :
21 m_opaque_sp()
Chris Lattner24943d22010-06-08 16:52:24 +000022{
23}
24
Greg Clayton538eb822010-11-05 23:17:00 +000025SBInstructionList::SBInstructionList(const SBInstructionList &rhs) :
26 m_opaque_sp (rhs.m_opaque_sp)
27{
28}
29
30const SBInstructionList &
31SBInstructionList::operator = (const SBInstructionList &rhs)
32{
33 if (this != &rhs)
34 m_opaque_sp = rhs.m_opaque_sp;
35 return *this;
36}
37
38
Chris Lattner24943d22010-06-08 16:52:24 +000039SBInstructionList::~SBInstructionList ()
40{
41}
42
Johnny Chend2554b52011-06-20 22:30:48 +000043bool
44SBInstructionList::IsValid () const
45{
46 return m_opaque_sp.get() != NULL;
47}
48
Chris Lattner24943d22010-06-08 16:52:24 +000049size_t
50SBInstructionList::GetSize ()
51{
Greg Clayton5c4c7462010-10-06 03:09:58 +000052 if (m_opaque_sp)
53 return m_opaque_sp->GetInstructionList().GetSize();
Chris Lattner24943d22010-06-08 16:52:24 +000054 return 0;
55}
56
57SBInstruction
58SBInstructionList::GetInstructionAtIndex (uint32_t idx)
59{
60 SBInstruction inst;
Greg Clayton5c4c7462010-10-06 03:09:58 +000061 if (m_opaque_sp && idx < m_opaque_sp->GetInstructionList().GetSize())
62 inst.SetOpaque (m_opaque_sp->GetInstructionList().GetInstructionAtIndex (idx));
Chris Lattner24943d22010-06-08 16:52:24 +000063 return inst;
64}
65
66void
67SBInstructionList::Clear ()
68{
Greg Clayton5c4c7462010-10-06 03:09:58 +000069 m_opaque_sp.reset();
Chris Lattner24943d22010-06-08 16:52:24 +000070}
71
72void
73SBInstructionList::AppendInstruction (SBInstruction insn)
74{
75}
76
77void
Greg Clayton5c4c7462010-10-06 03:09:58 +000078SBInstructionList::SetDisassembler (const lldb::DisassemblerSP &opaque_sp)
79{
80 m_opaque_sp = opaque_sp;
81}
82
83void
Chris Lattner24943d22010-06-08 16:52:24 +000084SBInstructionList::Print (FILE *out)
85{
86 if (out == NULL)
87 return;
88}
89
Greg Clayton5c4c7462010-10-06 03:09:58 +000090
91bool
92SBInstructionList::GetDescription (lldb::SBStream &description)
93{
94 if (m_opaque_sp)
95 {
96 size_t num_instructions = GetSize ();
97 if (num_instructions)
98 {
99 // Call the ref() to make sure a stream is created if one deesn't
100 // exist already inside description...
101 Stream &sref = description.ref();
Greg Clayton889fbd02011-03-26 19:14:58 +0000102 const uint32_t max_opcode_byte_size = m_opaque_sp->GetInstructionList().GetMaxOpcocdeByteSize();
Greg Clayton5c4c7462010-10-06 03:09:58 +0000103 for (size_t i=0; i<num_instructions; ++i)
104 {
105 Instruction *inst = m_opaque_sp->GetInstructionList().GetInstructionAtIndex (i).get();
106 if (inst == NULL)
107 break;
Greg Clayton0fef9682012-05-10 02:52:23 +0000108 inst->Dump (&sref, max_opcode_byte_size, true, false, NULL);
Greg Clayton5c4c7462010-10-06 03:09:58 +0000109 sref.EOL();
110 }
111 return true;
112 }
113 }
114 return false;
115}
116
117
Caroline Ticeaf591802011-04-05 23:22:54 +0000118bool
119SBInstructionList::DumpEmulationForAllInstructions (const char *triple)
120{
121 if (m_opaque_sp)
122 {
123 size_t len = GetSize();
124 for (size_t i = 0; i < len; ++i)
125 {
126 if (!GetInstructionAtIndex((uint32_t) i).DumpEmulation (triple))
127 return false;
128 }
129 }
130 return true;
131}
132