LLVM: llvm::dwarf::UnwindLocation Class Reference (original) (raw)

A class that represents a location for the Call Frame Address (CFA) or a register. More...

#include "[llvm/DebugInfo/DWARF/LowLevel/DWARFUnwindTable.h](DWARFUnwindTable%5F8h%5Fsource.html)"

Public Types
enum Location { Unspecified, Undefined, Same, CFAPlusOffset, RegPlusOffset, DWARFExpr, Constant }
Public Member Functions
Location getLocation () const
uint32_t getRegister () const
int32_t getOffset () const
bool hasAddressSpace () const
uint32_t getAddressSpace () const
int32_t getConstant () const
bool getDereference () const
void setRegister (uint32_t NewRegNum)
Some opcodes will modify the CFA location's register only, so we need to be able to modify the CFA register when evaluating DWARF Call Frame Information opcodes.
void setOffset (int32_t NewOffset)
Some opcodes will modify the CFA location's offset only, so we need to be able to modify the CFA offset when evaluating DWARF Call Frame Information opcodes.
void setConstant (int32_t Value)
Some opcodes modify a constant value and we need to be able to update the constant value (DW_CFA_GNU_window_save which is also known as.
std::optional< DWARFExpression > getDWARFExpressionBytes () const
LLVM_ABI bool operator== (const UnwindLocation &RHS) const
Static Public Member Functions
static LLVM_ABI UnwindLocation createUnspecified ()
Create a location whose rule is set to Unspecified.
static LLVM_ABI UnwindLocation createUndefined ()
Create a location where the value is undefined and not available.
static LLVM_ABI UnwindLocation createSame ()
Create a location where the value is known to be in the register itself.
static LLVM_ABI UnwindLocation createIsCFAPlusOffset (int32_t Off)
Create a location that is in (Deref == false) or at (Deref == true) the CFA plus an offset.
static LLVM_ABI UnwindLocation createAtCFAPlusOffset (int32_t Off)
static LLVM_ABI UnwindLocation createIsRegisterPlusOffset (uint32_t Reg, int32_t Off, std::optional< uint32_t > AddrSpace=std::nullopt)
Create a location where the saved value is in (Deref == false) or at (Deref == true) a regiser plus an offset and, optionally, in the specified address space (used mostly for the CFA).
static LLVM_ABI UnwindLocation createAtRegisterPlusOffset (uint32_t Reg, int32_t Off, std::optional< uint32_t > AddrSpace=std::nullopt)
static LLVM_ABI UnwindLocation createIsDWARFExpression (DWARFExpression Expr)
Create a location whose value is the result of evaluating a DWARF expression.
static LLVM_ABI UnwindLocation createAtDWARFExpression (DWARFExpression Expr)
static LLVM_ABI UnwindLocation createIsConstant (int32_t Value)

A class that represents a location for the Call Frame Address (CFA) or a register.

This is decoded from the DWARF Call Frame Information instructions and put into an UnwindRow.

Definition at line 28 of file DWARFUnwindTable.h.

Location

Enumerator
Unspecified Not specified.
Undefined Register is not available and can't be recovered.
Same Register value is in the register, nothing needs to be done to unwind it: reg = reg.
CFAPlusOffset Register is in or at the CFA plus an offset: reg = CFA + offset reg = defef(CFA + offset)
RegPlusOffset Register or CFA is in or at a register plus offset, optionally in an address space: reg = reg + offset [in addrspace] reg = deref(reg + offset [in addrspace])
DWARFExpr Register or CFA value is in or at a value found by evaluating a DWARF expression: reg = eval(dwarf_expr) reg = deref(eval(dwarf_expr))
Constant Value is a constant value contained in "Offset": reg = Offset.

Definition at line 30 of file DWARFUnwindTable.h.

createAtCFAPlusOffset()

UnwindLocation UnwindLocation::createAtCFAPlusOffset ( int32_t Off) static

createAtDWARFExpression()

createAtRegisterPlusOffset()

createIsCFAPlusOffset()

UnwindLocation UnwindLocation::createIsCFAPlusOffset ( int32_t Off) static

Create a location that is in (Deref == false) or at (Deref == true) the CFA plus an offset.

Most registers that are spilled onto the stack use this rule. The rule for the register will use this rule and specify a unique offset from the CFA with Deref set to true. This value will be relative to a CFA value which is typically defined using the register plus offset location.

See also

createRegisterPlusOffset(...) for more information.

Definition at line 31 of file DWARFUnwindTable.cpp.

References CFAPlusOffset, and llvm::dwarf::InvalidRegisterNumber.

Referenced by llvm::dwarf::parseRows().

createIsConstant()

UnwindLocation UnwindLocation::createIsConstant ( int32_t Value) static

createIsDWARFExpression()

Create a location whose value is the result of evaluating a DWARF expression.

This allows complex expressions to be evaluated in order to unwind a register or CFA value.

Definition at line 51 of file DWARFUnwindTable.cpp.

Referenced by llvm::dwarf::parseRows().

createIsRegisterPlusOffset()

Create a location where the saved value is in (Deref == false) or at (Deref == true) a regiser plus an offset and, optionally, in the specified address space (used mostly for the CFA).

The CFA is usually defined using this rule by using the stack pointer or frame pointer as the register, with an offset that accounts for all spilled registers and all local variables in a function, and Deref == false.

Definition at line 40 of file DWARFUnwindTable.cpp.

References RegPlusOffset.

Referenced by llvm::dwarf::parseRows().

createSame()

createUndefined()

createUnspecified()

Create a location whose rule is set to Unspecified.

This means the register value might be in the same register but it wasn't specified in the unwind opcodes.

Definition at line 21 of file DWARFUnwindTable.cpp.

References Unspecified.

getAddressSpace()

uint32_t llvm::dwarf::UnwindLocation::getAddressSpace ( ) const inline

getConstant()

int32_t llvm::dwarf::UnwindLocation::getConstant ( ) const inline

getDereference()

bool llvm::dwarf::UnwindLocation::getDereference ( ) const inline

getDWARFExpressionBytes()

std::optional< DWARFExpression > llvm::dwarf::UnwindLocation::getDWARFExpressionBytes ( ) const inline

getLocation()

Location llvm::dwarf::UnwindLocation::getLocation ( ) const inline

getOffset()

int32_t llvm::dwarf::UnwindLocation::getOffset ( ) const inline

getRegister()

uint32_t llvm::dwarf::UnwindLocation::getRegister ( ) const inline

hasAddressSpace()

bool llvm::dwarf::UnwindLocation::hasAddressSpace ( ) const inline

operator==()

setConstant()

void llvm::dwarf::UnwindLocation::setConstant ( int32_t Value) inline

Some opcodes modify a constant value and we need to be able to update the constant value (DW_CFA_GNU_window_save which is also known as.

Definition at line 149 of file DWARFUnwindTable.h.

setOffset()

void llvm::dwarf::UnwindLocation::setOffset ( int32_t NewOffset) inline

Some opcodes will modify the CFA location's offset only, so we need to be able to modify the CFA offset when evaluating DWARF Call Frame Information opcodes.

Definition at line 145 of file DWARFUnwindTable.h.

setRegister()

void llvm::dwarf::UnwindLocation::setRegister ( uint32_t NewRegNum) inline

Some opcodes will modify the CFA location's register only, so we need to be able to modify the CFA register when evaluating DWARF Call Frame Information opcodes.

Definition at line 141 of file DWARFUnwindTable.h.


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