class RuntimeFunction

Declaration

class RuntimeFunction { /* full declaration omitted */ };

Description

RuntimeFunction - An entry in the table of procedure data (.pdata) This is ARM specific, but the Function Start RVA, Flag and ExceptionInformationRVA fields work identically for ARM64. 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +---------------------------------------------------------------+ | Function Start RVA | +-------------------+-+-+-+-----+-+---+---------------------+---+ | Stack Adjust |C|L|R| Reg |H|Ret| Function Length |Flg| +-------------------+-+-+-+-----+-+---+---------------------+---+ Flag : 2-bit field with the following meanings: - 00 = packed unwind data not used; reamining bits point to .xdata record - 01 = packed unwind data - 10 = packed unwind data, function assumed to have no prologue; useful for function fragments that are discontiguous with the start of the function - 11 = reserved Function Length : 11-bit field providing the length of the entire function in bytes, divided by 2; if the function is greater than 4KB, a full .xdata record must be used instead Ret : 2-bit field indicating how the function returns - 00 = return via pop {pc} (the L bit must be set) - 01 = return via 16-bit branch - 10 = return via 32-bit branch - 11 = no epilogue; useful for function fragments that may only contain a prologue but the epilogue is elsewhere H : 1-bit flag indicating whether the function "homes" the integer parameter registers (r0-r3), allocating 16-bytes on the stack Reg : 3-bit field indicating the index of the last saved non-volatile register. If the R bit is set to 0, then only integer registers are saved (r4-rN, where N is 4 + Reg). If the R bit is set to 1, then only floating-point registers are being saved (d8-dN, where N is 8 + Reg). The special case of the R bit being set to 1 and Reg equal to 7 indicates that no registers are saved. R : 1-bit flag indicating whether the non-volatile registers are integer or floating-point. 0 indicates integer, 1 indicates floating-point. The special case of the R-flag being set and Reg being set to 7 indicates that no non-volatile registers are saved. L : 1-bit flag indicating whether the function saves/restores the link register (LR) C : 1-bit flag indicating whether the function includes extra instructions to setup a frame chain for fast walking. If this flag is set, r11 is implicitly added to the list of saved non-volatile integer registers. Stack Adjust : 10-bit field indicating the number of bytes of stack that are allocated for this function. Only values between 0x000 and 0x3f3 can be directly encoded. If the value is 0x3f4 or greater, then the low 4 bits have special meaning as follows: - Bit 0-1 indicate the number of words' of adjustment (1-4), minus 1 - Bit 2 indicates if the prologue combined adjustment into push - Bit 3 indicates if the epilogue combined adjustment into pop RESTRICTIONS: - IF C is SET: + L flag must be set since frame chaining requires r11 and lr + r11 must NOT be included in the set of registers described by Reg - IF Ret is 0: + L flag must be set

Declared at: llvm/include/llvm/Support/ARMWinEH.h:103

Member Variables

public const support::ulittle32_t BeginAddress
public const support::ulittle32_t UnwindData

Method Overview

Methods

bool C() const

Declared at: llvm/include/llvm/Support/ARMWinEH.h:168

uint32_t ExceptionInformationRVA() const

Declared at: llvm/include/llvm/Support/ARMWinEH.h:119

llvm::ARM::WinEH::RuntimeFunctionFlag Flag() const

Declared at: llvm/include/llvm/Support/ARMWinEH.h:115

uint32_t FunctionLength() const

Declared at: llvm/include/llvm/Support/ARMWinEH.h:131

bool H() const

Declared at: llvm/include/llvm/Support/ARMWinEH.h:144

bool L() const

Declared at: llvm/include/llvm/Support/ARMWinEH.h:162

uint32_t PackedUnwindData() const

Declared at: llvm/include/llvm/Support/ARMWinEH.h:125

bool R() const

Declared at: llvm/include/llvm/Support/ARMWinEH.h:156

uint8_t Reg() const

Declared at: llvm/include/llvm/Support/ARMWinEH.h:150

llvm::ARM::WinEH::ReturnType Ret() const

Declared at: llvm/include/llvm/Support/ARMWinEH.h:137

RuntimeFunction(const support::ulittle32_t* Data)

Declared at: llvm/include/llvm/Support/ARMWinEH.h:108

Parameters

const support::ulittle32_t* Data

RuntimeFunction(
    const support::ulittle32_t BeginAddress,
    const support::ulittle32_t UnwindData)

Declared at: llvm/include/llvm/Support/ARMWinEH.h:111

Parameters

const support::ulittle32_t BeginAddress
const support::ulittle32_t UnwindData

uint16_t StackAdjust() const

Declared at: llvm/include/llvm/Support/ARMWinEH.h:178