LLVM: llvm::MCSymbolizer Class Reference (original) (raw)

Symbolize and annotate disassembled instructions. More...

#include "[llvm/MC/MCDisassembler/MCSymbolizer.h](MCSymbolizer%5F8h%5Fsource.html)"

Public Member Functions
MCSymbolizer (MCContext &Ctx, std::unique_ptr< MCRelocationInfo > RelInfo)
Construct an MCSymbolizer, taking ownership of RelInfo.
MCSymbolizer (const MCSymbolizer &)=delete
MCSymbolizer & operator= (const MCSymbolizer &)=delete
virtual ~MCSymbolizer ()
virtual bool tryAddingSymbolicOperand (MCInst &Inst, raw_ostream &cStream, int64_t Value, uint64_t Address, bool IsBranch, uint64_t Offset, uint64_t OpSize, uint64_t InstSize)=0
Try to add a symbolic operand instead of Value to the MCInst.
virtual void tryAddingPcLoadReferenceComment (raw_ostream &cStream, int64_t Value, uint64_t Address)=0
Try to add a comment on the PC-relative load.
virtual ArrayRef< uint64_t > getReferencedAddresses () const
Get the MCSymbolizer's list of addresses that were referenced by symbolizable operands but not resolved to a symbol.

Symbolize and annotate disassembled instructions.

For now this mimics the old symbolization logic (from both ARM and x86), that relied on user-provided (C API) callbacks to do the actual symbol lookup in the object file. This was moved to MCExternalSymbolizer. A better API would not rely on actually calling the two methods here from inside each disassembler, but would use the instr info to determine what operands are actually symbolizable, and in what way. I don't think this information exists right now.

Definition at line 40 of file MCSymbolizer.h.

MCSymbolizer() [2/2]

~MCSymbolizer()

MCSymbolizer::~MCSymbolizer ( ) virtualdefault

getReferencedAddresses()

virtual ArrayRef< uint64_t > llvm::MCSymbolizer::getReferencedAddresses ( ) const inlinevirtual

Get the MCSymbolizer's list of addresses that were referenced by symbolizable operands but not resolved to a symbol.

The caller (some code that is disassembling a section or other chunk of code) would typically create a synthetic label at each address and add them to its list of symbols in the section, before creating a new MCSymbolizer with the enhanced symbol list and retrying disassembling the section. The returned array is unordered and may have duplicates. The returned ArrayRef stops being valid on any call to or destruction of the MCSymbolizer object.

Reimplemented in llvm::AMDGPUSymbolizer.

Definition at line 91 of file MCSymbolizer.h.

operator=()

tryAddingPcLoadReferenceComment()

virtual void llvm::MCSymbolizer::tryAddingPcLoadReferenceComment ( raw_ostream & cStream, int64_t Value, uint64_t Address ) pure virtual

tryAddingSymbolicOperand()

Try to add a symbolic operand instead of [Value](classllvm%5F1%5F1Value.html "LLVM Value Representation.") to the MCInst.

Instead of having a difficult to read immediate, a symbolic operand would represent this immediate in a more understandable way, for instance as a symbol or an offset from a symbol. Relocations can also be used to enrich the symbolic expression.

Parameters

Inst - The MCInst where to insert the symbolic operand.
cStream - Stream to print comments and annotations on.
Value - Operand value, pc-adjusted by the caller if necessary.
Address - Load address of the instruction.
IsBranch - Is the instruction a branch?
Offset - Byte offset of the operand inside the inst.
OpSize - Size of the operand in bytes.
InstSize - Size of the instruction in bytes.

Returns

Whether a symbolic operand was added.

Implemented in llvm::AArch64ExternalSymbolizer, llvm::AMDGPUSymbolizer, and llvm::MCExternalSymbolizer.

References llvm::Address, and llvm::Offset.

Ctx

RelInfo


The documentation for this class was generated from the following files: