mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-23 02:29:18 +00:00
MCDisassembler has an MCSymbolizer member that is meant to take care of symbolizing during disassembly, but it also has several methods that enable the disassembler to do symbolization internally (i.e. without an attached symbolizer object). There is no need for this duplication, but ARM64 had been making use of it. This patch moves the ARM64 symbolization logic out of ARM64Disassembler and into an ARM64ExternalSymbolizer class, and removes the duplicated MCSymbolizer functionality from the MCDisassembler interface. Symbolization will now be done exclusively through MCSymbolizers. There should be no impact on disassembly for any platform, but this allows us to tidy up the MCDisassembler interface and simplify the process of (and invariants related to) disassembler setup. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206063 91177308-0d34-0410-b5e6-96231b3b80d8
59 lines
2.1 KiB
C++
59 lines
2.1 KiB
C++
//===-- llvm/MC/MCExternalSymbolizer.h - ------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file contains the declaration of the MCExternalSymbolizer class, which
|
|
// enables library users to provide callbacks (through the C API) to do the
|
|
// symbolization externally.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_MC_MCEXTERNALSYMBOLIZER_H
|
|
#define LLVM_MC_MCEXTERNALSYMBOLIZER_H
|
|
|
|
#include "llvm-c/Disassembler.h"
|
|
#include "llvm/MC/MCSymbolizer.h"
|
|
#include <memory>
|
|
|
|
namespace llvm {
|
|
|
|
/// \brief Symbolize using user-provided, C API, callbacks.
|
|
///
|
|
/// See llvm-c/Disassembler.h.
|
|
class MCExternalSymbolizer : public MCSymbolizer {
|
|
protected:
|
|
/// \name Hooks for symbolic disassembly via the public 'C' interface.
|
|
/// @{
|
|
/// The function to get the symbolic information for operands.
|
|
LLVMOpInfoCallback GetOpInfo;
|
|
/// The function to lookup a symbol name.
|
|
LLVMSymbolLookupCallback SymbolLookUp;
|
|
/// The pointer to the block of symbolic information for above call back.
|
|
void *DisInfo;
|
|
/// @}
|
|
|
|
public:
|
|
MCExternalSymbolizer(MCContext &Ctx,
|
|
std::unique_ptr<MCRelocationInfo> RelInfo,
|
|
LLVMOpInfoCallback getOpInfo,
|
|
LLVMSymbolLookupCallback symbolLookUp, void *disInfo)
|
|
: MCSymbolizer(Ctx, std::move(RelInfo)), GetOpInfo(getOpInfo),
|
|
SymbolLookUp(symbolLookUp), DisInfo(disInfo) {}
|
|
|
|
bool tryAddingSymbolicOperand(MCInst &MI, raw_ostream &CommentStream,
|
|
int64_t Value, uint64_t Address, bool IsBranch,
|
|
uint64_t Offset, uint64_t InstSize) override;
|
|
void tryAddingPcLoadReferenceComment(raw_ostream &CommentStream,
|
|
int64_t Value,
|
|
uint64_t Address) override;
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|