blob: ffac5ee5cb1f61b4772195fba17c9fd826189d18 [file] [log] [blame]
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01001//===-- llvm/MC/MCExternalSymbolizer.h - ------------------------*- C++ -*-===//
2//
Andrew Walbran16937d02019-10-22 13:54:20 +01003// 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
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01006//
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
22namespace llvm {
23
Andrew Scullcdfcccc2018-10-05 20:58:37 +010024/// Symbolize using user-provided, C API, callbacks.
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010025///
26/// See llvm-c/Disassembler.h.
27class MCExternalSymbolizer : public MCSymbolizer {
28protected:
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
39public:
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