1 //===-- llvm/MC/MCExternalSymbolizer.h - ------------------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
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.
13 //===----------------------------------------------------------------------===//
15 #ifndef LLVM_MC_MCDISASSEMBLER_MCEXTERNALSYMBOLIZER_H
16 #define LLVM_MC_MCDISASSEMBLER_MCEXTERNALSYMBOLIZER_H
18 #include "llvm-c/Disassembler.h"
19 #include "llvm/MC/MCDisassembler/MCSymbolizer.h"
24 /// Symbolize using user-provided, C API, callbacks.
26 /// See llvm-c/Disassembler.h.
27 class MCExternalSymbolizer
: public MCSymbolizer
{
29 /// \name Hooks for symbolic disassembly via the public 'C' interface.
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.
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
) {}
47 bool tryAddingSymbolicOperand(MCInst
&MI
, raw_ostream
&CommentStream
,
48 int64_t Value
, uint64_t Address
, bool IsBranch
,
49 uint64_t Offset
, uint64_t InstSize
) override
;
50 void tryAddingPcLoadReferenceComment(raw_ostream
&CommentStream
,
52 uint64_t Address
) override
;