blob: 8408d70dc879c3b1db1015d1bb2002815baa5488 [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,
Greg Clayton889fbd02011-03-26 19:14:58 +000026 lldb_private::AddressClass addr_class,
Greg Clayton7bc39082011-03-24 23:53:38 +000027 EDDisassemblerRef disassembler);
Chris Lattner24943d22010-06-08 16:52:24 +000028
29 virtual
Greg Clayton5c4c7462010-10-06 03:09:58 +000030 ~InstructionLLVM();
Chris Lattner24943d22010-06-08 16:52:24 +000031
Greg Clayton149731c2011-03-25 18:03:16 +000032 virtual void
Chris Lattner24943d22010-06-08 16:52:24 +000033 Dump (lldb_private::Stream *s,
Greg Clayton889fbd02011-03-26 19:14:58 +000034 uint32_t max_opcode_byte_size,
Greg Clayton5c4c7462010-10-06 03:09:58 +000035 bool show_address,
Greg Clayton149731c2011-03-25 18:03:16 +000036 bool show_bytes,
Greg Clayton5c4c7462010-10-06 03:09:58 +000037 const lldb_private::ExecutionContext* exe_ctx,
Chris Lattner24943d22010-06-08 16:52:24 +000038 bool raw);
39
Greg Clayton149731c2011-03-25 18:03:16 +000040 virtual bool
Chris Lattner24943d22010-06-08 16:52:24 +000041 DoesBranch () const;
42
Greg Clayton149731c2011-03-25 18:03:16 +000043 virtual size_t
Greg Clayton889fbd02011-03-26 19:14:58 +000044 Decode (const Disassembler &disassembler,
45 const lldb_private::DataExtractor &data,
46 uint32_t data_offset);
Chris Lattner24943d22010-06-08 16:52:24 +000047
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 Clayton5c4c7462010-10-06 03:09:58 +000078 DecodeInstructions (const lldb_private::Address &base_addr,
79 const lldb_private::DataExtractor& data,
Greg Clayton70436352010-06-30 23:03:03 +000080 uint32_t data_offset,
Jim Inghamaa3e3e12011-03-22 01:48:42 +000081 uint32_t num_instructions,
82 bool append);
Greg Clayton70436352010-06-30 23:03:03 +000083
Chris Lattner24943d22010-06-08 16:52:24 +000084 //------------------------------------------------------------------
85 // PluginInterface protocol
86 //------------------------------------------------------------------
87 virtual const char *
88 GetPluginName();
89
90 virtual const char *
91 GetShortPluginName();
92
93 virtual uint32_t
94 GetPluginVersion();
95
Chris Lattner24943d22010-06-08 16:52:24 +000096protected:
Greg Clayton5e4f4a22011-02-16 00:00:43 +000097 bool
98 IsValid() const
99 {
100 return m_disassembler != NULL;
101 }
102
Chris Lattner24943d22010-06-08 16:52:24 +0000103 EDDisassemblerRef m_disassembler;
Greg Claytonb1888f22011-03-19 01:12:21 +0000104 EDDisassemblerRef m_disassembler_thumb;
Chris Lattner24943d22010-06-08 16:52:24 +0000105};
106
107#endif // liblldb_DisassemblerLLVM_h_