blob: 953f5f492b12973703027f6ce7e1c7142cade665 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- DisassemblerLLVM.h --------------------------------------*- 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#ifndef liblldb_DisassemblerLLVM_h_
11#define liblldb_DisassemblerLLVM_h_
12
Greg Claytonc9b60002010-07-21 16:57:26 +000013
14#include "llvm-c/EnhancedDisassembly.h"
15
Chris Lattner24943d22010-06-08 16:52:24 +000016#include "lldb/Core/Disassembler.h"
17#include "lldb/Host/Mutex.h"
18
Caroline Ticeaf591802011-04-05 23:22:54 +000019class InstructionLLVM : public lldb_private::Instruction
20{
21public:
22 InstructionLLVM (const lldb_private::Address &addr,
23 lldb_private::AddressClass addr_class,
Greg Claytonabe0fed2011-04-18 08:33:37 +000024 EDDisassemblerRef disassembler,
25 bool force_raw);
Caroline Ticeaf591802011-04-05 23:22:54 +000026
27 virtual
28 ~InstructionLLVM();
29
30 virtual void
31 Dump (lldb_private::Stream *s,
32 uint32_t max_opcode_byte_size,
33 bool show_address,
34 bool show_bytes,
35 const lldb_private::ExecutionContext* exe_ctx,
36 bool raw);
37
38 virtual bool
39 DoesBranch () const;
40
41 virtual size_t
42 Decode (const lldb_private::Disassembler &disassembler,
43 const lldb_private::DataExtractor &data,
44 uint32_t data_offset);
45
46protected:
47 EDDisassemblerRef m_disassembler;
48 EDInstRef m_inst;
Greg Claytonabe0fed2011-04-18 08:33:37 +000049 bool m_force_raw;
Caroline Ticeaf591802011-04-05 23:22:54 +000050};
51
52
Chris Lattner24943d22010-06-08 16:52:24 +000053class DisassemblerLLVM : public lldb_private::Disassembler
54{
55public:
Chris Lattner24943d22010-06-08 16:52:24 +000056 //------------------------------------------------------------------
57 // Static Functions
58 //------------------------------------------------------------------
59 static void
60 Initialize();
61
62 static void
63 Terminate();
64
65 static const char *
66 GetPluginNameStatic();
67
68 static const char *
69 GetPluginDescriptionStatic();
70
71 static lldb_private::Disassembler *
72 CreateInstance(const lldb_private::ArchSpec &arch);
73
74
75 DisassemblerLLVM(const lldb_private::ArchSpec &arch);
76
77 virtual
78 ~DisassemblerLLVM();
79
80 size_t
Greg Clayton5c4c7462010-10-06 03:09:58 +000081 DecodeInstructions (const lldb_private::Address &base_addr,
82 const lldb_private::DataExtractor& data,
Greg Clayton70436352010-06-30 23:03:03 +000083 uint32_t data_offset,
Jim Inghamaa3e3e12011-03-22 01:48:42 +000084 uint32_t num_instructions,
85 bool append);
Greg Clayton70436352010-06-30 23:03:03 +000086
Chris Lattner24943d22010-06-08 16:52:24 +000087 //------------------------------------------------------------------
88 // PluginInterface protocol
89 //------------------------------------------------------------------
90 virtual const char *
91 GetPluginName();
92
93 virtual const char *
94 GetShortPluginName();
95
96 virtual uint32_t
97 GetPluginVersion();
98
Chris Lattner24943d22010-06-08 16:52:24 +000099protected:
Greg Clayton5e4f4a22011-02-16 00:00:43 +0000100 bool
101 IsValid() const
102 {
103 return m_disassembler != NULL;
104 }
105
Chris Lattner24943d22010-06-08 16:52:24 +0000106 EDDisassemblerRef m_disassembler;
Greg Claytonb1888f22011-03-19 01:12:21 +0000107 EDDisassemblerRef m_disassembler_thumb;
Chris Lattner24943d22010-06-08 16:52:24 +0000108};
109
110#endif // liblldb_DisassemblerLLVM_h_