diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2011-05-02 19:34:44 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2011-05-02 19:34:44 +0000 | 
| commit | 6b943ff3a3f8617113ecbf611cf0f8957e4e19d2 (patch) | |
| tree | fc5f365fb9035b2d0c622bbf06c9bbe8627d7279 /lib/MC/MCDisassembler/Disassembler.h | |
| parent | d0e4e96dc17a6c1c6de3340842c80f0e187ba349 (diff) | |
Notes
Diffstat (limited to 'lib/MC/MCDisassembler/Disassembler.h')
| -rw-r--r-- | lib/MC/MCDisassembler/Disassembler.h | 96 | 
1 files changed, 96 insertions, 0 deletions
diff --git a/lib/MC/MCDisassembler/Disassembler.h b/lib/MC/MCDisassembler/Disassembler.h new file mode 100644 index 0000000000000..f0ec42a017a43 --- /dev/null +++ b/lib/MC/MCDisassembler/Disassembler.h @@ -0,0 +1,96 @@ +//===------------- Disassembler.h - LLVM Disassembler -----------*- C++ -*-===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +//  +//===----------------------------------------------------------------------===// +// +// This file defines the interface for the Disassembly library's disassembler  +// context.  The disassembler is responsible for producing strings for +// individual instructions according to a given architecture and disassembly +// syntax. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_MC_DISASSEMBLER_H +#define LLVM_MC_DISASSEMBLER_H + +#include "llvm-c/Disassembler.h" +#include <string> +#include "llvm/ADT/OwningPtr.h" + +namespace llvm { +class TargetAsmInfo; +class MCContext; +class MCAsmInfo; +class MCDisassembler; +class MCInstPrinter;  +class Target; +class TargetMachine; + +// +// This is the disassembler context returned by LLVMCreateDisasm(). +// +class LLVMDisasmContext { +private: +  // +  // The passed parameters when the disassembler context is created. +  // +  // The TripleName for this disassembler. +  std::string TripleName; +  // The pointer to the caller's block of symbolic information. +  void *DisInfo; +  // The Triple specific symbolic information type returned by GetOpInfo. +  int TagType; +  // The function to get the symbolic information for operands. +  LLVMOpInfoCallback GetOpInfo; +  // The function to look up a symbol name. +  LLVMSymbolLookupCallback SymbolLookUp; +  // +  // The objects created and saved by LLVMCreateDisasm() then used by +  // LLVMDisasmInstruction(). +  // +  // The LLVM target corresponding to the disassembler. +  // FIXME: using llvm::OwningPtr<const llvm::Target> causes a malloc error +  //        when this LLVMDisasmContext is deleted. +  const Target *TheTarget; +  // The assembly information for the target architecture. +  llvm::OwningPtr<const llvm::MCAsmInfo> MAI; +  // The target machine instance. +  llvm::OwningPtr<llvm::TargetMachine> TM; +  // The disassembler for the target architecture. +  // FIXME: using llvm::OwningPtr<const llvm::TargetAsmInfo> causes a malloc +  //        error when this LLVMDisasmContext is deleted. +  const TargetAsmInfo *Tai; +  // The assembly context for creating symbols and MCExprs. +  llvm::OwningPtr<const llvm::MCContext> Ctx; +  // The disassembler for the target architecture. +  llvm::OwningPtr<const llvm::MCDisassembler> DisAsm; +  // The instruction printer for the target architecture. +  llvm::OwningPtr<llvm::MCInstPrinter> IP; + +public: +  LLVMDisasmContext(std::string tripleName, void *disInfo, int tagType, +                    LLVMOpInfoCallback getOpInfo, +                    LLVMSymbolLookupCallback symbolLookUp, +                    const Target *theTarget, const MCAsmInfo *mAI, +                    llvm::TargetMachine *tM, const TargetAsmInfo *tai, +                    llvm::MCContext *ctx, const MCDisassembler *disAsm, +                    MCInstPrinter *iP) : TripleName(tripleName), +                    DisInfo(disInfo), TagType(tagType), GetOpInfo(getOpInfo), +                    SymbolLookUp(symbolLookUp), TheTarget(theTarget), Tai(tai) { +    TM.reset(tM); +    MAI.reset(mAI); +    Ctx.reset(ctx); +    DisAsm.reset(disAsm); +    IP.reset(iP); +  } +  const MCDisassembler *getDisAsm() const { return DisAsm.get(); } +  MCInstPrinter *getIP() { return IP.get(); } +}; + +} // namespace llvm + +#endif  | 
