Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===-- llvm/MC/MCExternalSymbolizer.h - ------------------------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. //
  9. // This file contains the declaration of the MCExternalSymbolizer class, which
  10. // enables library users to provide callbacks (through the C API) to do the
  11. // symbolization externally.
  12. //
  13. //===----------------------------------------------------------------------===//
  14.  
  15. #ifndef LLVM_MC_MCDISASSEMBLER_MCEXTERNALSYMBOLIZER_H
  16. #define LLVM_MC_MCDISASSEMBLER_MCEXTERNALSYMBOLIZER_H
  17.  
  18. #include "llvm-c/DisassemblerTypes.h"
  19. #include "llvm/MC/MCDisassembler/MCSymbolizer.h"
  20. #include <memory>
  21.  
  22. namespace llvm {
  23.  
  24. /// Symbolize using user-provided, C API, callbacks.
  25. ///
  26. /// See llvm-c/Disassembler.h.
  27. class MCExternalSymbolizer : public MCSymbolizer {
  28. protected:
  29.   /// \name Hooks for symbolic disassembly via the public 'C' interface.
  30.   /// @{
  31.   /// The function to get the symbolic information for operands.
  32.   LLVMOpInfoCallback GetOpInfo;
  33.   /// The function to lookup a symbol name.
  34.   LLVMSymbolLookupCallback SymbolLookUp;
  35.   /// The pointer to the block of symbolic information for above call back.
  36.   void *DisInfo;
  37.   /// @}
  38.  
  39. public:
  40.   MCExternalSymbolizer(MCContext &Ctx,
  41.                        std::unique_ptr<MCRelocationInfo> RelInfo,
  42.                        LLVMOpInfoCallback getOpInfo,
  43.                        LLVMSymbolLookupCallback symbolLookUp, void *disInfo)
  44.     : MCSymbolizer(Ctx, std::move(RelInfo)), GetOpInfo(getOpInfo),
  45.       SymbolLookUp(symbolLookUp), DisInfo(disInfo) {}
  46.  
  47.   bool tryAddingSymbolicOperand(MCInst &MI, raw_ostream &CommentStream,
  48.                                 int64_t Value, uint64_t Address, bool IsBranch,
  49.                                 uint64_t Offset, uint64_t OpSize,
  50.                                 uint64_t InstSize) override;
  51.   void tryAddingPcLoadReferenceComment(raw_ostream &CommentStream,
  52.                                        int64_t Value,
  53.                                        uint64_t Address) override;
  54. };
  55.  
  56. }
  57.  
  58. #endif
  59.