blob: 7116e5952331ead64699449b16b7f61fec8e9bd2 [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
13#include "lldb/Core/Disassembler.h"
14#include "lldb/Host/Mutex.h"
15
16struct EDDisassembler;
17typedef EDDisassembler *EDDisassemblerRef;
18
19struct EDInst;
20typedef EDInst *EDInstRef;
21
22class DisassemblerLLVM : public lldb_private::Disassembler
23{
24public:
25 class Instruction : public lldb_private::Disassembler::Instruction
26 {
27 public:
28 Instruction(EDDisassemblerRef disassembler);
29
30 virtual
31 ~Instruction();
32
33 void
34 Dump (lldb_private::Stream *s,
Greg Clayton70436352010-06-30 23:03:03 +000035 lldb_private::Address *instr_addr_ptr,
36 const lldb_private::DataExtractor *bytes,
Chris Lattner24943d22010-06-08 16:52:24 +000037 uint32_t bytes_offset,
Greg Clayton70436352010-06-30 23:03:03 +000038 const lldb_private::ExecutionContext& exe_ctx,
Chris Lattner24943d22010-06-08 16:52:24 +000039 bool raw);
40
41 bool
42 DoesBranch () const;
43
44 size_t
45 GetByteSize() const;
46
47 size_t
48 Extract (const lldb_private::DataExtractor &data,
49 uint32_t data_offset);
50
51 protected:
52 EDDisassemblerRef m_disassembler;
53 EDInstRef m_inst;
54 };
55
56 //------------------------------------------------------------------
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 Clayton70436352010-06-30 23:03:03 +000081 DecodeInstructions (const lldb_private::DataExtractor& data,
82 uint32_t data_offset,
83 uint32_t num_instructions);
84
Chris Lattner24943d22010-06-08 16:52:24 +000085 //------------------------------------------------------------------
86 // PluginInterface protocol
87 //------------------------------------------------------------------
88 virtual const char *
89 GetPluginName();
90
91 virtual const char *
92 GetShortPluginName();
93
94 virtual uint32_t
95 GetPluginVersion();
96
97 virtual void
98 GetPluginCommandHelp (const char *command, lldb_private::Stream *strm);
99
100 virtual lldb_private::Error
101 ExecutePluginCommand (lldb_private::Args &command, lldb_private::Stream *strm);
102
103 virtual lldb_private::Log *
104 EnablePluginLogging (lldb_private::Stream *strm, lldb_private::Args &command);
105
106protected:
107 EDDisassemblerRef m_disassembler;
108};
109
110#endif // liblldb_DisassemblerLLVM_h_