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: MCExternalSymbolizer(MCContext & Ctx,std::unique_ptr<MCRelocationInfo> RelInfo,LLVMOpInfoCallback getOpInfo,LLVMSymbolLookupCallback symbolLookUp,void * disInfo)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