blob: 5ecda3e7014b02e117dc1d6665a98f3ebc9f677c [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:
Greg Clayton5c4c7462010-10-06 03:09:58 +000022 class InstructionLLVM : public lldb_private::Instruction
Chris Lattner24943d22010-06-08 16:52:24 +000023 {
24 public:
Greg Clayton7bc39082011-03-24 23:53:38 +000025 InstructionLLVM (const lldb_private::Address &addr,
26 EDDisassemblerRef disassembler);
Chris Lattner24943d22010-06-08 16:52:24 +000027
28 virtual
Greg Clayton5c4c7462010-10-06 03:09:58 +000029 ~InstructionLLVM();
Chris Lattner24943d22010-06-08 16:52:24 +000030
31 void
32 Dump (lldb_private::Stream *s,
Greg Clayton5c4c7462010-10-06 03:09:58 +000033 bool show_address,
Greg Clayton70436352010-06-30 23:03:03 +000034 const lldb_private::DataExtractor *bytes,
Chris Lattner24943d22010-06-08 16:52:24 +000035 uint32_t bytes_offset,
Greg Clayton5c4c7462010-10-06 03:09:58 +000036 const lldb_private::ExecutionContext* exe_ctx,
Chris Lattner24943d22010-06-08 16:52:24 +000037 bool raw);
38
39 bool
40 DoesBranch () const;
41
42 size_t
43 GetByteSize() const;
44
45 size_t
Greg Clayton7bc39082011-03-24 23:53:38 +000046 Extract (const Disassembler &disassembler,
47 const lldb_private::DataExtractor &data,
Chris Lattner24943d22010-06-08 16:52:24 +000048 uint32_t data_offset);
49
50 protected:
51 EDDisassemblerRef m_disassembler;
52 EDInstRef m_inst;
53 };
54
55 //------------------------------------------------------------------
56 // Static Functions
57 //------------------------------------------------------------------
58 static void
59 Initialize();
60
61 static void
62 Terminate();
63
64 static const char *
65 GetPluginNameStatic();
66
67 static const char *
68 GetPluginDescriptionStatic();
69
70 static lldb_private::Disassembler *
71 CreateInstance(const lldb_private::ArchSpec &arch);
72
73
74 DisassemblerLLVM(const lldb_private::ArchSpec &arch);
75
76 virtual
77 ~DisassemblerLLVM();
78
79 size_t
Greg Clayton5c4c7462010-10-06 03:09:58 +000080 DecodeInstructions (const lldb_private::Address &base_addr,
81 const lldb_private::DataExtractor& data,
Greg Clayton70436352010-06-30 23:03:03 +000082 uint32_t data_offset,
Jim Inghamaa3e3e12011-03-22 01:48:42 +000083 uint32_t num_instructions,
84 bool append);
Greg Clayton70436352010-06-30 23:03:03 +000085
Chris Lattner24943d22010-06-08 16:52:24 +000086 //------------------------------------------------------------------
87 // PluginInterface protocol
88 //------------------------------------------------------------------
89 virtual const char *
90 GetPluginName();
91
92 virtual const char *
93 GetShortPluginName();
94
95 virtual uint32_t
96 GetPluginVersion();
97
Chris Lattner24943d22010-06-08 16:52:24 +000098protected:
Greg Clayton5e4f4a22011-02-16 00:00:43 +000099 bool
100 IsValid() const
101 {
102 return m_disassembler != NULL;
103 }
104
Chris Lattner24943d22010-06-08 16:52:24 +0000105 EDDisassemblerRef m_disassembler;
Greg Claytonb1888f22011-03-19 01:12:21 +0000106 EDDisassemblerRef m_disassembler_thumb;
Chris Lattner24943d22010-06-08 16:52:24 +0000107};
108
109#endif // liblldb_DisassemblerLLVM_h_