LLVM  8.0.1
Public Member Functions | Protected Attributes | List of all members
llvm::MCSymbolizer Class Referenceabstract

Symbolize and annotate disassembled instructions. More...

#include "llvm/MC/MCDisassembler/MCSymbolizer.h"

Inheritance diagram for llvm::MCSymbolizer:
Inheritance graph
[legend]
Collaboration diagram for llvm::MCSymbolizer:
Collaboration graph
[legend]

Public Member Functions

 MCSymbolizer (MCContext &Ctx, std::unique_ptr< MCRelocationInfo > RelInfo)
 Construct an MCSymbolizer, taking ownership of RelInfo. More...
 
 MCSymbolizer (const MCSymbolizer &)=delete
 
MCSymbolizeroperator= (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 InstSize)=0
 Try to add a symbolic operand instead of Value to the MCInst. More...
 
virtual void tryAddingPcLoadReferenceComment (raw_ostream &cStream, int64_t Value, uint64_t Address)=0
 Try to add a comment on the PC-relative load. More...
 

Protected Attributes

MCContextCtx
 
std::unique_ptr< MCRelocationInfoRelInfo
 

Detailed Description

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 39 of file MCSymbolizer.h.

Constructor & Destructor Documentation

◆ MCSymbolizer() [1/2]

llvm::MCSymbolizer::MCSymbolizer ( MCContext Ctx,
std::unique_ptr< MCRelocationInfo RelInfo 
)
inline

Construct an MCSymbolizer, taking ownership of RelInfo.

Definition at line 46 of file MCSymbolizer.h.

References llvm::Address, operator=(), tryAddingPcLoadReferenceComment(), tryAddingSymbolicOperand(), and ~MCSymbolizer().

◆ MCSymbolizer() [2/2]

llvm::MCSymbolizer::MCSymbolizer ( const MCSymbolizer )
delete

◆ ~MCSymbolizer()

MCSymbolizer::~MCSymbolizer ( )
virtualdefault

Referenced by MCSymbolizer().

Member Function Documentation

◆ operator=()

MCSymbolizer& llvm::MCSymbolizer::operator= ( const MCSymbolizer )
delete

Referenced by MCSymbolizer().

◆ tryAddingPcLoadReferenceComment()

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

Try to add a comment on the PC-relative load.

For instance, in Mach-O, this is used to add annotations to instructions that use C string literals, as found in __cstring.

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

Referenced by MCSymbolizer().

◆ tryAddingSymbolicOperand()

virtual bool llvm::MCSymbolizer::tryAddingSymbolicOperand ( MCInst Inst,
raw_ostream cStream,
int64_t  Value,
uint64_t  Address,
bool  IsBranch,
uint64_t  Offset,
uint64_t  InstSize 
)
pure virtual

Try to add a symbolic operand instead of Value 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.
InstSize- Size of the instruction in bytes.
Returns
Whether a symbolic operand was added.

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

Referenced by MCSymbolizer().

Member Data Documentation

◆ Ctx

MCContext& llvm::MCSymbolizer::Ctx
protected

◆ RelInfo

std::unique_ptr<MCRelocationInfo> llvm::MCSymbolizer::RelInfo
protected

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