LLVM 22.0.0git
llvm::AMDGPUSymbolizer Class Reference

#include "Target/AMDGPU/Disassembler/AMDGPUDisassembler.h"

Inheritance diagram for llvm::AMDGPUSymbolizer:
[legend]

Public Member Functions

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

Additional Inherited Members

Protected Attributes inherited from llvm::MCSymbolizer
MCContextCtx
std::unique_ptr< MCRelocationInfoRelInfo

Detailed Description

Definition at line 197 of file AMDGPUDisassembler.h.

Constructor & Destructor Documentation

◆ AMDGPUSymbolizer()

llvm::AMDGPUSymbolizer::AMDGPUSymbolizer ( MCContext & Ctx,
std::unique_ptr< MCRelocationInfo > && RelInfo,
void * disInfo )
inline

Member Function Documentation

◆ getReferencedAddresses()

ArrayRef< uint64_t > llvm::AMDGPUSymbolizer::getReferencedAddresses ( ) const
inlineoverridevirtual

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 from llvm::MCSymbolizer.

Definition at line 216 of file AMDGPUDisassembler.h.

◆ tryAddingPcLoadReferenceComment()

void AMDGPUSymbolizer::tryAddingPcLoadReferenceComment ( raw_ostream & cStream,
int64_t Value,
uint64_t Address )
overridevirtual

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.

Implements llvm::MCSymbolizer.

Definition at line 2789 of file AMDGPUDisassembler.cpp.

References llvm::Address, and llvm_unreachable.

◆ tryAddingSymbolicOperand()

bool AMDGPUSymbolizer::tryAddingSymbolicOperand ( MCInst & Inst,
raw_ostream & cStream,
int64_t Value,
uint64_t Address,
bool IsBranch,
uint64_t Offset,
uint64_t OpSize,
uint64_t InstSize )
overridevirtual

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.
OpSize- Size of the operand in bytes.
InstSize- Size of the instruction in bytes.
Returns
Whether a symbolic operand was added.

Implements llvm::MCSymbolizer.

Definition at line 2761 of file AMDGPUDisassembler.cpp.

References llvm::Add, llvm::MCInst::addOperand(), llvm::SymbolInfoTy::Addr, llvm::MCSymbolRefExpr::create(), llvm::MCOperand::createExpr(), llvm::MCSymbolizer::Ctx, llvm::find_if(), llvm::ELF::STT_NOTYPE, and llvm::SymbolInfoTy::Type.


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