summaryrefslogtreecommitdiffstats
path: root/lldb/source/Core/Opcode.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2012-04-11 21:13:31 +0000
committerGreg Clayton <gclayton@apple.com>2012-04-11 21:13:31 +0000
commitd1411e1aa2f684dc7d8915dfa51e498e2339c64f (patch)
treeecd229f3fd0fd9f61add72aa1d0aa08b6136947c /lldb/source/Core/Opcode.cpp
parentaaf4d69ac149761e147f871626459d3d9634bceb (diff)
downloadbcm5719-llvm-d1411e1aa2f684dc7d8915dfa51e498e2339c64f.tar.gz
bcm5719-llvm-d1411e1aa2f684dc7d8915dfa51e498e2339c64f.zip
Cleaned up code that was getting SBData for an SBInstruction.
llvm-svn: 154535
Diffstat (limited to 'lldb/source/Core/Opcode.cpp')
-rw-r--r--lldb/source/Core/Opcode.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/lldb/source/Core/Opcode.cpp b/lldb/source/Core/Opcode.cpp
index 489a61a353a..8afaa32b07d 100644
--- a/lldb/source/Core/Opcode.cpp
+++ b/lldb/source/Core/Opcode.cpp
@@ -13,6 +13,8 @@
// C++ Includes
// Other libraries and framework includes
// Project includes
+#include "lldb/Core/DataBufferHeap.h"
+#include "lldb/Core/DataExtractor.h"
#include "lldb/Core/Stream.h"
#include "lldb/Host/Endian.h"
@@ -79,3 +81,36 @@ Opcode::GetDataByteOrder () const
return eByteOrderInvalid;
}
+uint32_t
+Opcode::GetData (DataExtractor &data) const
+{
+ uint32_t byte_size = GetByteSize ();
+ DataBufferSP buffer_sp;
+ if (byte_size > 0)
+ {
+ switch (m_type)
+ {
+ case Opcode::eTypeInvalid:
+ break;
+
+ case Opcode::eType8: buffer_sp.reset (new DataBufferHeap (&m_data.inst8, byte_size)); break;
+ case Opcode::eType16: buffer_sp.reset (new DataBufferHeap (&m_data.inst16, byte_size)); break;
+ case Opcode::eType32: buffer_sp.reset (new DataBufferHeap (&m_data.inst32, byte_size)); break;
+ case Opcode::eType64: buffer_sp.reset (new DataBufferHeap (&m_data.inst64, byte_size)); break;
+ case Opcode::eTypeBytes:buffer_sp.reset (new DataBufferHeap (GetOpcodeBytes(), byte_size)); break;
+ break;
+ }
+ }
+
+ if (buffer_sp)
+ {
+ data.SetByteOrder(GetDataByteOrder());
+ data.SetData (buffer_sp);
+ return byte_size;
+ }
+ data.Clear();
+ return 0;
+}
+
+
+
OpenPOWER on IntegriCloud