1 //===-- llvm/MC/MCExternalSymbolizer.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 // This file contains the declaration of the MCExternalSymbolizer class, which 11 // enables library users to provide callbacks (through the C API) to do the 12 // symbolization externally. 13 // 14 //===----------------------------------------------------------------------===// 15 16 #ifndef LLVM_MC_MCEXTERNALSYMBOLIZER_H 17 #define LLVM_MC_MCEXTERNALSYMBOLIZER_H 18 19 #include "llvm-c/Disassembler.h" 20 #include "llvm/MC/MCSymbolizer.h" 21 #include <memory> 22 23 namespace llvm { 24 25 /// \brief Symbolize using user-provided, C API, callbacks. 26 /// 27 /// See llvm-c/Disassembler.h. 28 class MCExternalSymbolizer : public MCSymbolizer { 29 protected: 30 /// \name Hooks for symbolic disassembly via the public 'C' interface. 31 /// @{ 32 /// The function to get the symbolic information for operands. 33 LLVMOpInfoCallback GetOpInfo; 34 /// The function to lookup a symbol name. 35 LLVMSymbolLookupCallback SymbolLookUp; 36 /// The pointer to the block of symbolic information for above call back. 37 void *DisInfo; 38 /// @} 39 40 public: MCExternalSymbolizer(MCContext & Ctx,std::unique_ptr<MCRelocationInfo> RelInfo,LLVMOpInfoCallback getOpInfo,LLVMSymbolLookupCallback symbolLookUp,void * disInfo)41 MCExternalSymbolizer(MCContext &Ctx, 42 std::unique_ptr<MCRelocationInfo> RelInfo, 43 LLVMOpInfoCallback getOpInfo, 44 LLVMSymbolLookupCallback symbolLookUp, void *disInfo) 45 : MCSymbolizer(Ctx, std::move(RelInfo)), GetOpInfo(getOpInfo), 46 SymbolLookUp(symbolLookUp), DisInfo(disInfo) {} 47 48 bool tryAddingSymbolicOperand(MCInst &MI, raw_ostream &CommentStream, 49 int64_t Value, uint64_t Address, bool IsBranch, 50 uint64_t Offset, 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