]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/llvm/include/llvm/MC/MCDisassembler/MCExternalSymbolizer.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm-project / llvm / include / llvm / MC / MCDisassembler / MCExternalSymbolizer.h
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/Disassembler.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 InstSize) override;
50   void tryAddingPcLoadReferenceComment(raw_ostream &CommentStream,
51                                        int64_t Value,
52                                        uint64_t Address) override;
53 };
54
55 }
56
57 #endif