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
- public bool C() const
- public uint32_t ExceptionInformationRVA() const
- public llvm::ARM::WinEH::RuntimeFunctionFlag Flag() const
- public uint32_t FunctionLength() const
- public bool H() const
- public bool L() const
- public uint32_t PackedUnwindData() const
- public bool R() const
- public uint8_t Reg() const
- public llvm::ARM::WinEH::ReturnType Ret() const
- public RuntimeFunction(const support::ulittle32_t * Data)
- public RuntimeFunction(const support::ulittle32_t BeginAddress, const support::ulittle32_t UnwindData)
- public uint16_t StackAdjust() const
Methods
¶bool C() const
bool C() const
Declared at: llvm/include/llvm/Support/ARMWinEH.h:165
¶uint32_t ExceptionInformationRVA() const
uint32_t ExceptionInformationRVA() const
Declared at: llvm/include/llvm/Support/ARMWinEH.h:116
¶llvm::ARM::WinEH::RuntimeFunctionFlag Flag() const
llvm::ARM::WinEH::RuntimeFunctionFlag Flag() const
Declared at: llvm/include/llvm/Support/ARMWinEH.h:112
¶uint32_t FunctionLength() const
uint32_t FunctionLength() const
Declared at: llvm/include/llvm/Support/ARMWinEH.h:128
¶bool H() const
bool H() const
Declared at: llvm/include/llvm/Support/ARMWinEH.h:141
¶bool L() const
bool L() const
Declared at: llvm/include/llvm/Support/ARMWinEH.h:159
¶uint32_t PackedUnwindData() const
uint32_t PackedUnwindData() const
Declared at: llvm/include/llvm/Support/ARMWinEH.h:122
¶bool R() const
bool R() const
Declared at: llvm/include/llvm/Support/ARMWinEH.h:153
¶uint8_t Reg() const
uint8_t Reg() const
Declared at: llvm/include/llvm/Support/ARMWinEH.h:147
¶llvm::ARM::WinEH::ReturnType Ret() const
llvm::ARM::WinEH::ReturnType Ret() const
Declared at: llvm/include/llvm/Support/ARMWinEH.h:134
¶RuntimeFunction(const support::ulittle32_t* Data)
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)
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
uint16_t StackAdjust() const
Declared at: llvm/include/llvm/Support/ARMWinEH.h:175