blob: 69998d91cb9ed4e4266e05cc282c706c52839855 [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,
24 EDDisassemblerRef disassembler);
25
26 virtual
27 ~InstructionLLVM();
28
29 virtual void
30 Dump (lldb_private::Stream *s,
31 uint32_t max_opcode_byte_size,
32 bool show_address,
33 bool show_bytes,
34 const lldb_private::ExecutionContext* exe_ctx,
35 bool raw);
36
37 virtual bool
38 DoesBranch () const;
39
40 virtual size_t
41 Decode (const lldb_private::Disassembler &disassembler,
42 const lldb_private::DataExtractor &data,
43 uint32_t data_offset);
44
45protected:
46 EDDisassemblerRef m_disassembler;
47 EDInstRef m_inst;
48};
49
50
Chris Lattner24943d22010-06-08 16:52:24 +000051class DisassemblerLLVM : public lldb_private::Disassembler
52{
53public:
Chris Lattner24943d22010-06-08 16:52:24 +000054 //------------------------------------------------------------------
55 // Static Functions
56 //------------------------------------------------------------------
57 static void
58 Initialize();
59
60 static void
61 Terminate();
62
63 static const char *
64 GetPluginNameStatic();
65
66 static const char *
67 GetPluginDescriptionStatic();
68
69 static lldb_private::Disassembler *
70 CreateInstance(const lldb_private::ArchSpec &arch);
71
72
73 DisassemblerLLVM(const lldb_private::ArchSpec &arch);
74
75 virtual
76 ~DisassemblerLLVM();
77
78 size_t
Greg Clayton5c4c7462010-10-06 03:09:58 +000079 DecodeInstructions (const lldb_private::Address &base_addr,
80 const lldb_private::DataExtractor& data,
Greg Clayton70436352010-06-30 23:03:03 +000081 uint32_t data_offset,
Jim Inghamaa3e3e12011-03-22 01:48:42 +000082 uint32_t num_instructions,
83 bool append);
Greg Clayton70436352010-06-30 23:03:03 +000084
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
Chris Lattner24943d22010-06-08 16:52:24 +000097protected:
Greg Clayton5e4f4a22011-02-16 00:00:43 +000098 bool
99 IsValid() const
100 {
101 return m_disassembler != NULL;
102 }
103
Chris Lattner24943d22010-06-08 16:52:24 +0000104 EDDisassemblerRef m_disassembler;
Greg Claytonb1888f22011-03-19 01:12:21 +0000105 EDDisassemblerRef m_disassembler_thumb;
Chris Lattner24943d22010-06-08 16:52:24 +0000106};
107
108#endif // liblldb_DisassemblerLLVM_h_