class RuntimeFunction

Declaration

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

Description

RuntimeFunction - An entry in the table of procedure data (.pdata) 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:100

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:165

uint32_t ExceptionInformationRVA() const

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

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

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

uint32_t FunctionLength() const

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

bool H() const

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

bool L() const

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

uint32_t PackedUnwindData() const

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

bool R() const

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

uint8_t Reg() const

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

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

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

RuntimeFunction(const support::ulittle32_t* Data)

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

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:108

Parameters

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

uint16_t StackAdjust() const

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