blob: 181710c5ffe316779f9b0b8fc07366e1a9b6038b [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
Chris Lattner24943d22010-06-08 16:52:24 +000019class DisassemblerLLVM : public lldb_private::Disassembler
20{
21public:
22 class Instruction : public lldb_private::Disassembler::Instruction
23 {
24 public:
25 Instruction(EDDisassemblerRef disassembler);
26
27 virtual
28 ~Instruction();
29
30 void
31 Dump (lldb_private::Stream *s,
Greg Clayton70436352010-06-30 23:03:03 +000032 lldb_private::Address *instr_addr_ptr,
33 const lldb_private::DataExtractor *bytes,
Chris Lattner24943d22010-06-08 16:52:24 +000034 uint32_t bytes_offset,
Greg Clayton70436352010-06-30 23:03:03 +000035 const lldb_private::ExecutionContext& exe_ctx,
Chris Lattner24943d22010-06-08 16:52:24 +000036 bool raw);
37
38 bool
39 DoesBranch () const;
40
41 size_t
42 GetByteSize() const;
43
44 size_t
45 Extract (const lldb_private::DataExtractor &data,
46 uint32_t data_offset);
47
48 protected:
49 EDDisassemblerRef m_disassembler;
50 EDInstRef m_inst;
51 };
52
53 //------------------------------------------------------------------
54 // Static Functions
55 //------------------------------------------------------------------
56 static void
57 Initialize();
58
59 static void
60 Terminate();
61
62 static const char *
63 GetPluginNameStatic();
64
65 static const char *
66 GetPluginDescriptionStatic();
67
68 static lldb_private::Disassembler *
69 CreateInstance(const lldb_private::ArchSpec &arch);
70
71
72 DisassemblerLLVM(const lldb_private::ArchSpec &arch);
73
74 virtual
75 ~DisassemblerLLVM();
76
77 size_t
Greg Clayton70436352010-06-30 23:03:03 +000078 DecodeInstructions (const lldb_private::DataExtractor& data,
79 uint32_t data_offset,
80 uint32_t num_instructions);
81
Chris Lattner24943d22010-06-08 16:52:24 +000082 //------------------------------------------------------------------
83 // PluginInterface protocol
84 //------------------------------------------------------------------
85 virtual const char *
86 GetPluginName();
87
88 virtual const char *
89 GetShortPluginName();
90
91 virtual uint32_t
92 GetPluginVersion();
93
94 virtual void
95 GetPluginCommandHelp (const char *command, lldb_private::Stream *strm);
96
97 virtual lldb_private::Error
98 ExecutePluginCommand (lldb_private::Args &command, lldb_private::Stream *strm);
99
100 virtual lldb_private::Log *
101 EnablePluginLogging (lldb_private::Stream *strm, lldb_private::Args &command);
102
103protected:
104 EDDisassemblerRef m_disassembler;
105};
106
107#endif // liblldb_DisassemblerLLVM_h_