1dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//===- AArch64ExternalSymbolizer.h - Symbolizer for AArch64 -----*- C++ -*-===//
2dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//
3dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//                     The LLVM Compiler Infrastructure
4dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//
5dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// This file is distributed under the University of Illinois Open Source
6dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// License. See LICENSE.TXT for details.
7dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//
8dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//===----------------------------------------------------------------------===//
9dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//
10dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// Symbolize AArch64 assembly code during disassembly using callbacks.
11dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//
12dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//===----------------------------------------------------------------------===//
13dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
14dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#ifndef AArch64EXTERNALSYMBOLIZER_H
15dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#define AArch64EXTERNALSYMBOLIZER_H
16dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
17dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#include "llvm/MC/MCExternalSymbolizer.h"
18dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
19dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesnamespace llvm {
20dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
21dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass AArch64ExternalSymbolizer : public MCExternalSymbolizer {
22dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinespublic:
23dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  AArch64ExternalSymbolizer(MCContext &Ctx,
24dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                            std::unique_ptr<MCRelocationInfo> RelInfo,
25dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                            LLVMOpInfoCallback GetOpInfo,
26dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                            LLVMSymbolLookupCallback SymbolLookUp,
27dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                            void *DisInfo)
28dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines      : MCExternalSymbolizer(Ctx, std::move(RelInfo), GetOpInfo, SymbolLookUp,
29dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                             DisInfo) {}
30dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
31dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  bool tryAddingSymbolicOperand(MCInst &MI, raw_ostream &CommentStream,
32dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                int64_t Value, uint64_t Address, bool IsBranch,
33dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines                                uint64_t Offset, uint64_t InstSize) override;
34dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines};
35dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
36dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines} // namespace llvm
37dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
38dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#endif
39