ef10b803593618577da0cc9f1624c167029e3ffd
[oota-llvm.git] / include / llvm / MC / MCDisassembler.h
1 //===-- llvm/MC/MCDisassembler.h - Disassembler interface -------*- 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 #ifndef MCDISASSEMBLER_H
10 #define MCDISASSEMBLER_H
11
12 #include "llvm/Support/DataTypes.h"
13
14 namespace llvm {
15   
16 class MCInst;
17 class MemoryObject;
18 class raw_ostream;
19
20 /// MCDisassembler - Superclass for all disassemblers.  Consumes a memory region
21 ///   and provides an array of assembly instructions.
22 class MCDisassembler {
23 public:
24   /// Constructor     - Performs initial setup for the disassembler.
25   MCDisassembler() {}
26   
27   virtual ~MCDisassembler();
28   
29   /// getInstruction  - Returns the disassembly of a single instruction.
30   ///
31   /// @param instr    - An MCInst to populate with the contents of the 
32   ///                   instruction.
33   /// @param size     - A value to populate with the size of the instruction, or
34   ///                   the number of bytes consumed while attempting to decode
35   ///                   an invalid instruction.
36   /// @param region   - The memory object to use as a source for machine code.
37   /// @param address  - The address, in the memory space of region, of the first
38   ///                   byte of the instruction.
39   /// @param vStream  - The stream to print warnings and diagnostic messages on.
40   /// @return         - True if the instruction is valid; false otherwise.
41   virtual bool          getInstruction(MCInst& instr,
42                                        uint64_t& size,
43                                        const MemoryObject &region,
44                                        uint64_t address,
45                                        raw_ostream &vStream) const = 0;
46 };  
47
48 } // namespace llvm
49
50 #endif