
MCSymbolizer::tryAddingSymbolicOperand() overloaded the Size parameter to specify either the instruction size or the operand size depending on the architecture. However, for proper symbolic disassembly on X86, we need to know both sizes, as an instruction can have two operands, and the instruction size cannot be reliably calculated based on the operand offset and its size. Hence, split Size into OpSize and InstSize. For X86, the new interface allows to fix a couple of issues: * Correctly adjust the value of PC-relative operands. * Set operand size to zero when the operand is specified implicitly. Differential Revision: https://reviews.llvm.org/D126101
39 lines
1.5 KiB
C++
39 lines
1.5 KiB
C++
//===- AArch64ExternalSymbolizer.h - Symbolizer for AArch64 -----*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Symbolize AArch64 assembly code during disassembly using callbacks.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_TARGET_AARCH64_DISASSEMBLER_AARCH64EXTERNALSYMBOLIZER_H
|
|
#define LLVM_LIB_TARGET_AARCH64_DISASSEMBLER_AARCH64EXTERNALSYMBOLIZER_H
|
|
|
|
#include "llvm/MC/MCDisassembler/MCExternalSymbolizer.h"
|
|
|
|
namespace llvm {
|
|
|
|
class AArch64ExternalSymbolizer : public MCExternalSymbolizer {
|
|
public:
|
|
AArch64ExternalSymbolizer(MCContext &Ctx,
|
|
std::unique_ptr<MCRelocationInfo> RelInfo,
|
|
LLVMOpInfoCallback GetOpInfo,
|
|
LLVMSymbolLookupCallback SymbolLookUp,
|
|
void *DisInfo)
|
|
: MCExternalSymbolizer(Ctx, std::move(RelInfo), GetOpInfo, SymbolLookUp,
|
|
DisInfo) {}
|
|
|
|
bool tryAddingSymbolicOperand(MCInst &MI, raw_ostream &CommentStream,
|
|
int64_t Value, uint64_t Address, bool IsBranch,
|
|
uint64_t Offset, uint64_t OpSize,
|
|
uint64_t InstSize) override;
|
|
};
|
|
|
|
} // namespace llvm
|
|
|
|
#endif
|